{"scan":{"id":"23b47f08-f47f-4991-a067-f47d7b7a4f53","inputUrl":"http://www.aflyon.org","url":"http://www.aflyon.org/","site":"aflyon.org","collectionId":"aaed7c59-15f4-46cf-bbc9-853b45117da5","status":"success","error":null,"pageTitle":"Apprendre le français à Lyon - Alliance Française","finalUrl":"https://www.aflyon.org/","dnsServer":"9.9.9.9","pages":3,"browsingHistory":["https://www.aflyon.org/","https://www.aflyon.org/es/","https://www.aflyon.org/categorie-produit/cours/cours-particuliers/"],"device":"mobile-pixel-5","phase":"pre","postOf":null,"consentResult":null,"consentCmp":null,"language":"fr-FR","languageSource":"html-lang","acceptLanguage":"en-US","languageDocument":true,"tcfVendors":null,"tcfConsented":null,"tcfPurposes":null,"tcfCmpId":null,"blocked":null,"blockedBy":null,"totalTrackingRequests":12,"analysisVersion":11,"trackerdbVersion":"1.0.945","maxmindDate":"2026-06-17","collectorVersion":"3.11.0","wikidataQid":null,"wikidataConfidence":null,"priority":0,"runnerId":"b3af8977-6a78-44b0-bc0d-10b530c68104","leaseExpiresAt":null,"requiredTag":null,"avoidRunnerId":null,"attempts":1,"createdAt":"2026-09-14T08:57:03.915Z","startedAt":"2026-10-01T18:49:30.906Z","finishedAt":"2026-10-01T18:49:53.809Z"},"pageAfterConsent":true,"half":{"id":"23b47f08-f47f-4991-a067-f47d7b7a4f53","status":"success","at":"2026-09-14T08:57:03.915Z","pages":["https://www.aflyon.org/","https://www.aflyon.org/es/","https://www.aflyon.org/categorie-produit/cours/cours-particuliers/"],"consentResult":null,"consentCmp":null,"tcfVendors":null,"tcfConsented":null,"tcfPurposes":null,"trackerRefs":[{"key":"youtube","name":"YouTube"},{"key":"doubleclick","name":"Google Marketing Platform"}],"trackers":2,"requests":12,"thirdPartyHosts":10,"cookies":8,"thirdPartyCookies":1},"other":{"id":"63703531-eaa1-4f36-9b47-c6544c1a2006","status":"success","at":"2026-10-01T18:49:54.584Z","pages":["https://www.aflyon.org/","https://www.aflyon.org/es/","https://www.aflyon.org/categorie-produit/cours/cours-particuliers/"],"consentResult":"accepted","consentCmp":"Moove","tcfVendors":null,"tcfConsented":null,"tcfPurposes":null,"trackerRefs":[{"key":"youtube","name":"YouTube"},{"key":"doubleclick","name":"Google Marketing Platform"},{"key":"microsoft_clarity","name":"Microsoft Clarity"},{"key":"facebook","name":"Facebook"},{"key":"google_tag","name":"Google Tag"},{"key":"facebook_custom_audience","name":"Facebook Custom Audience"},{"key":"google_tag_manager_1p","name":"Google Tag Manager (server-side)"},{"key":"google_analytics","name":"Google Analytics"}],"trackers":8,"requests":39,"thirdPartyHosts":19,"cookies":18,"thirdPartyCookies":6,"phase":"post","trackerRows":[{"id":614315,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"youtube","requests":12,"domains":["youtube.com"],"name":"YouTube","category":"Audio/Video Player","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://www.youtube.com/","wikidataQid":"Q95","wikidataConfidence":"verified"},{"id":614316,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"doubleclick","requests":10,"domains":["doubleclick.net"],"name":"Google Marketing Platform","category":"Advertising","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://marketingplatform.google.com/about/enterprise/","wikidataQid":"Q95","wikidataConfidence":"verified"},{"id":614317,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"microsoft_clarity","requests":6,"domains":["clarity.ms"],"name":"Microsoft Clarity","category":"Site Analytics","organization":"Microsoft","organizationDescription":"Microsoft is an American multinational corporation that develops, manufactures, licenses, supports, and sells a range of software products and services.","country":"US","privacyPolicyUrl":"https://privacy.microsoft.com/en-us/privacystatement/","websiteUrl":"https://clarity.microsoft.com/","wikidataQid":"Q2283","wikidataConfidence":"verified"},{"id":614318,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"facebook","requests":4,"domains":["facebook.net"],"name":"Facebook","category":"Advertising","organization":"Meta","organizationDescription":"Meta Platforms, Inc., doing business as Meta, is an American multinational technology conglomerate based in Menlo Park, California. The company owns and operates Facebook, Instagram, WhatsApp, and other products and services, including Meta AI. The company rebranded from Facebook, Inc. in 2021.","country":"US","privacyPolicyUrl":"https://about.meta.com/actions/protecting-privacy-and-security/","websiteUrl":"https://www.facebook.com","wikidataQid":"Q380","wikidataConfidence":"verified"},{"id":614319,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"google_tag","requests":2,"domains":["googletagmanager.com"],"name":"Google Tag","category":"Advertising","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://developers.google.com/tag-platform/gtagjs","wikidataQid":"Q95","wikidataConfidence":"verified"},{"id":614320,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"facebook_custom_audience","requests":2,"domains":["facebook.com"],"name":"Facebook Custom Audience","category":"Advertising","organization":"Meta","organizationDescription":"Meta Platforms, Inc., doing business as Meta, is an American multinational technology conglomerate based in Menlo Park, California. The company owns and operates Facebook, Instagram, WhatsApp, and other products and services, including Meta AI. The company rebranded from Facebook, Inc. in 2021.","country":"US","privacyPolicyUrl":"https://about.meta.com/actions/protecting-privacy-and-security/","websiteUrl":"https://www.facebook.com","wikidataQid":"Q380","wikidataConfidence":"verified"},{"id":614321,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"google_tag_manager_1p","requests":2,"domains":["googletagmanager.com"],"name":"Google Tag Manager (server-side)","category":"Utilities","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://developers.google.com/tag-platform/learn/sst-fundamentals/3-why-and-when-sst","wikidataQid":"Q95","wikidataConfidence":"verified"},{"id":614322,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","key":"google_analytics","requests":1,"domains":["google-analytics.com"],"name":"Google Analytics","category":"Site Analytics","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"http://www.google.com/analytics/","wikidataQid":"Q95","wikidataConfidence":"verified"}]},"trackers":[{"id":614300,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","key":"youtube","requests":6,"domains":["youtube.com"],"name":"YouTube","category":"Audio/Video Player","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://www.youtube.com/","wikidataQid":"Q95","wikidataConfidence":"verified"},{"id":614301,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","key":"doubleclick","requests":6,"domains":["doubleclick.net"],"name":"Google Marketing Platform","category":"Advertising","organization":"Google","organizationDescription":"Google LLC is an American multinational technology company that specializes in Internet-related services and products, which include online advertising technologies, search engine, cloud computing, software, and hardware.","country":"US","privacyPolicyUrl":"https://policies.google.com/privacy","websiteUrl":"https://marketingplatform.google.com/about/enterprise/","wikidataQid":"Q95","wikidataConfidence":"verified"}],"unidentified":[],"hosts":[{"id":2039096,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.aflyon.org","party":"first","addresses":["147.135.255.133"],"countries":["FR"],"providers":["OVH SAS (AS16276)"],"asns":[16276],"source":"observed","error":null},{"id":2039097,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"lh3.googleusercontent.com","party":"third","addresses":["172.217.16.225"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039098,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"cdn.trustindex.io","party":"third","addresses":["143.204.194.17"],"countries":["US"],"providers":["Amazon.com, Inc. (AS16509)"],"asns":[16509],"source":"observed","error":null},{"id":2039099,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.youtube.com","party":"third","addresses":["142.251.153.4"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039100,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"fonts.gstatic.com","party":"third","addresses":["172.217.22.163","2a00:1450:4007:815::2003"],"countries":["US","IE"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"resolved","error":null},{"id":2039101,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"googleads.g.doubleclick.net","party":"third","addresses":["172.217.171.98","2a00:1450:400e:811::2002"],"countries":["US","IE"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"resolved","error":null},{"id":2039102,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"static.doubleclick.net","party":"third","addresses":["142.251.209.230","2a00:1450:400e:811::2006"],"countries":["US","IE"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"resolved","error":null},{"id":2039103,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.google.com","party":"third","addresses":["142.251.151.119","142.251.153.119"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039104,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"i.ytimg.com","party":"third","addresses":["142.251.142.22","108.177.15.119","172.217.20.54","172.217.22.150","172.217.22.182","172.217.22.22","172.217.22.54","142.251.39.118","142.251.39.214","142.251.168.119","172.217.22.118","172.217.22.86","142.251.209.150","172.217.22.214","172.217.16.246","2a00:1450:400c:c06::77","2a00:1450:4007:80f::2016","2a00:1450:4007:812::2016","2a00:1450:4007:809::2016"],"countries":["US","IE"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"resolved","error":null},{"id":2039105,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"jnn-pa.googleapis.com","party":"third","addresses":["172.217.113.4","172.217.112.4","172.217.119.4","172.217.117.4","172.217.114.4","172.217.118.4","172.217.116.4","172.217.115.4","2001:4860:4847:400::","2001:4860:4846:400::","2001:4860:4841:400::","2001:4860:4844:400::","2001:4860:4840:400::","2001:4860:4845:400::","2001:4860:4843:400::","2001:4860:4842:400::"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"resolved","error":null},{"id":2039106,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.gstatic.com","party":"third","addresses":["172.217.22.35"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039107,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.googletagmanager.com","party":"third","addresses":["142.251.39.200"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039108,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"connect.facebook.net","party":"third","addresses":["57.144.214.128"],"countries":["IE"],"providers":["Facebook, Inc. (AS32934)"],"asns":[32934],"source":"observed","error":null},{"id":2039109,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.clarity.ms","party":"third","addresses":["20.250.198.32"],"countries":["US"],"providers":["Microsoft Corporation (AS8075)"],"asns":[8075],"source":"observed","error":null},{"id":2039110,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"ad.doubleclick.net","party":"third","addresses":["142.251.142.6"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039111,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"region1.google-analytics.com","party":"third","addresses":["216.239.34.36"],"countries":["US"],"providers":["Google LLC (AS15169)"],"asns":[15169],"source":"observed","error":null},{"id":2039112,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"scripts.clarity.ms","party":"third","addresses":["150.171.110.117"],"countries":["US"],"providers":["Microsoft Corporation (AS8075)"],"asns":[8075],"source":"observed","error":null},{"id":2039113,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"www.facebook.com","party":"third","addresses":["57.144.214.1"],"countries":["IE"],"providers":["Facebook, Inc. (AS32934)"],"asns":[32934],"source":"observed","error":null},{"id":2039114,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"k.clarity.ms","party":"third","addresses":["172.175.38.6"],"countries":["GB"],"providers":["Microsoft Corporation (AS8075)"],"asns":[8075],"source":"observed","error":null},{"id":2039115,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","hostname":"y.clarity.ms","party":"third","addresses":["172.171.87.38"],"countries":["GB"],"providers":["Microsoft Corporation (AS8075)"],"asns":[8075],"source":"observed","error":null}],"consentManagers":[],"signals":[{"id":1779751,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://scripts.clarity.ms/0.8.72-beta/clarity.js","details":["keydown","input"]},{"id":1779752,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.aflyon.org/wp/wp-includes/js/jquery/jquery.min.js?ver=3.7.1","details":["keyup","keydown"]},{"id":1779753,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6ImZiNGVkZWFmMmIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJFbnZvaSBlbiBjb3Vyc1x1MjAyNiIsImZpbGVTYXZlZCI6IkZpY2hpZXIgZW5yZWdpc3RyXHUwMGU5LiIsInVwbG9hZEVycm9yIjoiRXJyZXVyIGxvcnMgZHUgdFx1MDBlOWxcdTAwZTl2ZXJzZW1lbnQuIiwiaW52YWxpZFJlc3BvbnNlIjoiUlx1MDBlOXBvbnNlIGludmFsaWRlLiIsIm5ldHdvcmtFcnJvciI6IkVycmV1ciByXHUwMGU5c2VhdS4iLCJpZERvY3VtZW50UmVxdWlyZWQiOiJWZXVpbGxleiB0XHUwMGU5bFx1MDBlOXZlcnNlciB2b3RyZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJMZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGRlIGwnYXBwcmVuYW50XC9jYW5kaWRhdCBlc3Qgb2JsaWdhdG9pcmUuIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiTGUgcHJcdTAwZTlub20gZGUgbCdhcHByZW5hbnRcL2NhbmRpZGF0IGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aERhdGVSZXF1aXJlZCI6IkxhIGRhdGUgZGUgbmFpc3NhbmNlIGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiYmlydGhDb3VudHJ5UmVxdWlyZWQiOiJMZSBwYXlzIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hdGlvbmFsaXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsIm1vdGhlclRvbmd1ZVJlcXVpcmVkIjoiTGEgbGFuZ3VlIG1hdGVybmVsbGUgZXN0IG9ibGlnYXRvaXJlLiIsInRpdGxlUmVxdWlyZWQiOiJMYSBjaXZpbGl0XHUwMGU5IGVzdCBvYmxpZ2F0b2lyZS4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkxlIHByXHUwMGU5bm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJhZGRyZXNzUmVxdWlyZWQiOiJMJ2FkcmVzc2UgZXN0IG9ibGlnYXRvaXJlLiIsImNpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGVzdCBvYmxpZ2F0b2lyZS4iLCJwb3N0Y29kZVJlcXVpcmVkIjoiTGUgY29kZSBwb3N0YWwgZXN0IG9ibGlnYXRvaXJlLiIsImNvdW50cnlSZXF1aXJlZCI6IkxlIHBheXMgZXN0IG9ibGlnYXRvaXJlLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlVuIGUtbWFpbCB2YWxpZGUgZXN0IG9ibGlnYXRvaXJlLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["input"]},{"id":1779754,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.aflyon.org/categorie-produit/cours/cours-particuliers/","details":["input","keyup","keydown"]},{"id":1779755,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6IjUzOGNjYWQ3NWIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJTdWJpZW5kb1x1MjAyNiIsImZpbGVTYXZlZCI6IkFyY2hpdm8gZ3VhcmRhZG8uIiwidXBsb2FkRXJyb3IiOiJFcnJvciBhbCBzdWJpciBlbCBhcmNoaXZvLiIsImludmFsaWRSZXNwb25zZSI6IlJlc3B1ZXN0YSBubyB2XHUwMGUxbGlkYS4iLCJuZXR3b3JrRXJyb3IiOiJFcnJvciBkZSByZWQuIiwiaWREb2N1bWVudFJlcXVpcmVkIjoiUG9yIGZhdm9yLCBzdWJhIHN1IGRvY3VtZW50byBkZSBpZGVudGlkYWQuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJFbCBkb2N1bWVudG8gZGUgaWRlbnRpZGFkIGVzIG9ibGlnYXRvcmlvLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiRWwgYXBlbGxpZG8gZGVsIGFwcmVuZGl6XC9jYW5kaWRhdG8gZXMgb2JsaWdhdG9yaW8uIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiRWwgbm9tYnJlIGRlbCBhcHJlbmRpelwvY2FuZGlkYXRvIGVzIG9ibGlnYXRvcmlvLiIsImJpcnRoRGF0ZVJlcXVpcmVkIjoiTGEgZmVjaGEgZGUgbmFjaW1pZW50byBlcyBvYmxpZ2F0b3JpYS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIGNpdWRhZCBkZSBuYWNpbWllbnRvIGVzIG9ibGlnYXRvcmlhLiIsImJpcnRoQ291bnRyeVJlcXVpcmVkIjoiRWwgcGFcdTAwZWRzIGRlIG5hY2ltaWVudG8gZXMgb2JsaWdhdG9yaW8uIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hY2lvbmFsaWRhZCBlcyBvYmxpZ2F0b3JpYS4iLCJtb3RoZXJUb25ndWVSZXF1aXJlZCI6IkxhIGxlbmd1YSBtYXRlcm5hIGVzIG9ibGlnYXRvcmlhLiIsInRpdGxlUmVxdWlyZWQiOiJFbCB0cmF0YW1pZW50byBlcyBvYmxpZ2F0b3Jpby4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkVsIG5vbWJyZSBlcyBvYmxpZ2F0b3Jpby4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiRWwgYXBlbGxpZG8gZXMgb2JsaWdhdG9yaW8uIiwiYWRkcmVzc1JlcXVpcmVkIjoiTGEgZGlyZWNjaVx1MDBmM24gZXMgb2JsaWdhdG9yaWEuIiwiY2l0eVJlcXVpcmVkIjoiTGEgY2l1ZGFkIGVzIG9ibGlnYXRvcmlhLiIsInBvc3Rjb2RlUmVxdWlyZWQiOiJFbCBjXHUwMGYzZGlnbyBwb3N0YWwgZXMgb2JsaWdhdG9yaW8uIiwiY291bnRyeVJlcXVpcmVkIjoiRWwgcGFcdTAwZWRzIGVzIG9ibGlnYXRvcmlvLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHVuIGNvcnJlbyBlbGVjdHJcdTAwZjNuaWNvIHZcdTAwZTFsaWRvLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["input"]},{"id":1779756,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.GRsEQlAF6LQ.2021.O/ck=ytembeds.base.qzDvqMbGmKI.L.W.O/am=AAAAQA/d=1/exm=base,root/excm=base,root/ed=1/br=1/rs=AGKMywESyf9Y9X87KVWSKj1IXnBDyFLpDQ/m=r78Drb","details":["keydown"]},{"id":1779757,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.youtube.com/s/player/8ab5c328/player_embed_es6.vflset/en_US/base.js","details":["keyup","keydown"]},{"id":1779758,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://cdn.trustindex.io/loader.js","details":["keydown","keyup"]},{"id":1779759,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.aflyon.org/es/","details":["input","keyup","keydown"]},{"id":1779760,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6IjUzOGNjYWQ3NWIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJFbnZvaSBlbiBjb3Vyc1x1MjAyNiIsImZpbGVTYXZlZCI6IkZpY2hpZXIgZW5yZWdpc3RyXHUwMGU5LiIsInVwbG9hZEVycm9yIjoiRXJyZXVyIGxvcnMgZHUgdFx1MDBlOWxcdTAwZTl2ZXJzZW1lbnQuIiwiaW52YWxpZFJlc3BvbnNlIjoiUlx1MDBlOXBvbnNlIGludmFsaWRlLiIsIm5ldHdvcmtFcnJvciI6IkVycmV1ciByXHUwMGU5c2VhdS4iLCJpZERvY3VtZW50UmVxdWlyZWQiOiJWZXVpbGxleiB0XHUwMGU5bFx1MDBlOXZlcnNlciB2b3RyZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJMZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGRlIGwnYXBwcmVuYW50XC9jYW5kaWRhdCBlc3Qgb2JsaWdhdG9pcmUuIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiTGUgcHJcdTAwZTlub20gZGUgbCdhcHByZW5hbnRcL2NhbmRpZGF0IGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aERhdGVSZXF1aXJlZCI6IkxhIGRhdGUgZGUgbmFpc3NhbmNlIGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiYmlydGhDb3VudHJ5UmVxdWlyZWQiOiJMZSBwYXlzIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hdGlvbmFsaXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsIm1vdGhlclRvbmd1ZVJlcXVpcmVkIjoiTGEgbGFuZ3VlIG1hdGVybmVsbGUgZXN0IG9ibGlnYXRvaXJlLiIsInRpdGxlUmVxdWlyZWQiOiJMYSBjaXZpbGl0XHUwMGU5IGVzdCBvYmxpZ2F0b2lyZS4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkxlIHByXHUwMGU5bm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJhZGRyZXNzUmVxdWlyZWQiOiJMJ2FkcmVzc2UgZXN0IG9ibGlnYXRvaXJlLiIsImNpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGVzdCBvYmxpZ2F0b2lyZS4iLCJwb3N0Y29kZVJlcXVpcmVkIjoiTGUgY29kZSBwb3N0YWwgZXN0IG9ibGlnYXRvaXJlLiIsImNvdW50cnlSZXF1aXJlZCI6IkxlIHBheXMgZXN0IG9ibGlnYXRvaXJlLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlVuIGUtbWFpbCB2YWxpZGUgZXN0IG9ibGlnYXRvaXJlLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["input"]},{"id":1779761,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"KEYBOARD","source":"https://www.aflyon.org/","details":["input","keyup","keydown"]},{"id":1779762,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://scripts.clarity.ms/0.8.72-beta/clarity.js","details":["touchcancel","touchmove","touchend","touchstart"]},{"id":1779763,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.aflyon.org/app/themes/afl/dist/666.a3841c77.js?ver=7.1.2","details":["touchend","touchstart","touchcancel"]},{"id":1779764,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"rocket-preload-links-js-after","details":["touchstart"]},{"id":1779765,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.aflyon.org/categorie-produit/cours/cours-particuliers/","details":["touchcancel","touchend","touchstart","touchmove"]},{"id":1779766,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.aflyon.org/app/themes/afl/dist/59.cee14674.js?ver=7.1.2","details":["touchcancel","touchend","touchmove","touchstart"]},{"id":1779767,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.google.com/js/th/lYYBGbB22gTJg5WIiQ83vLrLfS9ah0bGJPzX9-2Oo7s.js","details":["touchend","touchstart"]},{"id":1779768,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.youtube.com/s/player/8ab5c328/player_embed_es6.vflset/en_US/base.js","details":["touchend","touchstart"]},{"id":1779769,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://cdn.trustindex.io/loader.js","details":["touchmove","touchstart"]},{"id":1779770,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.aflyon.org/es/","details":["touchcancel","touchend","touchstart","touchmove"]},{"id":1779771,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"TOUCH","source":"https://www.aflyon.org/","details":["touchcancel","touchend","touchstart","touchmove"]},{"id":1779772,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://scripts.clarity.ms/0.8.72-beta/clarity.js","details":["dblclick","mousemove","mouseup","mousedown","click","scroll"]},{"id":1779773,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.googletagmanager.com/gtm.js?id=GTM-MP2RFPB","details":["click"]},{"id":1779774,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://connect.facebook.net/signals/config/247054889551620?v=2.9.412&r=stable&domain=www.aflyon.org&im=1&hme=a4c28c8787325ac3f8f9eac68364f47df2a8c4266e43177443e5d7f6289c9774&ex_m=117%2C240%2C170%2C27%2C81%2C82%2C161%2C77%2C76%2C11%2C180%2C101%2C20%2C152%2C140%2C46%2C84%2C89%2C148%2C175%2C182%2C8%2C4%2C5%2C7%2C6%2C3%2C102%2C114%2C32%2C17%2C31%2C18%2C33%2C34%2C35%2C37%2C55%2C162%2C86%2C125%2C22%2C24%2C51%2C47%2C49%2C48%2C94%2C103%2C107%2C123%2C159%2C163%2C53%2C124%2C29%2C26%2C132%2C78%2C43%2C165%2C164%2C166%2C156%2C154%2C30%2C42%2C66%2C122%2C177%2C79%2C21%2C127%2C92%2C75%2C23%2C96%2C97%2C129%2C95%2C150%2C149%2C153%2C108%2C176%2C179%2C41%2C56%2C126%2C54%2C160%2C184%2C109%2C183%2C209%2C254%2C83%2C273%2C272%2C271%2C14%2C25%2C28%2C40%2C62%2C116%2C68%2C10%2C72%2C110%2C111%2C112%2C118%2C143%2C38%2C36%2C145%2C146%2C147%2C142%2C141%2C171%2C85%2C174%2C172%2C173%2C57%2C67%2C136%2C19%2C178%2C52%2C322%2C323%2C324%2C321%2C337%2C359%2C247%2C236%2C69%2C237%2C235%2C362%2C353%2C59%2C248%2C120%2C144%2C91%2C134%2C61%2C133%2C139%2C138%2C65%2C73%2C71%2C167%2C87%2C88%2C128%2C44%2C39%2C60%2C63%2C113%2C181%2C1%2C137%2C16%2C135%2C12%2C2%2C64%2C104%2C15%2C74%2C70%2C131%2C100%2C99%2C186%2C187%2C105%2C106%2C9%2C115%2C185%2C58%2C157%2C98%2C90%2C80%2C130%2C119%2C168%2C50%2C158%2C0%2C93%2C151%2C155%2C169%2C45%2C121%2C13%2C188","details":["click"]},{"id":1779775,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6ImZiNGVkZWFmMmIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJFbnZvaSBlbiBjb3Vyc1x1MjAyNiIsImZpbGVTYXZlZCI6IkZpY2hpZXIgZW5yZWdpc3RyXHUwMGU5LiIsInVwbG9hZEVycm9yIjoiRXJyZXVyIGxvcnMgZHUgdFx1MDBlOWxcdTAwZTl2ZXJzZW1lbnQuIiwiaW52YWxpZFJlc3BvbnNlIjoiUlx1MDBlOXBvbnNlIGludmFsaWRlLiIsIm5ldHdvcmtFcnJvciI6IkVycmV1ciByXHUwMGU5c2VhdS4iLCJpZERvY3VtZW50UmVxdWlyZWQiOiJWZXVpbGxleiB0XHUwMGU5bFx1MDBlOXZlcnNlciB2b3RyZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJMZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGRlIGwnYXBwcmVuYW50XC9jYW5kaWRhdCBlc3Qgb2JsaWdhdG9pcmUuIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiTGUgcHJcdTAwZTlub20gZGUgbCdhcHByZW5hbnRcL2NhbmRpZGF0IGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aERhdGVSZXF1aXJlZCI6IkxhIGRhdGUgZGUgbmFpc3NhbmNlIGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiYmlydGhDb3VudHJ5UmVxdWlyZWQiOiJMZSBwYXlzIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hdGlvbmFsaXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsIm1vdGhlclRvbmd1ZVJlcXVpcmVkIjoiTGEgbGFuZ3VlIG1hdGVybmVsbGUgZXN0IG9ibGlnYXRvaXJlLiIsInRpdGxlUmVxdWlyZWQiOiJMYSBjaXZpbGl0XHUwMGU5IGVzdCBvYmxpZ2F0b2lyZS4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkxlIHByXHUwMGU5bm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJhZGRyZXNzUmVxdWlyZWQiOiJMJ2FkcmVzc2UgZXN0IG9ibGlnYXRvaXJlLiIsImNpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGVzdCBvYmxpZ2F0b2lyZS4iLCJwb3N0Y29kZVJlcXVpcmVkIjoiTGUgY29kZSBwb3N0YWwgZXN0IG9ibGlnYXRvaXJlLiIsImNvdW50cnlSZXF1aXJlZCI6IkxlIHBheXMgZXN0IG9ibGlnYXRvaXJlLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlVuIGUtbWFpbCB2YWxpZGUgZXN0IG9ibGlnYXRvaXJlLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["click"]},{"id":1779776,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/app/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.6.0","details":["click"]},{"id":1779777,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/wp/wp-includes/js/jquery/jquery.min.js?ver=3.7.1","details":["click"]},{"id":1779778,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/app/themes/afl/dist/666.a3841c77.js?ver=7.1.2","details":["mouseup","mousedown","scroll"]},{"id":1779779,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"rocket-preload-links-js-after","details":["mousedown"]},{"id":1779780,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/categorie-produit/cours/cours-particuliers/","details":["dblclick","click","mousemove","mouseup","mousedown"]},{"id":1779781,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6IjUzOGNjYWQ3NWIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJTdWJpZW5kb1x1MjAyNiIsImZpbGVTYXZlZCI6IkFyY2hpdm8gZ3VhcmRhZG8uIiwidXBsb2FkRXJyb3IiOiJFcnJvciBhbCBzdWJpciBlbCBhcmNoaXZvLiIsImludmFsaWRSZXNwb25zZSI6IlJlc3B1ZXN0YSBubyB2XHUwMGUxbGlkYS4iLCJuZXR3b3JrRXJyb3IiOiJFcnJvciBkZSByZWQuIiwiaWREb2N1bWVudFJlcXVpcmVkIjoiUG9yIGZhdm9yLCBzdWJhIHN1IGRvY3VtZW50byBkZSBpZGVudGlkYWQuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJFbCBkb2N1bWVudG8gZGUgaWRlbnRpZGFkIGVzIG9ibGlnYXRvcmlvLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiRWwgYXBlbGxpZG8gZGVsIGFwcmVuZGl6XC9jYW5kaWRhdG8gZXMgb2JsaWdhdG9yaW8uIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiRWwgbm9tYnJlIGRlbCBhcHJlbmRpelwvY2FuZGlkYXRvIGVzIG9ibGlnYXRvcmlvLiIsImJpcnRoRGF0ZVJlcXVpcmVkIjoiTGEgZmVjaGEgZGUgbmFjaW1pZW50byBlcyBvYmxpZ2F0b3JpYS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIGNpdWRhZCBkZSBuYWNpbWllbnRvIGVzIG9ibGlnYXRvcmlhLiIsImJpcnRoQ291bnRyeVJlcXVpcmVkIjoiRWwgcGFcdTAwZWRzIGRlIG5hY2ltaWVudG8gZXMgb2JsaWdhdG9yaW8uIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hY2lvbmFsaWRhZCBlcyBvYmxpZ2F0b3JpYS4iLCJtb3RoZXJUb25ndWVSZXF1aXJlZCI6IkxhIGxlbmd1YSBtYXRlcm5hIGVzIG9ibGlnYXRvcmlhLiIsInRpdGxlUmVxdWlyZWQiOiJFbCB0cmF0YW1pZW50byBlcyBvYmxpZ2F0b3Jpby4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkVsIG5vbWJyZSBlcyBvYmxpZ2F0b3Jpby4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiRWwgYXBlbGxpZG8gZXMgb2JsaWdhdG9yaW8uIiwiYWRkcmVzc1JlcXVpcmVkIjoiTGEgZGlyZWNjaVx1MDBmM24gZXMgb2JsaWdhdG9yaWEuIiwiY2l0eVJlcXVpcmVkIjoiTGEgY2l1ZGFkIGVzIG9ibGlnYXRvcmlhLiIsInBvc3Rjb2RlUmVxdWlyZWQiOiJFbCBjXHUwMGYzZGlnbyBwb3N0YWwgZXMgb2JsaWdhdG9yaW8uIiwiY291bnRyeVJlcXVpcmVkIjoiRWwgcGFcdTAwZWRzIGVzIG9ibGlnYXRvcmlvLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHVuIGNvcnJlbyBlbGVjdHJcdTAwZjNuaWNvIHZcdTAwZTFsaWRvLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["click"]},{"id":1779782,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.google.com/js/th/lYYBGbB22gTJg5WIiQ83vLrLfS9ah0bGJPzX9-2Oo7s.js","details":["mousedown","mousemove","mouseup"]},{"id":1779783,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.youtube.com/s/player/8ab5c328/player_embed_es6.vflset/en_US/base.js","details":["click","mousemove","scroll","mouseup","mousedown"]},{"id":1779784,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://cdn.trustindex.io/loader.js","details":["scroll","mousemove","click"]},{"id":1779785,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/es/","details":["dblclick","click","mousemove","mouseup","mousedown"]},{"id":1779786,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"data:text/javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHt3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gPSB7ImFqYXhVcmwiOiJodHRwczpcL1wvd3d3LmFmbHlvbi5vcmdcL3dwXC93cC1hZG1pblwvYWRtaW4tYWpheC5waHAiLCJub25jZSI6IjUzOGNjYWQ3NWIiLCJleGlzdGluZ0NuaUlkIjowLCJzdG9yZU5zIjoiYWZsLWNoZWNrb3V0IiwiaTE4biI6eyJ1cGxvYWRpbmciOiJFbnZvaSBlbiBjb3Vyc1x1MjAyNiIsImZpbGVTYXZlZCI6IkZpY2hpZXIgZW5yZWdpc3RyXHUwMGU5LiIsInVwbG9hZEVycm9yIjoiRXJyZXVyIGxvcnMgZHUgdFx1MDBlOWxcdTAwZTl2ZXJzZW1lbnQuIiwiaW52YWxpZFJlc3BvbnNlIjoiUlx1MDBlOXBvbnNlIGludmFsaWRlLiIsIm5ldHdvcmtFcnJvciI6IkVycmV1ciByXHUwMGU5c2VhdS4iLCJpZERvY3VtZW50UmVxdWlyZWQiOiJWZXVpbGxleiB0XHUwMGU5bFx1MDBlOXZlcnNlciB2b3RyZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkuIiwiaWREb2N1bWVudFJlcXVpcmVkU2hvcnQiOiJMZSBkb2N1bWVudCBkJ2lkZW50aXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsImxlYXJuZXJMYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGRlIGwnYXBwcmVuYW50XC9jYW5kaWRhdCBlc3Qgb2JsaWdhdG9pcmUuIiwibGVhcm5lckZpcnN0TmFtZVJlcXVpcmVkIjoiTGUgcHJcdTAwZTlub20gZGUgbCdhcHByZW5hbnRcL2NhbmRpZGF0IGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aERhdGVSZXF1aXJlZCI6IkxhIGRhdGUgZGUgbmFpc3NhbmNlIGVzdCBvYmxpZ2F0b2lyZS4iLCJiaXJ0aENpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiYmlydGhDb3VudHJ5UmVxdWlyZWQiOiJMZSBwYXlzIGRlIG5haXNzYW5jZSBlc3Qgb2JsaWdhdG9pcmUuIiwiY2l0aXplbnNoaXBSZXF1aXJlZCI6IkxhIG5hdGlvbmFsaXRcdTAwZTkgZXN0IG9ibGlnYXRvaXJlLiIsIm1vdGhlclRvbmd1ZVJlcXVpcmVkIjoiTGEgbGFuZ3VlIG1hdGVybmVsbGUgZXN0IG9ibGlnYXRvaXJlLiIsInRpdGxlUmVxdWlyZWQiOiJMYSBjaXZpbGl0XHUwMGU5IGVzdCBvYmxpZ2F0b2lyZS4iLCJmaXJzdE5hbWVSZXF1aXJlZCI6IkxlIHByXHUwMGU5bm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJsYXN0TmFtZVJlcXVpcmVkIjoiTGUgbm9tIGVzdCBvYmxpZ2F0b2lyZS4iLCJhZGRyZXNzUmVxdWlyZWQiOiJMJ2FkcmVzc2UgZXN0IG9ibGlnYXRvaXJlLiIsImNpdHlSZXF1aXJlZCI6IkxhIHZpbGxlIGVzdCBvYmxpZ2F0b2lyZS4iLCJwb3N0Y29kZVJlcXVpcmVkIjoiTGUgY29kZSBwb3N0YWwgZXN0IG9ibGlnYXRvaXJlLiIsImNvdW50cnlSZXF1aXJlZCI6IkxlIHBheXMgZXN0IG9ibGlnYXRvaXJlLiIsInZhbGlkRW1haWxSZXF1aXJlZCI6IlVuIGUtbWFpbCB2YWxpZGUgZXN0IG9ibGlnYXRvaXJlLiJ9LCJwcmVmaWxsIjp7ImNpdmlsaXR5IjoiIiwibGVhcm5lckxhc3ROYW1lIjoiIiwibGVhcm5lckZpcnN0TmFtZSI6IiIsImJpcnRoRGF0ZSI6IiIsImJpcnRoQ2l0eSI6IiIsImJpcnRoQ291bnRyeSI6IiIsImNpdGl6ZW5zaGlwIjoiIiwibW90aGVydG9uZ3VlIjoiIn19Oy8qIEFGTCBDaGVja291dCDigJMgUGVyc29uYWwgSW5mb3JtYXRpb24KICogU2VjdGlvbiBpcyBpbmplY3RlZCBpbnNpZGUgdGhlIGNoZWNrb3V0IGZvcm0uIElmIFJlYWN0IHJlbW92ZXMgaXQsCiAqIGEgTXV0YXRpb25PYnNlcnZlciByZS1pbnNlcnRzIGEgY2xvbmUgc28gdGhlIGJsb2NrIHN0YXlzIHZpc2libGUuCiAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGxldCBjZmcgPSB3aW5kb3cuYWZsQ2hlY2tvdXRQZXJzb25hbEluZm8gfHwge307CiAgICBpZiAoIWNmZy5hamF4VXJsKSB7IHJldHVybjsgfQoKICAgIGxldCBpMThuID0gY2ZnLmkxOG4gfHwge307CiAgICBsZXQgc2F2ZVRpbWVyID0gbnVsbDsKICAgIGxldCBpbmplY3RlZFNlY3Rpb24gPSBudWxsOyAgLy8gcmVmZXJlbmNlIHRvIHRoZSBub2RlIHdlIGluc2VydGVkCiAgICBsZXQgYmFja3VwQ2xvbmUgPSBudWxsOyAgICAgIC8vIGNsb25lIHVzZWQgdG8gcmUtaW5zZXJ0IHdoZW4gUmVhY3QgcmVtb3ZlcyBvdXIgbm9kZQoKICAgIGZ1bmN0aW9uICQoaWQpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfQogICAgZnVuY3Rpb24gdmFsKGlkKSB7IGxldCBlbCA9ICQoaWQpOyByZXR1cm4gZWwgPyAoZWwudmFsdWUgfHwgJycpLnRyaW0oKSA6ICcnOyB9CiAgICBmdW5jdGlvbiB0KGtleSwgZmFsbGJhY2spIHsgcmV0dXJuIGkxOG5ba2V5XSB8fCBmYWxsYmFjayB8fCAnJzsgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFdhaXQgZm9yIHRoZSBXQyBjaGVja291dCBibG9jawogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIHdhaXRGb3JDaGVja291dChjYikgewogICAgICAgIGxldCBzZWwgPSBbCiAgICAgICAgICAgICcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQnLAogICAgICAgICAgICAnW2RhdGEtYmxvY2stbmFtZT0id29vY29tbWVyY2UvY2hlY2tvdXQiXScsCiAgICAgICAgICAgICcud2MtYmxvY2stY2hlY2tvdXQnLAogICAgICAgIF07CiAgICAgICAgZnVuY3Rpb24gZmluZCgpIHsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7aSA8IHNlbC5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbFtpXSk7CiAgICAgICAgICAgICAgICBpZiAoZWwpIHsgcmV0dXJuIGVsOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGxldCB0ID0gZmluZCgpOwogICAgICAgIGlmICh0KSB7IGNiKHQpOyByZXR1cm47IH0KICAgICAgICBsZXQgb2JzID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBsZXQgdCA9IGZpbmQoKTsKICAgICAgICAgICAgaWYgKHQpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgY2IodCk7IH0KICAgICAgICB9KTsKICAgICAgICBvYnMub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgb2JzLmRpc2Nvbm5lY3QoKTsgfSwgMTUwMDApOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEluamVjdCBzZWN0aW9uIGluc2lkZSBjaGVja291dCBmb3JtOyBrZWVwIGJhY2t1cCB0byByZS1pbnNlcnQgaWYgcmVtb3ZlZAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKSB7CiAgICAgICAgbGV0IGlubmVyID0gY2hlY2tvdXRFbC5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2std29vY29tbWVyY2UtY2hlY2tvdXQtZmllbGRzLWJsb2NrJyk7CiAgICAgICAgcmV0dXJuIGlubmVyIHx8IGNoZWNrb3V0RWwucXVlcnlTZWxlY3RvcignLndjLWJsb2NrLWNoZWNrb3V0X19tYWluJykgfHwgY2hlY2tvdXRFbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbml0U2VsZWN0c0luU2VjdGlvbihzZWN0aW9uKSB7CiAgICAgICAgc2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbZGF0YS1pbml0aWFsXScpLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgICBsZXQgaW5pdGlhbCA9IHNlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5pdGlhbCcpOwogICAgICAgICAgICBpZiAoaW5pdGlhbCkgeyBzZWwudmFsdWUgPSBpbml0aWFsOyB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0U2VjdGlvbihjaGVja291dEVsKSB7CiAgICAgICAgbGV0IHBhcmVudCA9IGdldEluc2VydGlvblBhcmVudChjaGVja291dEVsKTsKICAgICAgICBpZiAoIXBhcmVudCkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IHN0YWdpbmcgPSAkKCdhZmwtY25pLXN0YWdpbmcnKTsKICAgICAgICBpZiAoIXN0YWdpbmcpIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbmplY3RlZCBzZWN0aW9uIHRoYXQgd2FzIHJlbW92ZWQsIHJlLWluc2VydCBmcm9tIGJhY2t1cAogICAgICAgIGlmIChpbmplY3RlZFNlY3Rpb24gJiYgIWRvY3VtZW50LmJvZHkuY29udGFpbnMoaW5qZWN0ZWRTZWN0aW9uKSAmJiBiYWNrdXBDbG9uZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgIGluamVjdGVkU2VjdGlvbiA9IGJhY2t1cENsb25lOwogICAgICAgICAgICBiYWNrdXBDbG9uZSA9IGJhY2t1cENsb25lLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IHNlY3Rpb24gPSBzdGFnaW5nLnF1ZXJ5U2VsZWN0b3IoJyNhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICBpZiAoIXNlY3Rpb24pIHsgcmV0dXJuOyB9CgogICAgICAgIHNlY3Rpb24uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc2VjdGlvbiwgcGFyZW50LmZpcnN0Q2hpbGQpOwogICAgICAgIGluamVjdGVkU2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgaW5pdFNlbGVjdHNJblNlY3Rpb24oaW5qZWN0ZWRTZWN0aW9uKTsKICAgICAgICBiYWNrdXBDbG9uZSA9IHNlY3Rpb24uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAvLyBJZiBSZWFjdCByZW1vdmVzIG91ciBzZWN0aW9uLCB3ZSdsbCByZS1pbnNlcnQgdGhlIGJhY2t1cAogICAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluamVjdGVkU2VjdGlvbiAmJiAhZG9jdW1lbnQuYm9keS5jb250YWlucyhpbmplY3RlZFNlY3Rpb24pICYmIGJhY2t1cENsb25lICYmIHBhcmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJhY2t1cENsb25lLCBwYXJlbnQuZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICBpbmplY3RlZFNlY3Rpb24gPSBiYWNrdXBDbG9uZTsKICAgICAgICAgICAgICAgIGJhY2t1cENsb25lID0gYmFja3VwQ2xvbmUuY2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgICAgaW5qZWN0ZWRTZWN0aW9uLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgICAgIGluaXRTZWxlY3RzSW5TZWN0aW9uKGluamVjdGVkU2VjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHBhcmVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogc2F2ZSB0ZXh0IGZpZWxkcyB0byBXQyBzZXNzaW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gc2F2ZUZpZWxkc1RvU2Vzc2lvbihzeW5jKSB7CiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3NhdmVfZmllbGRzJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIGNmZy5ub25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaXZpbGl0eScsIHZhbCgnYWZsX2NpdmlsaXR5JykpOwogICAgICAgIGZkLmFwcGVuZCgnbGVhcm5lcl9sYXN0X25hbWUnLCB2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2xlYXJuZXJfZmlyc3RfbmFtZScsIHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2JpcnRoX2RhdGUnLCB2YWwoJ2FmbF9iaXJ0aF9kYXRlJykpOwogICAgICAgIGZkLmFwcGVuZCgnYmlydGhfY2l0eScsIHZhbCgnYWZsX2JpcnRoX2NpdHknKSk7CiAgICAgICAgZmQuYXBwZW5kKCdiaXJ0aF9jb3VudHJ5JywgdmFsKCdhZmxfYmlydGhfY291bnRyeScpKTsKICAgICAgICBmZC5hcHBlbmQoJ2NpdGl6ZW5zaGlwJywgdmFsKCdhZmxfY2l0aXplbnNoaXAnKSk7CiAgICAgICAgZmQuYXBwZW5kKCdtb3RoZXJ0b25ndWUnLCB2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSk7CiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgY2ZnLmFqYXhVcmwsICFzeW5jKTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVib3VuY2VkU2F2ZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoc2F2ZVRpbWVyKTsKICAgICAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2F2ZUZpZWxkc1RvU2Vzc2lvbihmYWxzZSk7IH0sIDQwMCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQUpBWDogZmlsZSB1cGxvYWQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBoYW5kbGVGaWxlVXBsb2FkKCkgewogICAgICAgIGxldCBpbnB1dCA9ICQoJ2FmbF9jbmlfZmlsZScpOwogICAgICAgIGlmICghaW5wdXQgfHwgIWlucHV0LmZpbGVzIHx8ICFpbnB1dC5maWxlc1swXSkgeyByZXR1cm47IH0KCiAgICAgICAgbGV0IGZpbGUgPSBpbnB1dC5maWxlc1swXTsKICAgICAgICBsZXQgc3RhdHVzID0gJCgnYWZsLXVwbG9hZC1zdGF0dXMnKTsKICAgICAgICBsZXQgZmlsZU5hbWUgPSAkKCdhZmwtZmlsZS1uYW1lJyk7CiAgICAgICAgbGV0IGRvY1R5cGUgPSB2YWwoJ2FmbF9jbmlfdHlwZScpIHx8ICdjbmknOwoKICAgICAgICBpZiAoc3RhdHVzKSB7IHN0YXR1cy50ZXh0Q29udGVudCA9IHQoJ3VwbG9hZGluZycsICdVcGxvYWRpbmfigKYnKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyc7IH0KICAgICAgICBpZiAoZmlsZU5hbWUpIHsgZmlsZU5hbWUudGV4dENvbnRlbnQgPSBmaWxlLm5hbWU7IH0KCiAgICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAnYWZsX2NoZWNrb3V0X3VwbG9hZF9jbmknKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgY2ZnLm5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ2FmbF9jaGVja291dF9maWxlJywgZmlsZSk7CiAgICAgICAgZmQuYXBwZW5kKCdkb2NfdHlwZScsIGRvY1R5cGUpOwoKICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCBjZmcuYWpheFVybCwgdHJ1ZSk7CiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGxldCByZXNwID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgIGlmIChyZXNwLnN1Y2Nlc3MgJiYgcmVzcC5kYXRhICYmIHJlc3AuZGF0YS5hdHRhY2htZW50X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgICAgICAgICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gcmVzcC5kYXRhLmF0dGFjaG1lbnRfaWQ7IH0KICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yKCdhZmwtY25pLWVycm9yJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyTICcgKyB0KCdmaWxlU2F2ZWQnLCAnRmlsZSBzYXZlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLW9rJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxldCBtc2cgPSAocmVzcC5kYXRhICYmIHJlc3AuZGF0YS5tZXNzYWdlKSB8fCB0KCd1cGxvYWRFcnJvcicsICdVcGxvYWQgZXJyb3IuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyBtc2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXR1cykgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAn4pyXICcgKyB0KCdpbnZhbGlkUmVzcG9uc2UnLCAnSW52YWxpZCByZXNwb25zZS4nKTsgc3RhdHVzLmNsYXNzTmFtZSA9ICdhZmwtdXBsb2FkLXN0YXR1cyBhZmwtdXBsb2FkLWVycic7IH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KclyAnICsgdCgnbmV0d29ya0Vycm9yJywgJ05ldHdvcmsgZXJyb3IuJyk7IHN0YXR1cy5jbGFzc05hbWUgPSAnYWZsLXVwbG9hZC1zdGF0dXMgYWZsLXVwbG9hZC1lcnInOyB9CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChmZCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gIlJlcGxhY2UiIGJ1dHRvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlcGxhY2UoKSB7CiAgICAgICAgbGV0IGV4aXN0aW5nID0gJCgnYWZsLWV4aXN0aW5nLWZpbGUnKTsKICAgICAgICBsZXQgdXBsb2FkID0gJCgnYWZsLXVwbG9hZC1maWVsZCcpOwogICAgICAgIGlmIChleGlzdGluZykgeyBleGlzdGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9CiAgICAgICAgaWYgKHVwbG9hZCkgeyB1cGxvYWQuc3R5bGUuZGlzcGxheSA9ICcnOyB9CiAgICAgICAgbGV0IGhpZGRlbiA9ICQoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpOwogICAgICAgIGlmIChoaWRkZW4pIHsgaGlkZGVuLnZhbHVlID0gJyc7IH0KICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBEaXNwYXRjaCB0byBXQyBTdG9yZSAoYmVzdC1lZmZvcnQsIGZvciBleHRlbnNpb25zIHBheWxvYWQpCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZGlzcGF0Y2hUb1N0b3JlKCkgewogICAgICAgIGlmICghd2luZG93LndwIHx8ICF3aW5kb3cud3AuZGF0YSkgeyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgZCA9IHdpbmRvdy53cC5kYXRhLmRpc3BhdGNoKCd3Yy9zdG9yZS9jaGVja291dCcpOwogICAgICAgICAgICBpZiAoIWQgfHwgdHlwZW9mIGQuc2V0RXh0ZW5zaW9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm47IH0KICAgICAgICAgICAgZC5zZXRFeHRlbnNpb25EYXRhKGNmZy5zdG9yZU5zIHx8ICdhZmwtY2hlY2tvdXQnLCB7CiAgICAgICAgICAgICAgICBjbmlfYXR0YWNobWVudF9pZDogcGFyc2VJbnQodmFsKCdhZmxfY25pX2F0dGFjaG1lbnRfaWQnKSwgMTApIHx8IDAsCiAgICAgICAgICAgICAgICBjaXZpbGl0eTogU3RyaW5nKHZhbCgnYWZsX2NpdmlsaXR5JykgfHwgJycpLAogICAgICAgICAgICAgICAgbGVhcm5lcl9sYXN0X25hbWU6IFN0cmluZyh2YWwoJ2FmbF9sZWFybmVyX2xhc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGxlYXJuZXJfZmlyc3RfbmFtZTogU3RyaW5nKHZhbCgnYWZsX2xlYXJuZXJfZmlyc3RfbmFtZScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGJpcnRoX2RhdGU6IFN0cmluZyh2YWwoJ2FmbF9iaXJ0aF9kYXRlJykgfHwgJycpLAogICAgICAgICAgICAgICAgYmlydGhfY2l0eTogU3RyaW5nKHZhbCgnYWZsX2JpcnRoX2NpdHknKSB8fCAnJyksCiAgICAgICAgICAgICAgICBiaXJ0aF9jb3VudHJ5OiBTdHJpbmcodmFsKCdhZmxfYmlydGhfY291bnRyeScpIHx8ICcnKSwKICAgICAgICAgICAgICAgIGNpdGl6ZW5zaGlwOiBTdHJpbmcodmFsKCdhZmxfY2l0aXplbnNoaXAnKSB8fCAnJyksCiAgICAgICAgICAgICAgICBtb3RoZXJ0b25ndWU6IFN0cmluZyh2YWwoJ2FmbF9tb3RoZXJ0b25ndWUnKSB8fCAnJyksCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm8tb3AgKi8gfQogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZhbGlkYXRpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBzaG93RXJyb3IoaWQsIG1zZykgewogICAgICAgIGxldCBlbCA9ICQoaWQpOwogICAgICAgIGlmIChlbCkgeyBlbC50ZXh0Q29udGVudCA9IG1zZzsgZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQpIHsKICAgICAgICBsZXQgZWwgPSAkKGlkKTsKICAgICAgICBpZiAoZWwpIHsgZWwuc3R5bGUuZGlzcGxheSA9ICcnOyBlbC50ZXh0Q29udGVudCA9ICcnOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdmFsaWRhdGVBbGwoKSB7CiAgICAgICAgbGV0IG9rID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFwYXJzZUludCh2YWwoJ2FmbF9jbmlfYXR0YWNobWVudF9pZCcpLCAxMCkpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtY25pLWVycm9yJywgdCgnaWREb2N1bWVudFJlcXVpcmVkJywgJ1BsZWFzZSB1cGxvYWQgeW91ciBpZGVudGl0eSBkb2N1bWVudC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWNuaS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbGVhcm5lcl9sYXN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWxhc3QtbmFtZS1lcnJvcicsIHQoJ2xlYXJuZXJMYXN0TmFtZVJlcXVpcmVkJywgIkxlYXJuZXIncyAvIGNhbmRpZGF0ZSdzIGxhc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItbGFzdC1uYW1lLWVycm9yJyk7IH0KCiAgICAgICAgaWYgKCF2YWwoJ2FmbF9sZWFybmVyX2ZpcnN0X25hbWUnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1sZWFybmVyLWZpcnN0LW5hbWUtZXJyb3InLCB0KCdsZWFybmVyRmlyc3ROYW1lUmVxdWlyZWQnLCAiTGVhcm5lcidzIC8gY2FuZGlkYXRlJ3MgZmlyc3QgbmFtZSBpcyByZXF1aXJlZC4iKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLWxlYXJuZXItZmlyc3QtbmFtZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfZGF0ZScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWRhdGUtZXJyb3InLCB0KCdiaXJ0aERhdGVSZXF1aXJlZCcsICdEYXRlIG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtZGF0ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY2l0eScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNpdHktZXJyb3InLCB0KCdiaXJ0aENpdHlSZXF1aXJlZCcsICdDaXR5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY2l0eS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfYmlydGhfY291bnRyeScpKSB7CiAgICAgICAgICAgIHNob3dFcnJvcignYWZsLWJpcnRoLWNvdW50cnktZXJyb3InLCB0KCdiaXJ0aENvdW50cnlSZXF1aXJlZCcsICdDb3VudHJ5IG9mIGJpcnRoIGlzIHJlcXVpcmVkLicpKTsgb2sgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgeyBjbGVhckVycm9yKCdhZmwtYmlydGgtY291bnRyeS1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfY2l0aXplbnNoaXAnKSkgewogICAgICAgICAgICBzaG93RXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicsIHQoJ2NpdGl6ZW5zaGlwUmVxdWlyZWQnLCAnQ2l0aXplbnNoaXAgaXMgcmVxdWlyZWQuJykpOyBvayA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7IGNsZWFyRXJyb3IoJ2FmbC1jaXRpemVuc2hpcC1lcnJvcicpOyB9CgogICAgICAgIGlmICghdmFsKCdhZmxfbW90aGVydG9uZ3VlJykpIHsKICAgICAgICAgICAgc2hvd0Vycm9yKCdhZmwtbW90aGVydG9uZ3VlLWVycm9yJywgdCgnbW90aGVyVG9uZ3VlUmVxdWlyZWQnLCAnTW90aGVyIHRvbmd1ZSBpcyByZXF1aXJlZC4nKSk7IG9rID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsgY2xlYXJFcnJvcignYWZsLW1vdGhlcnRvbmd1ZS1lcnJvcicpOyB9CgogICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgbGV0IHMgPSAkKCdhZmwtY25pLXNlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHMpIHsgcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9rOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEludGVyY2VwdCBQbGFjZSBPcmRlcgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGludGVyY2VwdFBsYWNlT3JkZXIoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBsZXQgYnRuID0gZS50YXJnZXQuY2xvc2VzdCgKICAgICAgICAgICAgICAgICcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24sICcgKwoJCQkJJ1tkYXRhLXRlc3RpZD0iY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uIl0sICcgKwoJCQkJJy53cC1ibG9jay13b29jb21tZXJjZS1jaGVja291dC1wYXltZW50LWJsb2NrIGJ1dHRvblt0eXBlPSJzdWJtaXQiXScKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCFidG4pIHsgcmV0dXJuOyB9CgogICAgICAgICAgICBzYXZlRmllbGRzVG9TZXNzaW9uKHRydWUpOwogICAgICAgICAgICBkaXNwYXRjaFRvU3RvcmUoKTsKCiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGwoKSkgewogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEV2ZW50cwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGZ1bmN0aW9uIGJpbmRFdmVudHMoKSB7CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09PSAnYWZsX2NuaV9maWxlJykgeyBoYW5kbGVGaWxlVXBsb2FkKCk7IH0KICAgICAgICAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMgJiYgZS50YXJnZXQubWF0Y2hlcygnLmFmbC1waS1pbnB1dCcpKSB7IGRlYm91bmNlZFNhdmUoKTsgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlLnRhcmdldC5tYXRjaGVzICYmIGUudGFyZ2V0Lm1hdGNoZXMoJy5hZmwtcGktaW5wdXQnKSkgeyBkZWJvdW5jZWRTYXZlKCk7IH0KICAgICAgICB9KTsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT09ICdhZmwtcmVwbGFjZS1idG4nIHx8IChlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJyNhZmwtcmVwbGFjZS1idG4nKSkpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlcGxhY2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGxldCBidG4gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5hZmwtY2l2aWxpdHktb3B0Jyk7CiAgICAgICAgICAgIGlmICghYnRuKSB7IHJldHVybjsgfQogICAgICAgICAgICBsZXQgdGFyZ2V0SWQgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpOwogICAgICAgICAgICBsZXQgaW5wdXQgPSB0YXJnZXRJZCA/ICQodGFyZ2V0SWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKGlucHV0KSB7IGlucHV0LnZhbHVlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnOyB9CiAgICAgICAgICAgIGxldCBncm91cCA9IGJ0bi5jbG9zZXN0ICYmIGJ0bi5jbG9zZXN0KCcuYWZsLWNpdmlsaXR5LWdyb3VwJyk7CiAgICAgICAgICAgIGlmIChncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmFmbC1jaXZpbGl0eS1vcHQnKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgICAgICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCdhZmwtY2l2aWxpdHktb3B0LS1hY3RpdmUnLCBiID09PSBidG4pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVib3VuY2VkU2F2ZSgpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEJvb3QKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbiBib290KGNoZWNrb3V0RWwpIHsKICAgICAgICBpbmplY3RTZWN0aW9uKGNoZWNrb3V0RWwpOwogICAgICAgIHNhdmVGaWVsZHNUb1Nlc3Npb24oZmFsc2UpOwogICAgICAgIGludGVyY2VwdFBsYWNlT3JkZXIoKTsKICAgIH0KCiAgICB3YWl0Rm9yQ2hlY2tvdXQoYm9vdCk7CiAgICBiaW5kRXZlbnRzKCk7Cn0pKCk7Cn0pOw==","details":["click"]},{"id":1779787,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"MOUSE","source":"https://www.aflyon.org/","details":["dblclick","click","mousemove","mouseup","mousedown"]},{"id":1779788,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"SENSOR","source":"https://www.youtube.com/s/_/ytembeds/_/js/k=ytembeds.base.en_US.GRsEQlAF6LQ.2021.O/ck=ytembeds.base.qzDvqMbGmKI.L.W.O/am=AAAAQA/d=1/exm=base,root/excm=base,root/ed=1/br=1/rs=AGKMywESyf9Y9X87KVWSKj1IXnBDyFLpDQ/m=r78Drb","details":["orientationchange"]},{"id":1779789,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"behaviour","label":"SENSOR","source":"https://www.youtube.com/s/player/8ab5c328/player_embed_es6.vflset/en_US/base.js","details":["orientationchange"]}],"cookies":[{"id":1067767,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"_ga","domain":"aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2027-11-05T18:50:15.241Z","secure":false,"httpOnly":false,"sameSite":null},{"id":1067768,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"_ga_BR9S9FX41S","domain":"aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2027-11-05T18:50:15.241Z","secure":false,"httpOnly":false,"sameSite":null},{"id":1067769,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"moove_gdpr_popup","domain":"www.aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2027-10-01T18:49:59.000Z","secure":false,"httpOnly":false,"sameSite":"Lax"},{"id":1067770,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"_fbp","domain":"aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2026-12-30T18:50:15.000Z","secure":false,"httpOnly":false,"sameSite":"Lax"},{"id":1067771,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"_gcl_au","domain":"aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2026-12-30T18:50:09.000Z","secure":false,"httpOnly":false,"sameSite":null},{"id":1067772,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_session","domain":"aflyon.org","path":"/","party":"first","session":false,"expiresAt":"2026-10-01T19:20:12.000Z","secure":false,"httpOnly":false,"sameSite":null},{"id":1067773,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_current","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067774,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_current_add","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067775,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_first","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067776,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_first_add","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067777,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_migrations","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067778,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"sbjs_udata","domain":"aflyon.org","path":"/","party":"first","session":true,"expiresAt":null,"secure":false,"httpOnly":false,"sameSite":null},{"id":1067779,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"_GRECAPTCHA","domain":"www.google.com","path":"/recaptcha","party":"third","session":false,"expiresAt":"2027-03-30T18:50:13.355Z","secure":true,"httpOnly":true,"sameSite":"None"},{"id":1067780,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"VISITOR_INFO1_LIVE","domain":"youtube.com","path":"/","party":"third","session":false,"expiresAt":"2027-03-30T18:50:05.272Z","secure":true,"httpOnly":true,"sameSite":"None"},{"id":1067781,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"VISITOR_PRIVACY_METADATA","domain":"youtube.com","path":"/","party":"third","session":false,"expiresAt":"2027-03-30T18:50:05.272Z","secure":true,"httpOnly":true,"sameSite":"None"},{"id":1067782,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"__Secure-ROLLOUT_TOKEN","domain":"youtube.com","path":"/","party":"third","session":false,"expiresAt":"2027-03-30T18:50:00.337Z","secure":true,"httpOnly":true,"sameSite":"None"},{"id":1067783,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"__Secure-YNID","domain":"youtube.com","path":"/","party":"third","session":false,"expiresAt":"2027-03-30T18:49:55.337Z","secure":true,"httpOnly":true,"sameSite":"None"},{"id":1067784,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","name":"YSC","domain":"youtube.com","path":"/","party":"third","session":true,"expiresAt":null,"secure":true,"httpOnly":true,"sameSite":"None"}],"software":[],"platforms":[{"id":136541,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","kind":"cms","name":"WordPress","evidence":"/wp/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0","source":"path"}],"offeredLanguages":[{"id":64154,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","tag":"en"},{"id":64155,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","tag":"es"},{"id":64156,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","tag":"fr"}],"resources":[{"id":2265558,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"first","kind":"image","requests":40,"bytes":3853477},{"id":2265559,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"third","kind":"script","requests":21,"bytes":2272716},{"id":2265560,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"first","kind":"script","requests":124,"bytes":1398830},{"id":2265561,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"first","kind":"font","requests":24,"bytes":526201},{"id":2265562,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"first","kind":"style","requests":40,"bytes":207757},{"id":2265563,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"first","kind":"document","requests":6,"bytes":153526},{"id":2265564,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"third","kind":"image","requests":17,"bytes":101539},{"id":2265565,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"third","kind":"document","requests":8,"bytes":3378},{"id":2265566,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","party":"third","kind":"data","requests":13,"bytes":1281}],"dependencies":[{"id":1333195,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.gstatic.com","requests":3,"bytes":1066926,"kinds":["script"],"embedded":false},{"id":1333196,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.googletagmanager.com","requests":4,"bytes":681923,"kinds":["script"],"embedded":false},{"id":1333197,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"connect.facebook.net","requests":4,"bytes":414432,"kinds":["script"],"embedded":false},{"id":1333198,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"lh3.googleusercontent.com","requests":12,"bytes":96021,"kinds":["image"],"embedded":false},{"id":1333199,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"cdn.trustindex.io","requests":7,"bytes":57244,"kinds":["script","image"],"embedded":false},{"id":1333200,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"scripts.clarity.ms","requests":2,"bytes":52221,"kinds":["script"],"embedded":false},{"id":1333201,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.google.com","requests":16,"bytes":3361,"kinds":["document","script","data"],"embedded":true},{"id":1333202,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.youtube.com","requests":3,"bytes":3262,"kinds":["document"],"embedded":true},{"id":1333203,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.clarity.ms","requests":2,"bytes":2357,"kinds":["script"],"embedded":false},{"id":1333204,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"region1.google-analytics.com","requests":1,"bytes":549,"kinds":["data"],"embedded":false},{"id":1333205,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"k.clarity.ms","requests":1,"bytes":278,"kinds":["data"],"embedded":false},{"id":1333206,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"y.clarity.ms","requests":1,"bytes":278,"kinds":["data"],"embedded":false},{"id":1333207,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"www.facebook.com","requests":2,"bytes":40,"kinds":["document","image"],"embedded":true},{"id":1333208,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","host":"ad.doubleclick.net","requests":1,"bytes":22,"kinds":["data"],"embedded":false}],"pixels":[{"id":25187,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","vendor":"facebook","eventName":"PageView","eventDescription":"This is the default pixel tracking page visits. For example - A person lands on your website pages.","standard":true,"pageUrl":"https://www.aflyon.org/es/","matchParams":[],"dataParams":[],"requests":1}],"headers":[{"id":719947,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","name":"alt-svc","value":"h3=\":443\"; ma=86400"},{"id":719948,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","name":"server","value":"nginx"},{"id":719949,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","name":"strict-transport-security","value":"max-age=31536000"}],"identifiers":[{"id":135724,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","vendor":"google_analytics","value":"G-BR9S9FX41S","requests":3},{"id":135725,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","vendor":"clarity","value":"gxpri15icx","requests":2},{"id":135726,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","vendor":"google_tag_manager","value":"GTM-MP2RFPB","requests":2},{"id":135727,"scanId":"63703531-eaa1-4f36-9b47-c6544c1a2006","vendor":"facebook","value":"247054889551620","requests":1}],"domain":{"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","domain":"aflyon.org","dnssec":"unsigned","ipv6":false,"ipv6Reachable":null,"ipv6Reason":"no-aaaa","spf":true,"dmarcPolicy":"none","dnsError":null,"tlsProtocol":"TLSv1.3","tlsCipher":"TLS_AES_256_GCM_SHA384","tlsAlpn":"h2","tlsIssuer":"Let's Encrypt","tlsValidFrom":"2026-09-05T13:04:45.000Z","tlsValidTo":"2026-12-04T13:04:44.000Z","tlsAuthorized":true,"tlsError":null,"registrar":null,"registeredAt":null,"expiresAt":null,"holderCountry":null,"rdapSource":"rdap.publicinterestregistry.org","rdapError":"réponse 400 du registre","robotsFound":true,"robotsAllows":true,"adsFound":false,"adsPartners":0,"securityFound":false,"securityContact":null,"probedAt":"2026-10-01T18:49:54.361Z","mailProvider":"Mailinblack","dnsProvider":"OVHcloud","tlsAuthority":"Let's Encrypt (ISRG)","tlsAuthorityCountry":"US"},"dns":[{"id":1342959,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","kind":"mx","value":"mx-mibc-fr-01.mailinblack.com","rank":5,"cnameTarget":null,"provider":"Mailinblack"},{"id":1342960,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","kind":"ns","value":"ns14.ovh.net","rank":null,"cnameTarget":null,"provider":"OVHcloud"},{"id":1342961,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","kind":"ns","value":"dns14.ovh.net","rank":null,"cnameTarget":null,"provider":"OVHcloud"},{"id":1342962,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","kind":"spf","value":"spf.mailinblack.com","rank":null,"cnameTarget":null,"provider":"Mailinblack"},{"id":1342963,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","kind":"spf","value":"drakkar15.tilvalhall.fr","rank":null,"cnameTarget":null,"provider":null}],"adsPartners":[],"blocklists":[{"id":2239006,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"Quad9","resolverIp":"9.9.9.9","kind":"security","verdict":"allowed","note":null},{"id":2239007,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"CleanBrowsing Security","resolverIp":"185.228.168.9","kind":"security","verdict":"allowed","note":null},{"id":2239008,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"Comodo Secure","resolverIp":"8.26.56.26","kind":"security","verdict":"unknown","note":"ETIMEOUT"},{"id":2239009,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"OpenDNS","resolverIp":"208.67.222.222","kind":"security","verdict":"unknown","note":"EREFUSED"},{"id":2239010,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"AdGuard","resolverIp":"94.140.14.14","kind":"ads","verdict":"allowed","note":null},{"id":2239011,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"AdGuard Famille","resolverIp":"94.140.14.15","kind":"family","verdict":"allowed","note":null},{"id":2239012,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"Cloudflare Famille","resolverIp":"1.1.1.3","kind":"family","verdict":"allowed","note":null},{"id":2239013,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"CleanBrowsing Famille","resolverIp":"185.228.168.168","kind":"family","verdict":"allowed","note":null},{"id":2239014,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"CleanBrowsing Adulte","resolverIp":"185.228.168.10","kind":"family","verdict":"allowed","note":null},{"id":2239015,"scanId":"23b47f08-f47f-4991-a067-f47d7b7a4f53","resolver":"OpenDNS Famille","resolverIp":"208.67.222.123","kind":"family","verdict":"unknown","note":"EREFUSED"}],"threats":[],"wayback":null,"cnames":[],"reputation":[],"webcompat":{"consulted":false,"rules":0,"updatedAt":null,"flags":[]},"wikidata":{"entities":{"Q380":{"qid":"Q380","label":"Meta","description":"société technologique multinationale américaine","officialWebsite":"https://www.meta.com/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Meta%20Platforms%20Inc.%20logo.svg","tosdrId":null,"influenceWatchId":"for-profit/meta","wikipedia":{"en":"https://en.wikipedia.org/wiki/Meta_Platforms","fr":"https://fr.wikipedia.org/wiki/Meta_(entreprise)"},"parentQid":null,"countryCode":"US","countryLabel":"États-Unis","fetchedAt":"2026-10-18T15:05:41.655Z"},"Q3884":{"qid":"Q3884","label":"Amazon","description":"entreprise américaine spécialisée dans la vente en ligne","officialWebsite":"https://www.amazon.com/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Amazon%202024.svg","tosdrId":"190","influenceWatchId":"for-profit/amazon","wikipedia":{"en":"https://en.wikipedia.org/wiki/Amazon_(company)","fr":"https://fr.wikipedia.org/wiki/Amazon"},"parentQid":null,"countryCode":"US","countryLabel":"États-Unis","fetchedAt":"2026-10-18T15:05:58.006Z"},"Q568183":{"qid":"Q568183","label":"OVHcloud","description":"hébergeur de sites web français","officialWebsite":"https://www.ovhcloud.com/en/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Logo%20OVH.svg","tosdrId":null,"influenceWatchId":null,"wikipedia":{"en":"https://en.wikipedia.org/wiki/OVHcloud","fr":"https://fr.wikipedia.org/wiki/OVHcloud"},"parentQid":null,"countryCode":"FR","countryLabel":"France","fetchedAt":"2026-10-18T15:08:27.232Z"},"Q95":{"qid":"Q95","label":"Google","description":"multinationale américaine spécialisée dans les technologies, filiale d'Alphabet Inc.","officialWebsite":"https://about.google/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Google%202026%20logo.svg","tosdrId":"182","influenceWatchId":"for-profit/google","wikipedia":{"en":"https://en.wikipedia.org/wiki/Google","fr":"https://fr.wikipedia.org/wiki/Google"},"parentQid":"Q20800404","countryCode":"US","countryLabel":"États-Unis","fetchedAt":"2026-10-18T14:59:50.798Z"},"Q20800404":{"qid":"Q20800404","label":"Alphabet Inc.","description":"conglomérat américain","officialWebsite":"https://abc.xyz/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Alphabet%20Inc%20Logo%202015.svg","tosdrId":null,"influenceWatchId":"for-profit/alphabet","wikipedia":{"en":"https://en.wikipedia.org/wiki/Alphabet_Inc.","fr":"https://fr.wikipedia.org/wiki/Alphabet_(entreprise)"},"parentQid":null,"countryCode":"US","countryLabel":"États-Unis","fetchedAt":"2026-10-18T14:59:52.816Z"},"Q2283":{"qid":"Q2283","label":"Microsoft","description":"multinationale informatique américaine","officialWebsite":"https://www.microsoft.com/","image":"http://commons.wikimedia.org/wiki/Special:FilePath/Microsoft%20logo%20%282012%29.svg","tosdrId":null,"influenceWatchId":null,"wikipedia":{"en":"https://en.wikipedia.org/wiki/Microsoft","fr":"https://fr.wikipedia.org/wiki/Microsoft"},"parentQid":null,"countryCode":"US","countryLabel":"États-Unis","fetchedAt":"2026-10-18T15:10:05.847Z"}},"asnToQid":{"8075":"Q2283","15169":"Q95","16276":"Q568183","16509":"Q3884","32934":"Q380"}},"siteMatch":{"qid":null,"confidence":null,"decided":false}}