处理模板时发生错误。
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417670" at line 19, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417670" at line 19, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() > 
4<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
5<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
6<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
7<#assign url404 = '/error/404.html' > 
8<#assign environment = url?replace('/11t3.*','','r')> 
9 
10<#assign text_to_apply_source = "vanity url" > 
11<#if qstringmap["sms"]?has_content> 
12    <#assign sms = 1 > 
13    <#assign text_to_apply_source = "sms" > 
14</#if> 
15<#if qstringmap["qrCode"]?has_content> 
16    <#assign text_to_apply_source = "qr code" > 
17</#if> 
18 
19<#assign lc = qstringmap["ecdma-lc"]?first>  
20<#assign lc = htmlUtil.escape(lc)> 
21<#assign lc = htmlUtil.escapeJS(lc)> 
22 
23<#assign prefix = "00000" > 
24<#assign lcWithPrefix = prefix + lc > 
25<#assign withPrefixLength = lcWithPrefix?length > 
26<#assign startHere = withPrefixLength - 5> 
27<#assign lc = lcWithPrefix?substring(startHere)> 
28 
29<#if qstringmap["ecid"]?has_content> 
30    <#assign ecidExt = qstringmap["ecid"]?first> 
31    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
32    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
33    <#assign ecidExt = "&ecid=" + ecidExt> 
34 
35 
36    <#assign campaignId = qstringmap["ecid"]?first > 
37    <#assign campaignId = htmlUtil.escape(campaignId)> 
38    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
39<#else> 
40    <#assign ecidExt=""> 
41    <#assign campaignId = "" > 
42</#if> 
43 
44 
45 
46<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
47<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
48<#assign clientProfile = clientProfileList?first> 
49<#assign partnerName = clientProfile.getMarketingNameLong()> 
50<#assign pbu = clientProfile.getPbu()> 
51<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
52 
53<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
54<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
55<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)> 
56 
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60<script> 
61//console.log('Partner URL', ${partnerUrl}); 
62</script> 
63<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>     
64    <#assign partnerUrl = 'https://' + partnerUrl> 
65</#if> 
66<script> 
67//console.log('Partner URL', ${partnerUrl}); 
68 
69</script> 
70<#-- Begin: filter duplicated cards--> 
71<#assign temp = []> 
72<#assign offerTypeList = []>   
73<#if (fiCardsData?size > 0)>      
74    <#assign index = 0> 
75    <#list fiCardsData as fib> 
76        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
77            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
78            <#assign temp = temp + fiCardsData[index..index]>  
79        </#if>   
80        <#assign index = index + 1>               
81    </#list>  
82    <#assign fiCardsData = temp> 
83    <#if (fiCardsData?size > 0)> 
84        <div class="content-container content-container-main" title="${partnerName!''}"> 
85            <#if url?contains("index")> 
86                <#assign product="All Cards"> 
87                <header class="jn-header"> 
88                    <div class="header-logo">  
89 
90                        <#if partnerUrl?has_content> 
91                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
92                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
93                            </a> 
94                        <#else> 
95                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
96                        </#if> 
97                    </div>  
98                </header>         
99            <#else> 
100                <header class="jn-header"> 
101                    <div class="back-overview hide-desktop">  
102                        <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
103                    </div>  
104 
105                    <div class="header-main-logo" title="${partnerName!''}"> 
106                        <#if partnerUrl?has_content> 
107                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
108                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
109                            </a> 
110                        <#else>                            
111                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">                             
112                        </#if> 
113                    </div> 
114                    <div class="styled-select slate"> 
115                        <nav class="styled-select__dropdown"> 
116                            <div class="back-overview hide-mobile">  
117                                <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
118                            </div>   
119                            <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false"> 
120                                <span class="selected-option"></span>  
121                                <div class="jn-arrow arrow arrow-right"></div> 
122                            </a> 
123                            <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false"> 
124                                <div class="first-line transform transformed1"></div> 
125                                <div></div> 
126                                <div class="transform transformed2"></div> 
127                                <div></div> 
128                            </a> 
129                            <ul> 
130                                <#list fiCardsData as fib> 
131                                    <#switch fib.offerType> 
132                                        <#case "101"> 
133                                            <#assign productURL = "202302/consumer-edr"> 
134                                            <#assign productName = "Everyday Rewards+"> 
135                                            <#break> 
136                                        <#case "103"> 
137                                            <#assign productURL = "202302/consumer-edr"> 
138                                            <#assign productName = "Everyday Rewards+"> 
139                                            <#break> 
140                                        <#case "104"> 
141                                            <#assign productURL = "max-cash"> 
142                                            <#assign productName = "Max Cash Preferred Card">       
143                                            <#break> 
144                                        <#case "108"> 
145                                            <#assign productURL="202308/consumer-platinum"> 
146                                            <#assign productName="Platinum Card"> 
147                                            <#break> 
148                                        <#case "109"> 
149                                            <#assign productURL="202308/consumer-platinum"> 
150                                            <#assign productName="Platinum Card"> 
151                                            <#break> 
152                                        <#case "115"> 
153                                            <#assign productURL = "secured"> 
154                                            <#assign productName = "Secured Card" > 
155                                            <#break> 
156                                        <#case "138"> 
157                                            <#assign productURL = "202305/travel-rewards-plus"> 
158                                            <#assign productName = "Travel Rewards+" > 
159                                            <#break> 
160                                        <#case "141"> 
161                                            <#assign productURL = "college-real-rewards"> 
162                                            <#assign productName = "College Real Rewards" >     
163                                            <#break> 
164                                        <#case "147"> 
165                                            <#assign productURL = "max-cash-secured"> 
166                                            <#assign productName = "Max Cash Secured Card" >     
167                                            <#break> 
168                                        <#case "154"> 
169                                            <#assign productURL = "202305/reserve-rewards-plus"> 
170                                            <#assign productName = "Reserve Rewards+" > 
171                                            <#break> 
172                                        <#case "121"> 
173                                            <#assign productURL = "202208/business-platinum"> 
174                                            <#assign productName = "Business Card" > 
175                                            <#break> 
176                                        <#case "128"> 
177                                            <#assign productURL = "business-cash-preferred"> 
178                                            <#assign productName = "Business Cash Preferred" > 
179                                            <#break> 
180                                        <#case "143"> 
181                                            <#assign productURL = "business-real-rewards"> 
182                                            <#assign productName = "Business Real Rewards Card" > 
183                                            <#break> 
184                                        <#case "144"> 
185                                            <#assign productURL = "smart-business-rewards"> 
186                                            <#assign productName = "Smart Business Rewards Card" >     
187                                            <#break> 
188                                        <#default>                                                         
189                                    </#switch> 
190                                    <#if url?matches(".*/${productURL}\\?.*")> 
191                                        <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li> 
192                                    <#else>                                 
193                                        <li class="dropdown-item" data-value="${productName}"> 
194                                            <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}"> 
195                                            ${productName}  
196                                            </a> 
197                                        </li>                                    
198                                    </#if> 
199                                </#list> 
200                            </ul> 
201                        </nav> 
202                         
203                    </div> 
204                </header> 
205                <script> 
206                    function toggleFlyOutMenu() { 
207                        $('.styled-select').toggleClass('show-select'); 
208                        var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded'); 
209                        if(ariaExpanded !== null) { 
210                            var isAriaExpanded; 
211                            if(ariaExpanded === "true") { 
212                                isAriaExpanded = true; 
213                            } else {  
214                                isAriaExpanded = false  
215
216                            $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded); 
217                            $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded); 
218
219
220                    AUI().ready(function () { 
221                        var pageSelected = $('.selected').attr('data-value'); 
222                        $('.jn-hamburger, .dropdown-select').click(function () { 
223                            toggleFlyOutMenu(); 
224                        }); 
225                        $('.styled-select__dropdown').keydown(function(event) { 
226                            var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first(); 
227                            var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last(); 
228 
229                            if(event.keyCode === 9 ) { 
230                                // if they tab outside of the nav close the navigation 
231                                //shift + tab pressed 
232                                if(event.shiftKey && firstNavigationLink.is(document.activeElement)) { 
233                                    toggleFlyOutMenu(); 
234                                } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) { 
235                                    toggleFlyOutMenu(); 
236                                }                             
237
238                        }); 
239                        $('.selected-option').text(pageSelected); 
240                    }); 
241                </script>            
242            </#if> 
243        </div> 
244        <script> 
245                var reportingData = {}; 
246                                                             
247                //document.addEventListener('DOMContentLoaded', function() { 
248                AUI().ready(function () { 
249                    //console.log('inside ready'); 
250                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
251                    var hostName = location.hostname;                                 
252                    function getDomainFromHostname(hostname) { 
253                        var parts = hostname.split('.'); 
254                        return parts.length === 3 ? parts[1] : parts[0]; 
255
256                    var domain = getDomainFromHostname(hostName); 
257                    var partnerName = "${partnerName!''}"; 
258                    var product = "All Cards"; 
259                    var title = ""; 
260                    var metaDesc = ""; 
261                    var m = document.createElement('meta');  
262                    switch(page) { 
263                        case "max-cash-secured": 
264                            product="Max Cash Secured Card"; 
265                            title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card"; 
266                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
267                            break;  
268                        case "max-cash": 
269                            product="Max Cash Preferred Card"; 
270                            title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card"; 
271                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select"; 
272                            break;                         
273                        case "consumer-platinum": 
274                            product="Platinum Card"; 
275                            title = "The purchasing power of Zero | "+partnerName+" Platinum Card"; 
276                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card."; 
277                            break; 
278                        case "consumer-edr": 
279                            product="Everyday Rewards+"; 
280                            title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+"; 
281                            break; 
282                        case "secured": 
283                            product="Secured Card"; 
284                            title = "Strengthen your finances | "+partnerName+" Secured Card"; 
285                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
286                            break; 
287                        case "college-real-rewards": 
288                            product="College Real Rewards"; 
289                            title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards"; 
290                            break; 
291                        case "smart-business-rewards": 
292                            product="Smart Business Rewards Card"; 
293                            title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card"; 
294                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card."; 
295                            break;                             
296                        case "business-cash-preferred": 
297                            product="Business Cash Preferred"; 
298                            title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred"; 
299                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
300                            break; 
301                        case "business-real-rewards": 
302                            product="Business Real Rewards Card"; 
303                            title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card"; 
304                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ; 
305                            break; 
306                        case "business-platinum": 
307                            product="Business Card"; 
308                            title = "Pay down your other credit card balances faster | "+partnerName+" Business Card"; 
309                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
310                            break; 
311                        case "travel-rewards-plus": 
312                            product="Travel Rewards+" 
313                            title = partnerName + " | Travel Rewards+ Card"; 
314                            metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories." 
315                            break; 
316                        case "reserve-rewards-plus": 
317                            product="Reserve Rewards+" 
318                            title = partnerName + " | Reserve Rewards+ Card"; 
319                            metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card."; 
320                            break; 
321                        default:   
322                            product = "All Cards";    
323                            title = partnerName + " Credit Card Index Page";                        
324
325                    document.title = title; 
326                    m.name = 'description';  
327                    m.content = metaDesc;  
328                    document.head.appendChild(m); 
329 
330                    var lc = "${lc!'0'}"; 
331 
332                    /* update SiteCatalyst data object */ 
333                        reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
334                        reportingData.page_type = 'product';  
335                        reportingData.site_section = 'credit cards'; 
336                        reportingData.platform = 'microsite'; 
337                        reportingData.campaign_id = '${campaignId}'; 
338                        reportingData.location_code = lc; 
339                        reportingData.partner_name = partnerName; 
340                        reportingData.product = product; 
341                        reportingData.text_to_apply_source = '${text_to_apply_source}'; 
342                        reportingData.visitor_type = 'prospect';         
343                        reportingData.Banker_id = '0'; 
344                        reportingData.Banker_code = '0';        
345 
346 
347                    /* SiteCatalyst  pageView tracking */ 
348                        AUI().ready(function() { 
349                            if (window.publisherFW) { 
350                                //console.log("pageView"); 
351                                window.publisherFW.publishEvent("pageView", reportingData); 
352                            }  
353                        }); 
354 
355                    jQuery('.jn-button, .applyNowLink').on('click', function(e){ 
356                        var buttonName = $(this).data('button-name'); 
357                        var productName = $(this).data('product-name'); 
358                        /* SiteCatalyst  onClick tracking */ 
359                        reportingData.applyButton = buttonName; 
360                        reportingData.product = productName; 
361 
362                            if (window.publisherFW) { 
363                                //console.log('clicked', reportingData); 
364                                window.publisherFW.publishEvent("onClick", reportingData); 
365                            }   
366 
367                    }); 
368 
369                    jQuery('.applyNowLink').on('click', function(e){ 
370                        ga("send", { 
371                            hitType: "event", 
372                            eventAction: "ApplyNow", 
373                            eventCategory: "click", 
374                            eventLabel: "BottomButton" 
375                        }); 
376                    }); 
377             
378                }); 
379        </script>    
380    <#else> 
381        <script> 
382            console.log("Empty card list"); 
383            location.href = '${url404}'; 
384        </script> 
385    </#if>    
386<#else> 
387    <script> 
388        console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}"); 
389        location.href = '${url404}'; 
390    </script> 
391</#if> 
处理模板时发生错误。
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417688" at line 9, column 14]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417688" at line 9, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign currentEnvironment = 'prod' > 
8 
9<#assign lc= qstringmap["ecdma-lc"]?first>   
10<#assign lc = htmlUtil.escape(lc)> 
11<#assign lc = htmlUtil.escapeJS(lc)> 
12 
13<#assign prefix = "00000" > 
14<#assign lcWithPrefix = prefix + lc > 
15<#assign withPrefixLength = lcWithPrefix?length > 
16<#assign startHere = withPrefixLength - 5> 
17<#assign lc = lcWithPrefix?substring(startHere)> 
18 
19 
20<#if qstringmap["ecid"]?has_content> 
21    <#assign ecidExt = qstringmap["ecid"]?first> 
22    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
23    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
24    <#assign ecidExt = "&ecid=" + ecidExt> 
25<#else> 
26    <#assign ecidExt=""> 
27</#if> 
28<#if oadURL?contains("uat-")> 
29    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
30    <#assign currentEnvironment = 'uat' > 
31<#else> 
32    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
33</#if> 
34    <script> 
35        //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}'); 
36    </script> 
37<#assign campaignId = "" > 
38<#assign ecidExt=""> 
39<#if qstringmap["ecid"]?has_content> 
40    <#assign campaignId = qstringmap["ecid"]?first > 
41    <#assign campaignId = htmlUtil.escape(campaignId)> 
42    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
43     
44    <#assign ecidExt = qstringmap["ecid"]?first> 
45    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
46    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
47    <#assign ecidExt = "&ecid=" + ecidExt> 
48</#if> 
49 
50<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52<#assign clientProfile = clientProfileList?first> 
53<#assign partnerName = clientProfile.getMarketingNameLong()> 
54<#assign pbu = clientProfile.getPbu()> 
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
57 
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)> 
59<#assign temp = []> 
60<#assign consumerCards = []> 
61<#assign businessCards = []>  
62<#assign offerTypeList = []>       
63<#assign index = 0> 
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]> 
65<#assign businessOfferTypes = ["128", "121", "143", "144"]> 
66<#list fiCardsData as fib>  
67    <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
68        <#assign offerTypeList = offerTypeList + [fib.offerType]>  
69        <#if (consumerOfferTypes?seq_contains(fib.offerType))> 
70            <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
71        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
72            <#assign businessCards = businessCards + fiCardsData[index..index]> 
73        </#if>                            
74        <#assign temp = temp + fiCardsData[index..index]>  
75    </#if>   
76    <#assign index = index + 1>               
77</#list>  
78 
79<#assign fiCardsData = temp> 
80 <script> 
81    //console.log("fi card data count", ${fiCardsData?size}) 
82</script> 
83 
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
85<#if (clientdata?size > 0)> 
86    <#assign backgroundColor = clientdata[0].backgroundHexColor>               
87</#if> 
88 
89<#if (fiCardsData?size > 0)>    
90    <style> 
91        .excludeModal__overlay { 
92            position: fixed; 
93            top: 0; 
94            left: 0; 
95            right: 0; 
96            bottom: 0; 
97            background: rgba(0,0,0,0.6); 
98            display: flex; 
99            justify-content: center; 
100            align-items: center; 
101
102 
103        .excludeModal__container { 
104            background-color: #fff; 
105            padding: 30px; 
106            min-width: 500px; 
107            max-width: 500px; 
108            max-height: 100vh; 
109            border-radius: 4px; 
110            overflow-y: auto; 
111            box-sizing: border-box; 
112
113 
114        .excludeModal__header { 
115            display: flex; 
116            justify-content: space-between; 
117            align-items: center; 
118
119 
120        .modal .excludeModal__container .excludeModal__title { 
121            margin-top: 0; 
122            margin-bottom: 0; 
123            font-weight: 600; 
124            font-size: 20px; 
125            line-height: 1.25; 
126            color: #00449e; 
127            box-sizing: border-box; 
128
129         
130        .excludeModal__close { 
131            background: transparent; 
132            border: 1px solid white; 
133            padding: 4px 8px; 
134            float: right; 
135
136 
137        .excludeModal__close:hover { 
138            border: 1px solid black; 
139
140 
141        .excludeModal__close:before { content: "\2715"; } 
142 
143        @keyframes mmfadeIn { 
144            from { opacity: 0; } 
145            to { opacity: 1; } 
146
147 
148        @keyframes mmfadeOut { 
149            from { opacity: 1; } 
150            to { opacity: 0; } 
151
152 
153        @keyframes mmslideIn { 
154            from { transform: translateY(15%); } 
155            to { transform: translateY(0); } 
156
157 
158        @keyframes mmslideOut { 
159            from { transform: translateY(0); } 
160            to { transform: translateY(-10%); } 
161
162 
163        .micromodal-slide { 
164            display: none; 
165
166 
167        .micromodal-slide.is-open { 
168            display: block; 
169
170 
171        .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
172            animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
173
174 
175        .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
176            animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
177
178 
179        .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
180            animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
181
182 
183        .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
184            animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
185
186 
187        .micromodal-slide .excludeModal__container, 
188        .micromodal-slide .excludeModal__overlay { 
189            will-change: transform; 
190
191    </style> 
192    <#if url?contains("index")>   
193        <#assign isExcluded = 0>                
194        <#assign offerId = ""> 
195        <#assign sourceCode = ""> 
196        <#assign cardArtImage = ""> 
197        <#assign productUrlHero = ""> 
198        <#assign product = ""> 
199        <#assign cardIndex = 0> 
200        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
201            <#if (offerTypeList?seq_contains("108")) ||  (offerTypeList?seq_contains("109"))> 
202                <#list consumerCards as card> 
203                    <#if (card.offerType=="108") || (card.offerType=="109")> 
204                        <#assign isExcluded = 0> 
205                        <#if card.dmaexclude??> 
206                            <#assign isExcluded = card.dmaexclude?number!0> 
207                        </#if>  
208                        <#assign offerId = card.offerId> 
209                        <#assign sourceCode = card.sourceCode> 
210                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
211                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
212 
213                        <#assign productUrlHero="consumer-platinum2103"> 
214                        <#assign product="Platinum"> 
215                        <#assign cardIndex = 1> 
216                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)> 
217                        <#if (scrapedData?size > 0)> 
218                            <#list scrapedData as sItem> 
219                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
220                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
221                                    <#break> 
222                                </#if> 
223                            </#list> 
224                            <script> 
225                                $(document).ready(function () { 
226                                    var aprText = "${apr}"; 
227                                    //console.log('aprText: ${aprText!''}'); 
228                                    if (aprText) { 
229                                        $(".apr-full-text").html(aprText); 
230                                        try { 
231                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
232                                            var billing_cycle = matches[1]; 
233                                            var apr_min = apr_min = matches[2]; 
234                                            var apr_max = apr_max = matches[3]; 
235                                            //console.log('billing_cycle', billing_cycle); 
236                                            //console.log('apr_min', apr_min); 
237                                            //console.log('apr_max', apr_max); 
238                                            if (billing_cycle) { 
239                                                //console.log($(".scraped-billing-cycle")); 
240                                                $(".scraped-billing-cycle").html(billing_cycle); 
241
242                                            if (apr_min) { 
243                                                $(".scraped-apr-min").html(apr_min); 
244
245                                            if (apr_max) { 
246                                                $('.scraped-apr-max').html(apr_max); 
247
248 
249                                        } catch (e) { 
250                                            console.log(e); 
251
252
253                                }); 
254                            </script> 
255                        </#if> 
256                        <script> 
257                            $(document).ready(function () { 
258                                $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>'); 
259                            }); 
260                        </script> 
261                    </#if>                   
262                </#list> 
263            <#else> 
264                <#assign isExcluded = 0> 
265                <#if consumerCards[0].dmaexclude??> 
266                    <#assign isExcluded = consumerCards[0].dmaexclude?number!0> 
267                </#if>    
268                <#assign displayedCard = consumerCards[0]> 
269                <#assign offerId = displayedCard.offerId> 
270                <#assign sourceCode = displayedCard.sourceCode> 
271                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
272                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
273                <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")> 
274                    <#assign productUrlHero="consumer-platinum"> 
275                    <#assign product="Platinum"> 
276                    <#assign cardIndex = 1> 
277                <#elseif (displayedCard.offerType=="104")> 
278                    <#assign productUrlHero = "max-cash"> 
279                    <#assign product="Max Cash Preferred"> 
280                    <#assign cardIndex = 0> 
281                <#elseif (displayedCard.offerType=="115")> 
282                    <#assign productUrlHero = "secured"> 
283                    <#assign product="Secured"> 
284                    <#assign cardIndex = 2> 
285                </#if> 
286            </#if> 
287            <#if product?has_content && product != ""> 
288                <#assign card_text = product + " Card"> 
289            </#if>  
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign isExcluded = 0> 
296                        <#if card.dmaexclude??> 
297                            <#assign isExcluded = card.dmaexclude?number!0>  
298                        </#if> 
299                        <#assign offerId = card.offerId> 
300                        <#assign sourceCode = card.sourceCode> 
301                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
302                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
303 
304                        <#assign productUrlHero="business-cash-preferred"> 
305                        <#assign product="Business Cash Preferred"> 
306                        <#assign cardIndex = 1> 
307                    </#if> 
308                </#list> 
309            <#else> 
310                <#assign isExcluded = 0> 
311                <#if businessCards[0].dmaexclude??> 
312                    <#assign isExcluded = businessCards[0].dmaexclude?number!0> 
313                </#if>  
314                <#assign displayedCard = businessCards[0]> 
315                <#assign offerId = displayedCard.offerId> 
316                <#assign sourceCode = displayedCard.sourceCode> 
317                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
318                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
319                <#if (displayedCard.offerType=="143")> 
320                    <#assign productUrlHero="business-real-rewards"> 
321                    <#assign product="Business Real Rewards"> 
322                    <#assign cardIndex = 2> 
323                <#elseif (displayedCard.offerType=="144")> 
324                    <#assign productUrlHero="smart-business-rewards"> 
325                    <#assign product="Smart Business Rewards"> 
326                    <#assign cardIndex = 0> 
327                <#elseif (displayedCard.offerType=="121")> 
328                    <#assign productUrlHero = "business-platinum"> 
329                    <#assign product="Business"> 
330                    <#assign cardIndex = 3>                     
331                </#if> 
332            </#if> 
333            <#if product?has_content && product != ""> 
334                <#assign card_text = product + " Card"> 
335            </#if>  
336        </#if>		 
337            <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}"> 
338                <div class="hero-main"> 
339                    <div class="hero-main-container"> 
340                        <div class="hero-main-offer"> 
341                            <div class="offer-detail"> 
342                                <div class="offer-detail-cardArt cardArtImg"> 
343                                    <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
344                                    class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">  
345                                    <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }" 
346                                     class="jn-img-responsive">--> 
347                                    <p>${card_text!''}</p> 
348                                </div> 
349                                <div class="offer-detail-text text-color-default hide-desktop"> 
350                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                 
351                                </div>                                                                        
352                                <#if isExcluded == 0>                                                                                  
353                                    <a  
354                                        class="jn-button hide-desktop btn"  
355                                        data-button-name="cta-button-top"  
356                                        data-product-name="${productUrlHero!''}"  
357                                        href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"                                    
358
359                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
360                                    </a> 
361                                <#else> 
362                                    <a  
363                                        class="jn-button hide-desktop btn"  
364                                        data-button-name="cta-button-top"  
365                                        data-product-name="${productUrlHero!''}"  
366                                        data-micromodal-trigger="modal-index-hero" 
367                                        href="javascript:void(0);" 
368
369                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
370                                    </a> 
371                                </#if> 
372                            </div> 
373                            <div class="offer-header"> 
374                                <div class="offer-text-top"> 
375                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
376                                </div> 
377                                <div class="offer-text-bottom hide-mobile"> 
378                                    <div class="offer-detail-text text-color-default "> 
379                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                        
380                                    </div> 
381                                     
382                                    <#if isExcluded == 0>                                                                                  
383                                        <a  
384                                            class="jn-button"  
385                                            data-button-name="cta-button-top"  
386                                            data-product-name="${productUrlHero!''}" 
387                                            href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"  
388
389                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
390                                        </a> 
391                                    <#else> 
392                                        <a  
393                                            class="jn-button"  
394                                            data-button-name="cta-button-top"  
395                                            data-product-name="${productUrlHero!''}" 
396                                            data-micromodal-trigger="modal-index-hero" 
397                                            href="javascript:void(0);" 
398
399                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
400                                        </a> 
401                                    </#if> 
402                                </div> 
403                            </div>                           
404                        </div> 
405                    </div> 
406                </div> 
407            </div> 
408 
409            <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" > 
410                <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
411                    <div  
412                        aria-modal="true"  
413                        aria-labelledby="modal-index-hero-title"  
414                        class="excludeModal__container"  
415                        role="dialog" 
416
417                        <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
418                        <header class="excludeModal__header"> 
419                            <h2 class="excludeModal__title" id="modal-index-hero-title"> 
420                                <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
421                                    ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
422                                </#if> 
423                            </h2> 
424                        </header> 
425                    </div> 
426                </div> 
427            </div> 
428    <#else>      
429        <#assign hasBalanceTransferCalculator = false> 
430        <#list fiCardsData as fib>     
431            <#switch fib.offerType>     
432                <#case "101"> 
433                    <#assign cardIndex = 3 > 
434                    <#assign productUrlHero = "consumer-edr"> 
435                    <#assign product="Everyday Rewards+">                     
436                    <#assign hasBalanceTransferCalculator = false>                   
437                    <#break>  
438                <#case "103">              
439                    <#assign cardIndex = 3 > 
440                    <#assign productUrlHero = "consumer-edr"> 
441                    <#assign product="Everyday Rewards+">                     
442                     <#assign hasBalanceTransferCalculator = false>                   
443                   <#break>          
444                <#case "104"> 
445                    <#assign cardIndex = 0 > 
446                    <#assign productUrlHero="max-cash"> 
447                    <#assign product="Max Cash Preferred">                       
448                    <#assign hasBalanceTransferCalculator = false>                   
449                    <#break> 
450                <#case "108"> 
451                    <#assign cardIndex = 1 > 
452                    <#assign productUrlHero = "consumer-platinum"> 
453                    <#assign product="Platinum">     
454                    <#assign hasBalanceTransferCalculator = true>                   
455                    <#break> 
456                <#case "109"> 
457                    <#assign cardIndex = 1 > 
458                    <#assign productUrlHero = "consumer-platinum"> 
459                    <#assign product="Platinum">    
460                    <#assign hasBalanceTransferCalculator = true>                                                          
461                    <#break>                                         
462                 <#case "141">                  
463                    <#assign cardIndex = 4 > 
464                    <#assign productUrlHero = "college-real-rewards"> 
465                    <#assign product = "College Real Rewards" >  
466                     <#assign hasBalanceTransferCalculator = false>                   
467                   <#break>  
468                <#case "147"> 
469                    <#assign cardIndex = 5 > 
470                    <#assign productUrlHero = "max-cash-secured"> 
471                    <#assign product = "Max Cash Secured" >  
472                    <#assign hasBalanceTransferCalculator = false>                   
473                    <#break>   
474                <#case "115"> 
475                    <#assign cardIndex = 2 > 
476                    <#assign productUrlHero = "secured"> 
477                    <#assign product="Secured">                     
478                    <#assign hasBalanceTransferCalculator = false>                   
479                    <#break>  
480                <#case "138"> 
481                    <#assign cardIndex = 6 > 
482                    <#assign productUrlHero = "travel-rewards-plus"> 
483                    <#assign product="Travel Rewards+">                     
484                    <#assign hasBalanceTransferCalculator = false>                   
485                    <#break>  
486                <#case "154"> 
487                    <#assign cardIndex = 7 > 
488                    <#assign productUrlHero = "reserve-rewards-plus"> 
489                    <#assign product="Reserve Rewards+">                     
490                    <#assign hasBalanceTransferCalculator = false>                   
491                    <#break>  
492                <#case "128"> 
493                    <#assign cardIndex = 1 > 
494                    <#assign productUrlHero = "business-cash-preferred"> 
495                    <#assign product="Business Cash Preferred">                     
496                    <#assign hasBalanceTransferCalculator = false>                   
497                    <#break>     
498                <#case "143"> 
499                    <#assign cardIndex = 2 > 
500                    <#assign productUrlHero = "business-real-rewards"> 
501                    <#assign product="Business Real Rewards">                     
502                    <#assign hasBalanceTransferCalculator = false>                   
503                    <#break>     
504                <#case "144"> 
505                    <#assign cardIndex = 0 > 
506                    <#assign productUrlHero = "smart-business-rewards"> 
507                    <#assign product="Smart Business Rewards">                                          
508                    <#assign hasBalanceTransferCalculator = false>                   
509                    <#break>                                   
510                <#case "121"> 
511                    <#assign cardIndex = 3 > 
512                    <#assign productUrlHero = "business-platinum"> 
513                    <#assign product="Business">                      
514                    <#assign hasBalanceTransferCalculator = false>                   
515                    <#break>                                      
516                <#default> 
517            </#switch>                          
518            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">  
519            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">   
520             
521            <script> 
522               console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")                         
523            </script> 
524                                                                         
525            <#if url?matches(".*/${productUrlHero}\\?.*")>  
526                <#assign isExcluded = 0> 
527                <#if fib.dmaexclude??> 
528                    <#assign isExcluded = fib.dmaexclude?number!0> 
529                </#if>    
530                <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")> 
531 
532                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')> 
533                    <#if (scrapedData?size > 0)> 
534                            <#list scrapedData as sItem> 
535                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
536                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
537                                    <#break> 
538                                </#if> 
539 
540                            </#list> 
541                            <script> 
542                                $(document).ready(function () { 
543                                    var aprText = "${apr}"; 
544                                    //console.log('aprText',aprText); 
545                                    if (aprText) { 
546                                      $(".apr-full-text").html(aprText); 
547                                        try { 
548                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
549                                            var billing_cycle = matches[1]; 
550                                            var apr_min = apr_min = matches[2]; 
551                                            var apr_max = apr_max = matches[3]; 
552                                            //console.log('billing_cycle', billing_cycle); 
553                                            //console.log('apr_min', apr_min); 
554                                            //console.log('apr_max', apr_max); 
555                                            if (billing_cycle) { 
556                                                //console.log($(".scraped-billing-cycle")); 
557                                                $(".scraped-billing-cycle").html(billing_cycle); 
558
559                                            if (apr_min) { 
560                                                $(".scraped-apr-min").html(apr_min); 
561
562                                            if (apr_max) { 
563                                                $('.scraped-apr-max').html(apr_max); 
564
565 
566                                        } catch (e) { 
567                                            console.log(e); 
568
569
570                                }); 
571                            </script> 
572                    </#if>   
573                </#if>      
574                <#if product?has_content && product != ""> 
575                    <#assign card_text = product + " Card"> 
576                </#if>    
577                <#assign tc_offerTypes = ['108', '109', '121', '144']> 
578                <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']> 
579                <div class="hero-container ${class.getData()}"> 
580                    <div class="hero-main"> 
581                        <div class="hero-main-container"> 
582                            <div class="hero-main-offer"> 
583                                <div class="offer-detail"> 
584                                    <div class="offer-detail-cardArt cardArtImg"> 
585                                        <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
586                                        onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive"> 
587                                        <p>${card_text!''}</p> 
588                                        <#if (hasBalanceTransferCalculator)> 
589                                            <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a> 
590                                        </#if> 
591                                    </div> 
592                                    <div class="offer-detail-text text-color-default hide-desktop"> 
593                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
594 
595                                        <#if (tc_offerTypes?seq_contains(fib.offerType))> 
596                                            <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
597                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
598                                            </a> 
599                                        </#if> 
600                                        <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
601                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
602                                        </#if> 
603                                    </div> 
604                                     
605                                    <#if isExcluded == 0>   
606                                        <a  
607                                            class="jn-button hide-desktop btn"  
608                                            data-button-name="cta-button-top"  
609                                            data-product-name="${productUrlHero!''}"   
610                                            href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"                               
611
612                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
613                                        </a>    
614                                    <#else> 
615                                        <a                                              
616                                            class="jn-button hide-desktop btn"  
617                                            data-button-name="cta-button-top"  
618                                            data-product-name="${productUrlHero!''}"    
619                                            data-micromodal-trigger="modal-product-hero" 
620                                            href="javascript:void(0);"                             
621
622                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
623                                        </a> 
624                                    </#if> 
625                                </div> 
626                                <div class="offer-header"> 
627                                    <div class="offer-text-top"> 
628                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
629                                    </div> 
630                                    <div class="offer-text-bottom hide-mobile"> 
631                                        <div class="offer-detail-text text-color-default "> 
632                                            ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
633                                            <#if (tc_offerTypes?seq_contains(fib.offerType))> 
634                                                <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
635                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
636                                                </a> 
637                                            </#if> 
638                                        </div> 
639                                         
640                                         <#if isExcluded == 0>   
641                                            <a  
642                                                class="jn-button"  
643                                                data-button-name="cta-button-top"  
644                                                data-product-name="${productUrlHero!''}"  
645                                                href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"  
646
647                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
648                                            </a> 
649                                         <#else> 
650                                            <a  
651                                                class="jn-button"  
652                                                data-button-name="cta-button-top"  
653                                                data-product-name="${productUrlHero!''}"  
654                                                data-micromodal-trigger="modal-product-hero" 
655                                                href="javascript:void(0);"  
656
657                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
658                                            </a> 
659                                         </#if> 
660                                         <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
661                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
662                                        </#if> 
663                                    </div> 
664                                </div> 
665                                 
666                            </div> 
667                        </div> 
668                    </div> 
669                </div> 
670 
671                <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" > 
672                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
673                        <div  
674                            aria-modal="true"  
675                            aria-labelledby="modal-prodcut-hero-title"  
676                            class="excludeModal__container"  
677                            role="dialog" 
678
679                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
680                            <header class="excludeModal__header"> 
681                                <h2 class="excludeModal__title" id="modal-prodcut-hero-title"> 
682                                    <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
683                                        ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
684                                    </#if> 
685                                </h2> 
686                            </header> 
687                        </div> 
688                    </div> 
689                </div> 
690                <#break /> 
691            </#if> 
692        </#list>    
693 
694    </#if> 
695</#if> 
696<!-- https://micromodal.vercel.app/ --> 
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
698 
699<script> 
700    AUI().ready(function(){ 
701        //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment  
702        var locationCodeParam = '${lc}'; 
703        var currentEnvironmentParam = '${currentEnvironment}'; 
704        if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){ 
705            Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"}) 
706        }    
707 
708        MicroModal.init();      
709    }); 
710</script> 
711<script> 
712    if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};} 
713    setHeaderBackground = () => { 
714        // Makes the Header subtitle work if there is two lines of text  
715        //product page header 
716        var consumerHeader = document.getElementsByClassName("landing-consumer")[0]; 
717        if(!consumerHeader) { 
718            //index page header 
719            consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0]; 
720
721         
722        if(consumerHeader) { 
723            var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0]; 
724            var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0]; 
725            const offerTextTop = consumerHeader.querySelector(".offer-text-top"); 
726             
727            if (consumerOfferHeader.innerText.length >= 76){ 
728                const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px"; 
729                //two lines 
730                //offerTextTop.style.marginTop = '0px'; 
731                //document.querySelector('.offer-text-bottom').style.marginTop = '25px'; 
732                //prevent button and text going into blue section 
733                //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px"; 
734                consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")"; 
735
736
737        //product page header 
738        var buisnessHeader = document.getElementsByClassName("landing-business")[0]; 
739        if(!buisnessHeader) { 
740            //index page header 
741            buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0]; 
742
743 
744        if(buisnessHeader) { 
745            var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0]; 
746            var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0]; 
747 
748            if (buisnessOfferHeader.innerText.length >= 48){ 
749                //two lines 
750                buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)"; 
751
752
753    }; 
754    /* 
755        sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime. 
756        With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed. 
757    */ 
758    setHeaderBackground(); 
759    AUI().ready(function(){setHeaderBackground();}); 
760 
761</script> 
处理模板时发生错误。
The following has evaluated to null or missing:
==> clientProfileService.findByLocationCode(lc)  [in template "10154#10192#153417673" at line 34, column 30]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign clientProfileList = clientPro...  [in template "10154#10192#153417673" at line 34, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url404 = '/error/404.html' > 
3<#assign oadURL = propsUtil.get('elan.oad.url') > 
4<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7 
8 
9<#--  check location id validity  --> 
10<#if qstringmap["ecdma-lc"]?has_content> 
11    <#assign lc = qstringmap["ecdma-lc"]?first>   
12    <#assign lc = htmlUtil.escape(lc)> 
13    <#assign lc = htmlUtil.escapeJS(lc)> 
14 
15    <#assign prefix = "00000" > 
16    <#assign lcWithPrefix = prefix + lc > 
17    <#assign withPrefixLength = lcWithPrefix?length > 
18    <#assign startHere = withPrefixLength - 5> 
19    <#assign lc = lcWithPrefix?substring(startHere)> 
20<#else> 
21    <script> 
22        console.log("location code missing"); 
23        location.href = '${url404}'; 
24    </script> 
25</#if> 
26 
27<#if oadURL?contains("uat-")> 
28    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
29<#else> 
30    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
31</#if> 
32 
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
34<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
35<#if clientProfileList?first?has_content> 
36    <#assign clientProfile = clientProfileList?first> 
37    <#assign partnerName = clientProfile.getMarketingNameLong()> 
38    <#assign pbu = clientProfile.getPbu()> 
39    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
40     
41    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
42        <#if (fiCardsData?size > 0)> 
43            <#assign temp = []> 
44            <#assign offerTypeList = []>      
45             <#assign index = 0> 
46            <#list fiCardsData as fib> 
47                <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
48                    <#assign offerTypeList = offerTypeList + [fib.offerType]>                    
49                    <#assign temp = temp + fiCardsData[index..index]>  
50                </#if> 
51                <#assign index = index + 1>                  
52            </#list>  
53            <#assign fiCardsData = temp> 
54            <#list fiCardsData as fib> 
55                <#switch fib.offerType> 
56                    <#case "101"> 
57                        <#assign productURL = "202302/consumer-edr"> 
58                        <#assign productName = "Everyday Rewards+"> 
59                        <#break> 
60                    <#case "103"> 
61                        <#assign productURL = "202302/consumer-edr"> 
62                        <#assign productName = "Everyday Rewards+"> 
63                        <#break> 
64                    <#case "104"> 
65                        <#assign productURL = "max-cash"> 
66                        <#assign productName = "Max Cash Preferred Card">       
67                        <#break> 
68                    <#case "108"> 
69                        <#assign productURL="202308/consumer-platinum"> 
70                        <#assign productName="Platinum Card"> 
71                        <#break> 
72                    <#case "109"> 
73                        <#assign productURL="202308/consumer-platinum"> 
74                        <#assign productName="Platinum Card"> 
75                        <#break> 
76                    <#case "115"> 
77                        <#assign productURL = "secured"> 
78                        <#assign productName = "Secured Card" > 
79                        <#break> 
80                    <#case "138"> 
81                        <#assign productURL = "202305/travel-rewards-plus"> 
82                        <#assign productName = "Travel Rewards+" > 
83                        <#break> 
84                    <#case "141"> 
85                        <#assign productURL = "college-real-rewards"> 
86                        <#assign productName = "College Real Rewards" >     
87                        <#break> 
88                    <#case "147"> 
89                        <#assign productURL = "max-cash-secured"> 
90                        <#assign productName = "Max Cash Secured Card" >     
91                        <#break> 
92                    <#case "154"> 
93                        <#assign productURL = "202305/reserve-rewards-plus"> 
94                        <#assign productName = "Reserve Rewards+" > 
95                        <#break> 
96                    <#case "121"> 
97                        <#assign productURL = "202208/business-platinum"> 
98                        <#assign productName = "Business Card" > 
99                        <#break> 
100                    <#case "128"> 
101                        <#assign productURL = "business-cash-preferred"> 
102                        <#assign productName = "Business Cash Preferred" > 
103                        <#break> 
104                    <#case "143"> 
105                        <#assign productURL = "business-real-rewards"> 
106                        <#assign productName = "Business Real Rewards Card" > 
107                        <#break> 
108                    <#case "144"> 
109                        <#assign productURL = "smart-business-rewards"> 
110                        <#assign productName = "Smart Business Rewards Card" >     
111                        <#break> 
112                    <#default>                                                         
113                </#switch> 
114 
115                <#assign newSourceCode = fib.sourceCode>  
116                <#assign newOfferId = fib.offerId>  
117 
118                <#if url?matches(".*/${productURL}\\?.*")> 
119                    <#assign APR=""> 
120                    <#assign AMF=""> 
121                    <#assign BAL=""> 
122                    <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)> 
123                    <#if (sdata?size > 0)> 
124                        <#list sdata as sItem> 
125                       
126                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
127                                <#assign APR = sItem.scrapedValue> 
128                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
129                                <#assign AMF = sItem.scrapedValue> 
130                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
131                                <#assign BAL = sItem.scrapedValue> 
132                            </#if> 
133                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
134                                <#break> 
135                            </#if> 
136                        </#list>                 
137                    <#else> 
138                        <script> 
139                            console.log('no scraped data'); 
140                        </script> 
141                    </#if>                     
142                         
143                        <section> 
144                            <#if FeatureText.getData() != ""> 
145                                <#assign featureCounter = 0> 
146                                <div class="hero-primary-benefits offer-type-${fib.offerType}"> 
147                                    <#list FeatureText.getSiblings() as item> 
148                                        <div class="primary-benefit"> 
149                                            <div class="primary-benefit-wrapper"> 
150                                                ${item.getData()} 
151                                                <#if (fib.offerType=="108" || fib.offerType=="109") && (featureCounter == FeatureText.getSiblings()?size - 1)> 
152                                                    <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a> 
153                                                </#if> 
154                                            </div> 
155                                        </div> 
156                                        <#assign featureCounter = featureCounter + 1> 
157                                    </#list> 
158                                </div> 
159                            </#if> 
160                            <div class="standard-content-container" title="${partnerName!''} ${productName!''} Credit Card"> 
161                                <article class="product-details-container"> 
162                                    <div class="detail-background"> 
163                                        ${HeadlineInfo.getData()} 
164                                        <div class="secondary-benefits"> 
165                                            <div class="option"> 
166                                                <#foreach itemA in AdditionalInfoA.getSiblings()> 
167                                                    ${itemA.getData()} 
168                                                </#foreach>  
169                                                <#assign col1NotScrappedOfferTypes = ['108', '109', '147', '115']/>   
170                                                <#assign col1AprOfferTypes = ['104', '121', '144', '143'] > 
171                                                <#if !col1NotScrappedOfferTypes?seq_contains(fib.offerType)> 
172                                                    <#if col1AprOfferTypes?seq_contains(fib.offerType)> 
173                                                        <#if (fib.offerType == "104" )> 
174                                                            <h3>APR for Purchases:</h3> 
175                                                        <#elseif (fib.offerType == "144")> 
176                                                            <h3>APR for Purchases and Balance Transfers:</h3>   
177                                                        <#else> 
178                                                            <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
179                                                        </#if> 
180 
181                                                        <p> 
182                                                            ${APR!''}  
183                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
184                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
185                                                            </a> 
186                                                        </p> 
187                                                    <#else> 
188                                                        <h3>Annual Fee</h3> 
189                                                        <p> 
190                                                            ${AMF!''} 
191                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
192                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
193                                                            </a> 
194                                                        </p> 
195                                                    </#if> 
196                                                </#if> 
197                                            </div> 
198                                            <div class="option"> 
199                                                <#foreach itemB in AdditionalInfoB.getSiblings()> 
200                                                    ${itemB.getData()} 
201                                                </#foreach> 
202                                                <#assign col2NotScrappedOfferTypes = ['147'] >   
203                                                <#assign col2AprOfferTypes = ['138', '154', '128'] > 
204                                                <#assign col2AmfOfferTypes = ['108', '109', '115', '144'] > 
205                                                <#if !col2NotScrappedOfferTypes?seq_contains(fib.offerType)> 
206                                                    <#if col2AprOfferTypes?seq_contains(fib.offerType)> 
207                                                        <#if (fib.offerType == "128" )> 
208                                                            <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
209                                                        <#else> 
210                                                            <h3>APR for Purchases:</h3> 
211                                                        </#if> 
212                                                        <p> 
213                                                            ${APR!''}  
214                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
215                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
216                                                            </a> 
217                                                        </p> 
218                                                    <#elseif col2AmfOfferTypes?seq_contains(fib.offerType)> 
219                                                        <h3>Annual Fee</h3> 
220                                                        <p> 
221                                                            ${AMF!''} 
222                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
223                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
224                                                            </a> 
225                                                        </p> 
226                                                    <#else> 
227                                                        <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
228                                                        <p> 
229                                                            ${BAL!''} 
230                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
231                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
232                                                            </a> 
233                                                        </p> 
234                                                    </#if> 
235                                                </#if> 
236                                            </div>  
237                                            <#if (AdditionalInfoC?has_content)> 
238                                              <div class="option"> 
239                                                ${AdditionalInfoC.getData()} 
240                                                <#assign col3NotScrappedOfferTypes = ['144'] >   
241                                                <#assign col3BalOfferTypes = ['138', '154', '128'] > 
242                                                <#assign col3AmfOfferTypes = ['104', '121', '143'] > 
243                                                <#if !col3NotScrappedOfferTypes?seq_contains(fib.offerType)> 
244                                                    <#if col3BalOfferTypes?seq_contains(fib.offerType)> 
245                                                            <#if fib.offerType == "128"> 
246                                                                <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
247                                                            <#else> 
248                                                                <h3>APR for Balance Transfers:</h3> 
249                                                            </#if> 
250                                                            <p> 
251                                                                ${BAL!''} 
252                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
253                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
254                                                                </a> 
255                                                            </p> 
256                                                    <#elseif col3AmfOfferTypes?seq_contains(fib.offerType)> 
257                                                            <#if fib.offerType == "104"> 
258                                                                <h3>Annual Fee<sup>*</sup></h3> 
259                                                            <#else> 
260                                                                <h3>Annual Fee</h3> 
261                                                            </#if> 
262                                                            <p> 
263                                                                ${AMF!''} 
264                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
265                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
266                                                                </a> 
267                                                            </p> 
268                                                    <#else> 
269                                                            <#if (fib.offerType == "147" ||  
270                                                                fib.offerType == "115"  
271                                                            )> 
272                                                                <h3>APR for Purchases and Balance Transfers:</h3>  
273                                                            <#else> 
274                                                                <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
275                                                            </#if> 
276                                                            <p> 
277                                                                ${APR!''}  
278                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
279                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
280                                                                </a> 
281                                                            </p> 
282                                                    </#if> 
283                                                </#if> 
284                                                <#if (fib.offerType == "108" || fib.offerType == "109")> 
285                                                    <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
286                                                    <p>${BAL!''} <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a> 
287                                                    </p> 
288                                                </#if> 
289                                                <#if fib.offerType == "147"> 
290                                                    <h3>Annual Fee<sup>*</sup></h3> 
291                                                    <p> 
292                                                        ${AMF!''} 
293                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
294                                                            <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
295                                                        </a> 
296                                                    </p> 
297                                                </#if> 
298                                                 
299                                              </div> 
300                                            </#if> 
301                                        </div>  
302                                    </div> 
303                                                                                 
304                                </article> 
305                            </div> 
306                        </section> 
307                        <script> 
308                            AUI().ready(function() {  
309                                $('.jn-subhero ul').each(function() { 
310                                    var $this = $(this), 
311                                        li = $this.find('li').length; 
312                                        console.log($this.find('li').length) 
313                                    if(li === 2){ 
314                                        $this.addClass('two-items'); 
315
316                                }); 
317                                 
318                            }); 
319                        </script> 
320                        <#break /> 
321                </#if> 
322            </#list>  
323        <#else> 
324            <script> 
325                console.log("FI Cards Data empty"); 
326                //location.href = '${url404}'; 
327            </script> 
328        </#if> 
329<#else> 
330    <script> 
331        console.log("client profile empty"); 
332        //location.href = '${url404}'; 
333    </script> 
334</#if> 
处理模板时发生错误。
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#157461212" at line 7, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#157461212" at line 7, column 1]
----
1<#assign oadURL = propsUtil.get('elan.oad.url') > 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html' > 
6 
7<#assign lc = qstringmap["ecdma-lc"]?first> 
8<#assign lc = htmlUtil.escape(lc)> 
9<#assign lc = htmlUtil.escapeJS(lc)> 
10  
11<#assign prefix = "00000" > 
12<#assign lcWithPrefix = prefix + lc > 
13<#assign withPrefixLength = lcWithPrefix?length > 
14<#assign startHere = withPrefixLength - 5> 
15<#assign lc = lcWithPrefix?substring(startHere)> 
16 
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
19 
20<#if clientProfileList?first?has_content> 
21    <#assign clientProfile = clientProfileList?first> 
22    <#assign partnerName = clientProfile.getMarketingNameLong()> 
23    <#assign pbu = clientProfile.getPbu()> 
24    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
25    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
26 
27    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu + '&' + lc)> 
28    <#assign temp = []> 
29    <#assign offerTypeList = []>      
30    <#assign index = 0> 
31    <#list fiCardsData as fib> 
32        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
33            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
34            <#assign temp = temp + fiCardsData[index..index]>  
35        </#if>  
36        <#assign index = index + 1>                
37    </#list>  
38    <#assign fiCardsData = temp>  
39 
40    <#if (fiCardsData?size > 0)>  
41        <#list fiCardsData as fib> 
42            <#switch fib.offerType> 
43                <#case "101"> 
44                    <#assign productURL = "consumer-edr"> 
45                    <#assign productName = "Everyday Rewards+"> 
46                    <#break> 
47                <#case "103"> 
48                    <#assign productURL = "consumer-edr"> 
49                    <#assign productName = "Everyday Rewards+"> 
50                    <#break> 
51                <#case "104"> 
52                    <#assign productURL = "max-cash"> 
53                    <#assign productName = "Max Cash Preferred Card">       
54                    <#break> 
55                <#case "108"> 
56                    <#assign productURL="consumer-platinum"> 
57                    <#assign productName="Platinum Card"> 
58                    <#break> 
59                <#case "109"> 
60                    <#assign productURL="consumer-platinum"> 
61                    <#assign productName="Platinum Card"> 
62                    <#break> 
63                <#case "115"> 
64                    <#assign productURL = "secured"> 
65                    <#assign productName = "Secured Card" > 
66                    <#break> 
67                <#case "138"> 
68                    <#assign productURL = "travel-rewards-plus"> 
69                    <#assign productName = "Travel Rewards+" > 
70                    <#break> 
71                <#case "141"> 
72                    <#assign productURL = "college-real-rewards"> 
73                    <#assign productName = "College Real Rewards" >     
74                    <#break> 
75                <#case "147"> 
76                    <#assign productURL = "max-cash-secured"> 
77                    <#assign productName = "Max Cash Secured Card" >     
78                    <#break> 
79                <#case "154"> 
80                    <#assign productURL = "reserve-rewards-plus"> 
81                    <#assign productName = "Reserve Rewards+" > 
82                    <#break> 
83                <#case "121"> 
84                    <#assign productURL = "business-platinum"> 
85                    <#assign productName = "Business Card" > 
86                    <#break> 
87                <#case "128"> 
88                    <#assign productURL = "business-cash-preferred"> 
89                    <#assign productName = "Business Cash Preferred" > 
90                    <#break> 
91                <#case "143"> 
92                    <#assign productURL = "business-real-rewards"> 
93                    <#assign productName = "Business Real Rewards Card" > 
94                    <#break> 
95                <#case "144"> 
96                    <#assign productURL = "smart-business-rewards"> 
97                    <#assign productName = "Smart Business Rewards Card" >     
98                    <#break> 
99                <#default>                                                         
100            </#switch> 
101 
102            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
103            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">  
104            <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")> 
105                <script> 
106                 console.log('offerType', '${fib.offerType}', '${productURL}') 
107                </script> 
108                <#list product.getSiblings() as card> 
109                    <#if card?has_content && card.offerType.getData() == fib.offerType> 
110                        <#assign isExcluded = 0> 
111                        <#if fib.dmaexclude??>  
112                            <#assign isExcluded = fib.dmaexclude?number!0> 
113                        </#if>    
114 
115                        <div class="content-container jn-container-banner" title="${partnerName!''} ${productName!''}"> 
116                            <div class="banner-wrapper"> 
117                                <div class="banner"> 
118                                    <div class="banner-cardArt cardArtImg">   
119                                        <img  
120                                            src="${cardArtImage!''}"  
121                                            alt="${partnerName!''} ${productName!''}"  
122                                            title="${partnerName!''} ${productName!''}" 
123                                            class="jn-img-responsive"  
124                                            onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" 
125                                        >  
126                                    </div> 
127                                    <div class="banner-cta"> 
128                                        <div class="banner-cta-text"> 
129                                            ${card.optionalCtaFeatureText.getData()} 
130                                        </div> 
131                                        <#if isExcluded == 0>   
132                                            <a  
133                                                class="jn-button"  
134                                                data-button-name="cta-button-bottom"  
135                                                data-product-name="${productURL}!''" 
136                                                href="${oadURL}?locationCode=${lc}&amp;offerId=${fib.offerId}&amp;preparerType=customer"  
137                                                id="oadSecButton"  
138
139                                                ${card.optionalCtaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${productName!''} Card </span> 
140                                            </a>  
141                                        <#else> 
142                                            <a  
143                                                class="jn-button"  
144                                                data-button-name="cta-button-bottom"  
145                                                data-product-name="${productURL}!''" 
146                                                data-micromodal-trigger="modal-lower-banner" 
147                                                id="oadSecButton"  
148                                                href="javascript:void(0);" 
149
150                                                ${card.optionalCtaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${productName!''} Card </span> 
151                                            </a>  
152                                        </#if>  
153                                    </div> 
154                                </div> 
155                            </div> 
156                        </div> 
157                        <style> 
158                            .excludeModal__overlay { 
159                                position: fixed; 
160                                top: 0; 
161                                left: 0; 
162                                right: 0; 
163                                bottom: 0; 
164                                background: rgba(0,0,0,0.6); 
165                                display: flex; 
166                                justify-content: center; 
167                                align-items: center; 
168
169 
170                            .excludeModal__container { 
171                                background-color: #fff; 
172                                padding: 30px; 
173                                min-width: 500px; 
174                                max-width: 500px; 
175                                max-height: 100vh; 
176                                border-radius: 4px; 
177                                overflow-y: auto; 
178                                box-sizing: border-box; 
179
180 
181                            .excludeModal__header { 
182                                display: flex; 
183                                justify-content: space-between; 
184                                align-items: center; 
185
186 
187                            .modal .excludeModal__container .excludeModal__title { 
188                                margin-top: 0; 
189                                margin-bottom: 0; 
190                                font-weight: 600; 
191                                font-size: 20px; 
192                                line-height: 1.25; 
193                                color: #00449e; 
194                                box-sizing: border-box; 
195
196                             
197                            .excludeModal__close { 
198                                background: transparent; 
199                                border: 1px solid white; 
200                                padding: 4px 8px; 
201                                float: right; 
202
203 
204                            .excludeModal__close:hover { 
205                                border: 1px solid black; 
206
207 
208                            .excludeModal__close:before { content: "\2715"; } 
209 
210                            @keyframes mmfadeIn { 
211                                from { opacity: 0; } 
212                                to { opacity: 1; } 
213
214 
215                            @keyframes mmfadeOut { 
216                                from { opacity: 1; } 
217                                to { opacity: 0; } 
218
219 
220                            @keyframes mmslideIn { 
221                                from { transform: translateY(15%); } 
222                                to { transform: translateY(0); } 
223
224 
225                            @keyframes mmslideOut { 
226                                from { transform: translateY(0); } 
227                                to { transform: translateY(-10%); } 
228
229 
230                            .micromodal-slide { 
231                                display: none; 
232
233 
234                            .micromodal-slide.is-open { 
235                                display: block; 
236
237 
238                            .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
239                                animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
240
241 
242                            .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
243                                animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
244
245 
246                            .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
247                                animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
248
249 
250                            .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
251                                animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
252
253 
254                            .micromodal-slide .excludeModal__container, 
255                            .micromodal-slide .excludeModal__overlay { 
256                                will-change: transform; 
257
258                        </style> 
259                        <div aria-hidden="true" class="modal micromodal-slide" id="modal-lower-banner" > 
260                            <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
261                                <div  
262                                    aria-modal="true"  
263                                    aria-labelledby="modal-lower-banner-title"  
264                                    class="excludeModal__container"  
265                                    role="dialog" 
266
267                                    <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
268                                    <header class="excludeModal__header"> 
269                                        <h2 class="excludeModal__title" id="modal-lower-banner-title"> 
270                                            <#if card.excludedMessage?? > 
271                                                ${card.excludedMessage.getData()!""} 
272                                            </#if> 
273                                        </h2> 
274                                    </header> 
275                                </div> 
276                            </div> 
277                        </div> 
278                        <!-- https://micromodal.vercel.app/ --> 
279                        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
280                        <script> 
281                            AUI().ready(function(){  
282                                MicroModal.init();      
283                            }); 
284                        </script> 
285                        <#break> 
286                    </#if> 
287                </#list> 
288                <#break> 
289            </#if> 
290        </#list> 
291    </#if> 
292<#else> 
293    <script> 
294        console.log("discalimer: client profile empty"); 
295    </script> 
296</#if> 
处理模板时发生错误。
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#157607653" at line 5, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#157607653" at line 5, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4 
5<#assign lc = qstringmap["ecdma-lc"]?first> 
6<#assign lc = htmlUtil.escape(lc)> 
7<#assign lc = htmlUtil.escapeJS(lc)> 
8 
9<#assign prefix = "00000" > 
10<#assign lcWithPrefix = prefix + lc > 
11<#assign withPrefixLength = lcWithPrefix?length > 
12<#assign startHere = withPrefixLength - 5> 
13<#assign lc = lcWithPrefix?substring(startHere)> 
14 
15<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
16<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
17<#if clientProfileList?first?has_content> 
18    <#assign clientProfile = clientProfileList?first> 
19    <#assign partnerName = clientProfile.getMarketingNameLong()> 
20 
21    <#assign pbu = clientProfile.getPbu()> 
22    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23 
24    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
25 
26 
27    <#if (fiCardsData?size > 0)> 
28 
29        <#list fiCardsData as fib> 
30            <#switch fib.offerType> 
31                <#case "101"> 
32                    <#assign productURL = "consumer-edr"> 
33                    <#assign productName = "Everyday Rewards+"> 
34                    <#break> 
35                <#case "103"> 
36                    <#assign productURL = "consumer-edr"> 
37                    <#assign productName = "Everyday Rewards+"> 
38                    <#break> 
39                <#case "104"> 
40                    <#assign productURL = "max-cash"> 
41                    <#assign productName = "Max Cash Preferred Card">       
42                    <#break> 
43                <#case "108"> 
44                    <#assign productURL="consumer-platinum"> 
45                    <#assign productName="Platinum Card"> 
46                    <#break> 
47                <#case "109"> 
48                    <#assign productURL="consumer-platinum"> 
49                    <#assign productName="Platinum Card"> 
50                    <#break> 
51                <#case "115"> 
52                    <#assign productURL = "secured"> 
53                    <#assign productName = "Secured Card" > 
54                    <#break> 
55                <#case "138"> 
56                    <#assign productURL = "travel-rewards-plus"> 
57                    <#assign productName = "Travel Rewards+" > 
58                    <#break> 
59                <#case "141"> 
60                    <#assign productURL = "college-real-rewards"> 
61                    <#assign productName = "College Real Rewards" >     
62                    <#break> 
63                <#case "147"> 
64                    <#assign productURL = "max-cash-secured"> 
65                    <#assign productName = "Max Cash Secured Card" >     
66                    <#break> 
67                <#case "154"> 
68                    <#assign productURL = "reserve-rewards-plus"> 
69                    <#assign productName = "Reserve Rewards+" > 
70                    <#break> 
71                <#case "121"> 
72                    <#assign productURL = "business-platinum"> 
73                    <#assign productName = "Business Card" > 
74                    <#break> 
75                <#case "128"> 
76                    <#assign productURL = "business-cash-preferred"> 
77                    <#assign productName = "Business Cash Preferred" > 
78                    <#break> 
79                <#case "143"> 
80                    <#assign productURL = "business-real-rewards"> 
81                    <#assign productName = "Business Real Rewards Card" > 
82                    <#break> 
83                <#case "144"> 
84                    <#assign productURL = "smart-business-rewards"> 
85                    <#assign productName = "Smart Business Rewards Card" >     
86                    <#break> 
87                <#default>                                                         
88            </#switch> 
89            <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")> 
90                <script> 
91                 console.log('offerType', '${fib.offerType}', '${productURL}') 
92                </script> 
93                        <#assign cardProviderAbbreviated = ""> 
94        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fib.offerType + '&' + lc)> 
95        <#if (cardProvider?size > 0)> 
96            <#-- This will be V for visa or M for mastercard. --> 
97            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
98        <#else> 
99            <script> 
100                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
101            </script> 
102        </#if> 
103                <#list product.getSiblings() as card> 
104                    <#if (card.offerType.getData() == fib.offerType)> 
105                        <div class="content-container" title="${partnerName!''} - Disclaimer"> 
106                            <div class="jn-disclaimer"> 
107                                         
108                                <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && card.disclaimerBank.getData()?has_content> 
109                                    ${card.disclaimerBank.getData()} 
110                                <#else> 
111                                    <#if (card.disclaimerVisa?has_content && cardProviderAbbreviated?contains('V'))> 
112                                        ${card.disclaimerVisa.getData()} 
113                                    </#if> 
114                                    <#if (card.disclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')) > 
115                                        ${card.disclaimerMasterCard.getData()} 
116                                    </#if> 
117                                </#if> 
118                            </div> 
119                        </div> 
120                        <#break> 
121                    </#if> 
122                </#list> 
123                <#break> 
124            </#if> 
125        </#list> 
126    </#if> 
127</#if> 
处理模板时发生错误。
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417685" at line 3, column 15]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417685" at line 3, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>  
3<#assign lc = qstringmap["ecdma-lc"]?first> 
4<#assign lc = htmlUtil.escape(lc)> 
5<#assign lc = htmlUtil.escapeJS(lc)> 
6 
7<#if (lc?has_content && lc?length gt 5)> 
8    <#assign lc = lc[0..4] > 
9</#if> 
10<#assign lc = lc?web_safe> 
11<#assign aDateTime = .now> 
12<#assign currentYear = aDateTime?string.yyyy> 
13 
14 
15<div id="footerIdAdPlatinum"> 
16  ${footerContent.getData()} 
17</div> 
18 
19<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
20<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
21<style> 
22    #opt-out-button, 
23    .modal__btn.learn-more { 
24        background: #0C2074; 
25        border: 1px solid #0C2074; 
26        color: white; 
27        text-transform: uppercase; 
28        text-decoration: none; 
29        font-size: 16px; 
30        padding: 0.5rem 2rem; 
31        display: inline-block; 
32        border-radius: 0; 
33
34    #opt-out-button:hover, 
35    .modal__btn.learn-more:hover { 
36        color: white !important; 
37        border-color: #2C76AF !important; 
38        background-color: #2C76AF !important; 
39
40    .modal .modal__btn.learn-more { 
41        background: white; 
42        border: 1px solid #0C2074; 
43        color: #0C2074; 
44        text-decoration: none; 
45
46    #opt-out-button[disabled="true"] { 
47        background-color: rgba(0,0,0,.15); 
48        color: rgba(0,0,0,.45); 
49        border-color: rgba(0,0,0,.25); 
50
51    #opt-out-button:hover[disabled="true"] { 
52        background-color: rgba(0,0,0,.15) !important; 
53        color: rgba(0,0,0,.45) !important; 
54        border-color: rgba(0,0,0,.25) !important; 
55
56    #opt-out-button:focus { 
57        outline-style: solid; 
58        outline-color: white; 
59        outline-offset: -3px; 
60        outline-width: 1px; 
61
62    .opt-out-link svg { 
63        width: 30px; 
64        height: 14px; 
65        width: auto; 
66        vertical-align: middle; 
67
68    .modal__overlay { 
69        position: fixed; 
70        top: 0; 
71        left: 0; 
72        right: 0; 
73        bottom: 0; 
74        background: rgba(0,0,0,0.6); 
75        display: flex; 
76        justify-content: center; 
77        align-items: center; 
78
79 
80    .modal__container { 
81        background-color: #fff; 
82        padding: 30px; 
83        max-width: 500px; 
84        max-height: 100vh; 
85        border-radius: 4px; 
86        overflow-y: auto; 
87        box-sizing: border-box; 
88
89 
90    .modal__header { 
91        display: flex; 
92        justify-content: space-between; 
93        align-items: center; 
94
95 
96    .modal .modal__container .modal__title { 
97        margin-top: 0; 
98        margin-bottom: 0; 
99        font-weight: 600; 
100        font-size: 20px; 
101        line-height: 1.25; 
102        color: #00449e; 
103        box-sizing: border-box; 
104
105 
106    .modal__close { 
107        background: transparent; 
108        border: 1px solid white; 
109        padding: 4px 8px; 
110
111    .modal__close:hover { 
112        border: 1px solid black; 
113
114 
115    .modal__header .modal__close:before { content: "\2715"; } 
116 
117    .modal__content { 
118        margin-top: 2rem; 
119        margin-bottom: 2rem; 
120        line-height: 1.5; 
121
122 
123    @keyframes mmfadeIn { 
124        from { opacity: 0; } 
125        to { opacity: 1; } 
126
127 
128    @keyframes mmfadeOut { 
129        from { opacity: 1; } 
130        to { opacity: 0; } 
131
132 
133    @keyframes mmslideIn { 
134        from { transform: translateY(15%); } 
135        to { transform: translateY(0); } 
136
137 
138    @keyframes mmslideOut { 
139        from { transform: translateY(0); } 
140        to { transform: translateY(-10%); } 
141
142 
143    .micromodal-slide { 
144        display: none; 
145
146 
147    .micromodal-slide.is-open { 
148        display: block; 
149
150 
151    .micromodal-slide[aria-hidden="false"] .modal__overlay { 
152        animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
153
154 
155    .micromodal-slide[aria-hidden="false"] .modal__container { 
156        animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
157
158 
159    .micromodal-slide[aria-hidden="true"] .modal__overlay { 
160        animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
161
162 
163    .micromodal-slide[aria-hidden="true"] .modal__container { 
164        animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
165
166 
167    .micromodal-slide .modal__container, 
168    .micromodal-slide .modal__overlay { 
169        will-change: transform; 
170
171</style> 
172 
173<div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
174<div class="modal__overlay" tabindex="-1" data-micromodal-close> 
175    <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
176    <header class="modal__header"> 
177        <h2 class="modal__title" id="modal-1-title"> 
178        Your California privacy choices 
179        </h2> 
180        <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
181    </header> 
182    <div class="modal__content" id="modal-1-content"> 
183        <div id="message-no-cookie"> 
184            <p> 
185            We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p> 
186             
187<p>&nbsp;</p> 
188 
189<p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p> 
190    </div> 
191    <div id="message-with-cookie"> 
192        <p>You have successfully opted-out.</p> 
193    </div> 
194    </div> 
195    <div class="modal__footer"> 
196        <a href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a> 
197        <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
198    </div> 
199    </div> 
200</div> 
201</div> 
202<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
203<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
204<script> 
205AUI().ready(function() { 
206        //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading. 
207        const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright'); 
208        const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic'); 
209        const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement'); 
210        agreementNode.innerHTML= '<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!''}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>'; 
211        copyrightNode.innerHTML= '<sup>©</sup> Elan Financial Services ' + ${currentYear}; 
212        copyrightNode.classList.add('ecdma-footer-client-name-copyright'); 
213        fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
214        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
215        fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>'); 
216        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
217 
218        window.getCookieDomain = function() { 
219            var hostname = window.location.hostname.split("."); 
220            return hostname && hostname.slice(hostname.length - 2).join("."); 
221
222        window.setToOptOut = function() { 
223            if (window.getCookie('privacy_optout')) { 
224                    document.getElementById('message-no-cookie').style.display = 'none'; 
225                    document.getElementById('message-with-cookie').style.display = 'block'; 
226                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
227                } else { 
228                    document.getElementById('message-no-cookie').style.display = 'block'; 
229                    document.getElementById('message-with-cookie').style.display = 'none'; 
230
231
232        window.getCookie = function(name) { 
233            var value = '; ' + document.cookie; 
234            var parts = value.split('; ' + name + '='); 
235            if (parts.length === 2) return parts.pop().split(';').shift(); 
236
237        window.californiaOptOut = function() { 
238            if (!window.getCookie('privacy_optout')) { 
239                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
240                try { 
241                if (window.CustomEvent) { 
242                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
243                } else { 
244                    var privacyOptoutEvent = document.createEvent('Event'); 
245                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
246                    window.dispatchEvent(privacyOptoutEvent); 
247
248                window.setToOptOut(); 
249                } catch (err) { 
250                console.error(err); 
251
252
253
254        MicroModal.init({ 
255            onShow: window.setToOptOut 
256        }); 
257     
258        // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
259        const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
260        if(isBrowserGpcOptOut === true) { 
261        window.californiaOptOut(); 
262
263    }); 
264</script> 
265<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->