Socket
Socket
Sign inDemoInstall

@adraffy/ens-normalize

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@adraffy/ens-normalize - npm Package Compare versions

Comparing version 1.6.0 to 1.6.1

2

dist/all.min.js

@@ -1,1 +0,1 @@

function t(t){return 1&t?~t>>1:t>>1}function e(t,e){let A=Array(t);for(let n=0,r=-1;n<t;n++)A[n]=r+=1+e();return A}function A(e,A){let n=Array(e);for(let r=0,o=0;r<e;r++)n[r]=o+=t(A());return n}function n(t,A){let n=e(t(),t),r=t(),o=e(r,t),s=function(t,e){let A=Array(t);for(let n=0;n<t;n++)A[n]=1+e();return A}(r,t);for(let t=0;t<r;t++)for(let e=0;e<s[t];e++)n.push(o[t]+e);return A?n.map((t=>A[t])):n}function r(t,e,n){let r=Array(t).fill().map((()=>[]));for(let o=0;o<e;o++)A(t,n).forEach(((t,e)=>r[e].push(t)));return r}function o(t,e){let A=1+e(),n=e(),o=function(t){let e=[];for(;;){let A=t();if(0==A)break;e.push(A)}return e}(e);return r(o.length,1+t,e).flatMap(((t,e)=>{let[r,...s]=t;return Array(o[e]).fill().map(((t,e)=>{let o=e*n;return[r+e*A,s.map((t=>t+o))]}))}))}function s(t,e){return r(1+e(),1+t,e).map((t=>[t[0],t.slice(1)]))}var l=function(t){let e=0;return()=>t[e++]}(function(t){let e=0;function A(){return t[e++]<<8|t[e++]}let n=A(),r=1,o=[0,1];for(let t=1;t<n;t++)o.push(r+=A());let s=A(),l=e;e+=s;let i=0,c=0;function a(){return 0==i&&(c=c<<8|t[e++],i=8),c>>--i&1}const p=2**31,d=p>>>1,Q=p-1;let f=0;for(let t=0;t<31;t++)f=f<<1|a();let w=[],g=0,B=p;for(;;){let t=Math.floor(((f-g+1)*r-1)/B),e=0,A=n;for(;A-e>1;){let n=e+A>>>1;t<o[n]?A=n:e=n}if(0==e)break;w.push(e);let s=g+Math.floor(B*o[e]/r),l=g+Math.floor(B*o[e+1]/r)-1;for(;0==((s^l)&d);)f=f<<1&Q|a(),s=s<<1&Q,l=l<<1&Q|1;for(;s&~l&536870912;)f=f&d|f<<1&Q>>>1|a(),s=s<<1^d,l=(l^d)<<1|d|1;g=s,B=1+l-s}let C=n-4;return w.map((e=>{switch(e-C){case 3:return C+65792+(t[l++]<<16|t[l++]<<8|t[l++]);case 2:return C+256+(t[l++]<<8|t[l++]);case 1:return C+t[l++];default:return e-1}}))}(Uint8Array.from(atob("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"),(t=>t.charCodeAt(0)))));function i(t){return t.toString(16).toUpperCase()}function c(t){return`{${i(t)}}`}function a(t){return[...t].map((t=>t.codePointAt(0)))}function p(t){return t.filter((t=>65039!=t))}function d(t,e=c){return t.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((t,A,n)=>A?e(A.codePointAt(0)):`&#${n.codePointAt(0)};`))}function Q(t){return t.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(t=>c(t.codePointAt(0))))}function f(t){return/^[\x21-\x7E]+$/gu.test(t)}function w(t,e){let{length:A}=t,n=A-e.length;for(let r=0;0==n&&r<A;r++)n=t[r]-e[r];return n}const g=n(l).sort(((t,e)=>t-e)),B=new Set(g),C=new Set(n(l)),u=function(t){let e=[];for(;;){let A=t();if(0==A)break;e.push(o(A,t))}for(;;){let A=t()-1;if(A<0)break;e.push(s(A,t))}return Object.fromEntries(e.flat())}(l),E=new Set(n(l,g)),D=function(t){let e=n(t).sort(((t,e)=>t-e));return function A(){let r=[];for(;;){let o=n(t,e);if(0==o.length)break;r.push({set:new Set(o),node:A()})}r.sort(((t,e)=>e.set.size-t.set.size));let o=t(),s=o%3;o=o/3|0;let l=!!(1&o);return o>>=1,{branches:r,valid:s,fe0f:l,save:1==o,check:2==o}}()}(l),h=new Set(n(l,g));function k(t){for(let e of t.split("."))try{let t=a(e);for(let e=t.lastIndexOf(95)-1;e>=0;e--)if(95!==t[e])throw new Error("underscore only allowed at start");if(t.length>=4&&45===t[2]&&45===t[3]&&t.every((t=>t<128)))throw new Error("invalid label extension");let A=a(I(e,(()=>[65039])).normalize("NFD"));for(let t=0,e=-1;t<A.length;t++)if(E.has(A[t])){if(0==t)throw new Error("leading combining mark");if(t==e)throw new Error(`adjacent combining marks "${String.fromCodePoint(...A.slice(t-2,t+1))}"`);if(65039==A[t-1])throw new Error("emoji + combining mark");e=t+1}}catch(t){throw new Error(`Invalid label "${e}": ${t.message}`)}return t}function M(t){return U(I(t,(t=>t.filter((t=>65039!=t)))))}function x(t){return k(M(t))}function m(t){return U(I(t,(t=>t)))}function U(t){return t.normalize("NFC")}function I(t,e){let A=a(t).reverse(),n=[];for(;A.length;){let t=K(A);if(t){n.push(...e(t));continue}let r=A.pop();if(B.has(r)){n.push(r);continue}if(C.has(r))continue;let o=u[r];if(!o)throw new Error(`Disallowed codepoint: 0x${r.toString(16).toUpperCase()}`);n.push(...o)}return String.fromCodePoint(...n)}function K(t,e){let A,n,r=D,o=[],s=t.length;for(e&&(e.length=0);s;){let l=t[--s];if(r=r.branches.find((t=>t.set.has(l)))?.node,!r)break;if(r.save)n=l;else if(r.check&&l===n)break;o.push(l),r.fe0f&&(o.push(65039),s>0&&65039==t[s-1]&&s--),r.valid&&(A=o.slice(),2==r.valid&&A.splice(1,1),e&&e.push(...t.slice(s).reverse()),t.length=s)}return A}function F(t){let e=a(t).reverse(),A=[],n=[];for(;e.length;){let t=K(e,A);if(t)n.push({type:"emoji",emoji:t,input:A.slice(),cps:p(t)});else{let t=e.pop();if(46===t)n.push({type:"stop"});else if(B.has(t))n.push({type:"valid",cps:[t]});else if(C.has(t))n.push({type:"ignored",cp:t});else{let e=u[t];e?n.push({type:"mapped",cp:t,cps:e.slice()}):n.push({type:"disallowed",cp:t})}}}for(let t=0,e=-1;t<n.length;t++){let A=n[t];if(J(A.type))if(R(A.cps)){let A=t+1;for(let t=A;t<n.length;t++){let{type:e,cps:r}=n[t];if(J(e)){if(!R(r))break;A=t+1}else if("ignored"!==e)break}e<0&&(e=t);let r=n.slice(e,A),o=r.flatMap((t=>J(t.type)?t.cps:[])),s=String.fromCodePoint(...o),l=U(s);s===l?t=A-1:(n.splice(e,A-e,{type:"nfc",input:o,cps:a(l),tokens:T(r)}),t=e),e=-1}else e=t;else"emoji"===A.type&&(e=-1)}return T(n)}function J(t){return"valid"===t||"mapped"===t}function R(t){return t.some((t=>h.has(t)))}function T(t){for(let e=0;e<t.length;e++)if("valid"===t[e].type){let A=e+1;for(;A<t.length&&"valid"===t[A].type;)A++;t.splice(e,A-e,{type:"valid",cps:t.slice(e,A).flatMap((t=>t.cps))})}return t}function b(t){return t<26?97+t:22+t}function y(t,e){let A=t-e;return A<=0?1:A>=26?26:A}function L(t,e,A){t=Math.floor(t/(A?700:2)),t+=Math.floor(t/e);let n=0;for(;t>455;)t=Math.floor(t/35),n+=36;return n+Math.floor(36*t/(t+38))}const P=new Set(a("-.0123456789abcdefghijklmnopqrstuvwxyz"));function V(t){if((t=t.split(".").map((t=>{if(!t)return"";let e=t;try{let t=a(e),A=function(t){if(!Array.isArray(t)||!t.every((t=>Number.isSafeInteger(t)&&t>=0&&t<=1114111)))throw new TypeError("expected array of Unicode codepoints");let e=t.filter((t=>t<128)),A=e.length;if(A==t.length)return t;A&&e.push(45);let n=128,r=72,o=0,s=A;for(;s<t.length;){let l=t.reduce(((t,e)=>e>=n&&e<t?e:t),1114111);o+=(l-n)*(s+1);for(let n of t)if(n<l)o++;else if(n==l){let t=o;for(let A=36;;A+=36){let n=y(A,r),o=t-n;if(o<0)break;let s=36-n;e.push(b(n+o%s)),t=Math.floor(o/s)}e.push(b(t)),r=L(o,s+1,s==A),o=0,s++}o++,n=l+1}return e}(t);for(let t of A)if(!P.has(t))throw new Error(`invalid ASCII: "${Q(String.fromCodePoint(t))}"`);if(A===t){if(e.startsWith("xn--"))throw new Error("punycode literal");if("--"===e.slice(2,4))throw new Error("invalid label extension");if(e.startsWith("-"))throw new Error("leading hyphen");if(e.endsWith("-"))throw new Error("trailing hyphen")}else e="xn--"+String.fromCodePoint(...A);if(e.length>63)throw new Error(`too long: ${e.length} > 63`)}catch(e){throw new Error(`Invalid label "${Q(t)}": ${e.message}`)}return e})).join(".")).length>253)throw new Error(`Name too long: ${t.length} > 253`);return t}function N(t){return d(String.fromCodePoint(...t),(t=>8204==t?'<span class="mod zwj">ZWNJ</span>':8205==t?'<span class="mod zwj">ZWJ</span>':`<code>${i(t)}</code>`))}function X(t){return`Hex: 0x${t.map(i).join(" ")}\nDec: ${t.join(" ")}`}function j(){let t=document.createElement("span");return t.classList.add("arrow"),t.innerHTML="➔",t}function S(t,e){let A=document.createElement("div");return A.classList.add("tokens"),e&&(t=t.flatMap((t=>"nfc"===t.type?t.tokens:t))),A.append(...t.flatMap((t=>{let A;if("emoji"===t.type){let n=e?t.input:t.cps;A=document.createElement("a"),A.href=`https://emojipedia.org/${String.fromCodePoint(...t.emoji)}`,A.classList.add("glyph"),A.append(...n.map(((t,e)=>{let A=document.createElement("span");if(8205==t)A.classList.add("mod","zwj"),A.innerHTML="ZWJ";else if(65039==t)A.classList.add("mod","dropped","style"),A.innerHTML="FE0F";else if(8419==t)A.classList.add("mod","keycap"),A.innerHTML="Keycap";else if(t>=917536&&t<=917631){t-=917504;let e=String.fromCodePoint(t);127===t?(A.classList.add("mod"),A.innerHTML="TagEnd"):(f(e)?A.innerHTML=e:(A=document.createElement("code"),A.innerHTML=i(t)),A.classList.add("mod","tag"))}else A.classList.add("emoji"),A.innerHTML=String.fromCodePoint(t);return A})))}else if("nfc"===t.type){A=document.createElement("div"),A.classList.add("nfc");let e=S(t.tokens,!1);e.classList.add("before");let n=document.createElement("div");n.classList.add("valid"),n.innerHTML=N(t.cps),n.title=X(t.cps),A.append(e,j(),n)}else if(A=document.createElement("div"),"valid"===t.type)A.classList.add("valid"),A.innerHTML=N(t.cps),A.title=X(t.cps);else if("mapped"===t.type){A.classList.add("mapped");let n=document.createElement("span");n.classList.add("before"),n.innerHTML=N([t.cp]),n.title=X([t.cp]),A.append(n),e||A.append(j(),...t.cps.map((t=>{let e=document.createElement("span");return e.innerHTML=N([t]),e.title=X([t]),e})))}else if("ignored"===t.type)A=document.createElement("code"),A.innerHTML=i(t.cp),A.title=X([t.cp]),A.classList.add("ignored");else if("disallowed"===t.type)A.classList.add("disallowed"),A.innerHTML=N([t.cp]),A.title=X([t.cp]);else{if("stop"!==t.type)throw new TypeError(`unknown token type: ${t.type}`);A.classList.add("stop"),A.innerHTML="."}return A}))),A}function G(){let t=document.createElement("style");t.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 5px;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(t)}export{w as compare_arrays,V as dns_from_normalized_ens,S as dom_from_tokens,m as ens_beautify,x as ens_normalize,M as ens_normalize_fragment,k as ens_normalize_post_check,F as ens_tokenize,d as escape_for_html,Q as escape_unicode,a as explode_cp,p as filter_fe0f,i as hex_cp,f as is_printable_ascii,c as quote_cp,G as use_default_style};
function t(t){return 1&t?~t>>1:t>>1}function e(t,e){let A=Array(t);for(let n=0,r=-1;n<t;n++)A[n]=r+=1+e();return A}function A(e,A){let n=Array(e);for(let r=0,o=0;r<e;r++)n[r]=o+=t(A());return n}function n(t,A){let n=e(t(),t),r=t(),o=e(r,t),s=function(t,e){let A=Array(t);for(let n=0;n<t;n++)A[n]=1+e();return A}(r,t);for(let t=0;t<r;t++)for(let e=0;e<s[t];e++)n.push(o[t]+e);return A?n.map((t=>A[t])):n}function r(t,e,n){let r=Array(t).fill().map((()=>[]));for(let o=0;o<e;o++)A(t,n).forEach(((t,e)=>r[e].push(t)));return r}function o(t,e){let A=1+e(),n=e(),o=function(t){let e=[];for(;;){let A=t();if(0==A)break;e.push(A)}return e}(e);return r(o.length,1+t,e).flatMap(((t,e)=>{let[r,...s]=t;return Array(o[e]).fill().map(((t,e)=>{let o=e*n;return[r+e*A,s.map((t=>t+o))]}))}))}function s(t,e){return r(1+e(),1+t,e).map((t=>[t[0],t.slice(1)]))}var l=function(t){let e=0;return()=>t[e++]}(function(t){let e=0;function A(){return t[e++]<<8|t[e++]}let n=A(),r=1,o=[0,1];for(let t=1;t<n;t++)o.push(r+=A());let s=A(),l=e;e+=s;let i=0,c=0;function a(){return 0==i&&(c=c<<8|t[e++],i=8),c>>--i&1}const p=2**31,d=p>>>1,Q=p-1;let f=0;for(let t=0;t<31;t++)f=f<<1|a();let w=[],g=0,B=p;for(;;){let t=Math.floor(((f-g+1)*r-1)/B),e=0,A=n;for(;A-e>1;){let n=e+A>>>1;t<o[n]?A=n:e=n}if(0==e)break;w.push(e);let s=g+Math.floor(B*o[e]/r),l=g+Math.floor(B*o[e+1]/r)-1;for(;0==((s^l)&d);)f=f<<1&Q|a(),s=s<<1&Q,l=l<<1&Q|1;for(;s&~l&536870912;)f=f&d|f<<1&Q>>>1|a(),s=s<<1^d,l=(l^d)<<1|d|1;g=s,B=1+l-s}let C=n-4;return w.map((e=>{switch(e-C){case 3:return C+65792+(t[l++]<<16|t[l++]<<8|t[l++]);case 2:return C+256+(t[l++]<<8|t[l++]);case 1:return C+t[l++];default:return e-1}}))}(Uint8Array.from(atob("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"),(t=>t.charCodeAt(0)))));function i(t){return t.toString(16).toUpperCase()}function c(t){return`{${i(t)}}`}function a(t){return[...t].map((t=>t.codePointAt(0)))}function p(t,e=c){return t.replace(/(?:([\x00-\x20\x7F\xA0\s\u200C\u200D\u{E0020}-\u{E007F}])|([^\x21-\x25\x27-\x3B\x3D\x3F-\x7E]))/gu,((t,A,n)=>A?e(A.codePointAt(0)):`&#${n.codePointAt(0)};`))}function d(t){return t.replace(/[^\x21\x23-\x7A\x7C\x7E]/gu,(t=>c(t.codePointAt(0))))}function Q(t){return/^[\x21-\x7E]+$/gu.test(t)}function f(t,e){let{length:A}=t,n=A-e.length;for(let r=0;0==n&&r<A;r++)n=t[r]-e[r];return n}const w=n(l).sort(((t,e)=>t-e)),g=new Set(w),B=new Set(n(l)),C=function(t){let e=[];for(;;){let A=t();if(0==A)break;e.push(o(A,t))}for(;;){let A=t()-1;if(A<0)break;e.push(s(A,t))}return Object.fromEntries(e.flat())}(l),u=new Set(n(l,w)),E=function(t){let e=n(t).sort(((t,e)=>t-e));return function A(){let r=[];for(;;){let o=n(t,e);if(0==o.length)break;r.push({set:new Set(o),node:A()})}r.sort(((t,e)=>e.set.size-t.set.size));let o=t(),s=o%3;o=o/3|0;let l=!!(1&o);return o>>=1,{branches:r,valid:s,fe0f:l,save:1==o,check:2==o}}()}(l),D=new Set(n(l,w));function h(t){for(let e of t.split("."))try{let t=a(e);for(let e=t.lastIndexOf(95)-1;e>=0;e--)if(95!==t[e])throw new Error("underscore only allowed at start");if(t.length>=4&&45===t[2]&&45===t[3]&&t.every((t=>t<128)))throw new Error("invalid label extension");let A=a(I(e,(()=>[65039])).normalize("NFD"));for(let t=0,e=-1;t<A.length;t++)if(u.has(A[t])){if(0==t)throw new Error("leading combining mark");if(t==e)throw new Error(`adjacent combining marks "${String.fromCodePoint(...A.slice(t-2,t+1))}"`);if(65039==A[t-1])throw new Error("emoji + combining mark");e=t+1}}catch(t){throw new Error(`Invalid label "${e}": ${t.message}`)}return t}function k(t){return m(I(t,U))}function M(t){return h(k(t))}function x(t){return m(I(t,(t=>t)))}function m(t){return t.normalize("NFC")}function U(t){return t.filter((t=>65039!=t))}function I(t,e){let A=a(t).reverse(),n=[];for(;A.length;){let t=K(A);if(t){n.push(...e(t));continue}let r=A.pop();if(g.has(r)){n.push(r);continue}if(B.has(r))continue;let o=C[r];if(!o)throw new Error(`Disallowed codepoint: 0x${r.toString(16).toUpperCase()}`);n.push(...o)}return String.fromCodePoint(...n)}function K(t,e){let A,n,r=E,o=[],s=t.length;for(e&&(e.length=0);s;){let l=t[--s];if(r=r.branches.find((t=>t.set.has(l)))?.node,!r)break;if(r.save)n=l;else if(r.check&&l===n)break;o.push(l),r.fe0f&&(o.push(65039),s>0&&65039==t[s-1]&&s--),r.valid&&(A=o.slice(),2==r.valid&&A.splice(1,1),e&&e.push(...t.slice(s).reverse()),t.length=s)}return A}function F(t){let e=a(t).reverse(),A=[],n=[];for(;e.length;){let t=K(e,A);if(t)n.push({type:"emoji",emoji:t,input:A.slice(),cps:U(t)});else{let t=e.pop();if(46===t)n.push({type:"stop"});else if(g.has(t))n.push({type:"valid",cps:[t]});else if(B.has(t))n.push({type:"ignored",cp:t});else{let e=C[t];e?n.push({type:"mapped",cp:t,cps:e.slice()}):n.push({type:"disallowed",cp:t})}}}for(let t=0,e=-1;t<n.length;t++){let A=n[t];if(J(A.type))if(R(A.cps)){let A=t+1;for(let t=A;t<n.length;t++){let{type:e,cps:r}=n[t];if(J(e)){if(!R(r))break;A=t+1}else if("ignored"!==e)break}e<0&&(e=t);let r=n.slice(e,A),o=r.flatMap((t=>J(t.type)?t.cps:[])),s=String.fromCodePoint(...o),l=m(s);s===l?t=A-1:(n.splice(e,A-e,{type:"nfc",input:o,cps:a(l),tokens:T(r)}),t=e),e=-1}else e=t;else"emoji"===A.type&&(e=-1)}return T(n)}function J(t){return"valid"===t||"mapped"===t}function R(t){return t.some((t=>D.has(t)))}function T(t){for(let e=0;e<t.length;e++)if("valid"===t[e].type){let A=e+1;for(;A<t.length&&"valid"===t[A].type;)A++;t.splice(e,A-e,{type:"valid",cps:t.slice(e,A).flatMap((t=>t.cps))})}return t}function b(t){return t<26?97+t:22+t}function y(t,e){let A=t-e;return A<=0?1:A>=26?26:A}function L(t,e,A){t=Math.floor(t/(A?700:2)),t+=Math.floor(t/e);let n=0;for(;t>455;)t=Math.floor(t/35),n+=36;return n+Math.floor(36*t/(t+38))}const P=new Set(a("-.0123456789abcdefghijklmnopqrstuvwxyz"));function V(t){if((t=t.split(".").map((t=>{if(!t)return"";let e=t;try{let t=a(e),A=function(t){if(!Array.isArray(t)||!t.every((t=>Number.isSafeInteger(t)&&t>=0&&t<=1114111)))throw new TypeError("expected array of Unicode codepoints");let e=t.filter((t=>t<128)),A=e.length;if(A==t.length)return t;A&&e.push(45);let n=128,r=72,o=0,s=A;for(;s<t.length;){let l=t.reduce(((t,e)=>e>=n&&e<t?e:t),1114111);o+=(l-n)*(s+1);for(let n of t)if(n<l)o++;else if(n==l){let t=o;for(let A=36;;A+=36){let n=y(A,r),o=t-n;if(o<0)break;let s=36-n;e.push(b(n+o%s)),t=Math.floor(o/s)}e.push(b(t)),r=L(o,s+1,s==A),o=0,s++}o++,n=l+1}return e}(t);for(let t of A)if(!P.has(t))throw new Error(`invalid ASCII: "${d(String.fromCodePoint(t))}"`);if(A===t){if(e.startsWith("xn--"))throw new Error("punycode literal");if("--"===e.slice(2,4))throw new Error("invalid label extension");if(e.startsWith("-"))throw new Error("leading hyphen");if(e.endsWith("-"))throw new Error("trailing hyphen")}else e="xn--"+String.fromCodePoint(...A);if(e.length>63)throw new Error(`too long: ${e.length} > 63`)}catch(e){throw new Error(`Invalid label "${d(t)}": ${e.message}`)}return e})).join(".")).length>253)throw new Error(`Name too long: ${t.length} > 253`);return t}function N(t){return p(String.fromCodePoint(...t),(t=>8204==t?'<span class="mod zwj">ZWNJ</span>':8205==t?'<span class="mod zwj">ZWJ</span>':`<code>${i(t)}</code>`))}function X(t){return`Hex: 0x${t.map(i).join(" ")}\nDec: ${t.join(" ")}`}function j(){let t=document.createElement("span");return t.classList.add("arrow"),t.innerHTML="➔",t}function S(t,e){let A=document.createElement("div");return A.classList.add("tokens"),e&&(t=t.flatMap((t=>"nfc"===t.type?t.tokens:t))),A.append(...t.flatMap((t=>{let A;if("emoji"===t.type){let n=e?t.input:t.cps;A=document.createElement("a"),A.href=`https://emojipedia.org/${String.fromCodePoint(...t.emoji)}`,A.classList.add("glyph"),A.append(...n.map(((t,e)=>{let A=document.createElement("span");if(8205==t)A.classList.add("mod","zwj"),A.innerHTML="ZWJ";else if(65039==t)A.classList.add("mod","dropped","style"),A.innerHTML="FE0F";else if(8419==t)A.classList.add("mod","keycap"),A.innerHTML="Keycap";else if(t>=917536&&t<=917631){t-=917504;let e=String.fromCodePoint(t);127===t?(A.classList.add("mod"),A.innerHTML="TagEnd"):(Q(e)?A.innerHTML=e:(A=document.createElement("code"),A.innerHTML=i(t)),A.classList.add("mod","tag"))}else A.classList.add("emoji"),A.innerHTML=String.fromCodePoint(t);return A})))}else if("nfc"===t.type){A=document.createElement("div"),A.classList.add("nfc");let e=S(t.tokens,!1);e.classList.add("before");let n=document.createElement("div");n.classList.add("valid"),n.innerHTML=N(t.cps),n.title=X(t.cps),A.append(e,j(),n)}else if(A=document.createElement("div"),"valid"===t.type)A.classList.add("valid"),A.innerHTML=N(t.cps),A.title=X(t.cps);else if("mapped"===t.type){A.classList.add("mapped");let n=document.createElement("span");n.classList.add("before"),n.innerHTML=N([t.cp]),n.title=X([t.cp]),A.append(n),e||A.append(j(),...t.cps.map((t=>{let e=document.createElement("span");return e.innerHTML=N([t]),e.title=X([t]),e})))}else if("ignored"===t.type)A=document.createElement("code"),A.innerHTML=i(t.cp),A.title=X([t.cp]),A.classList.add("ignored");else if("disallowed"===t.type)A.classList.add("disallowed"),A.innerHTML=N([t.cp]),A.title=X([t.cp]);else{if("stop"!==t.type)throw new TypeError(`unknown token type: ${t.type}`);A.classList.add("stop"),A.innerHTML="."}return A}))),A}function G(){let t=document.createElement("style");t.innerText="\n\t.tokens {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 2px;\n\t}\n\t.tokens > * {\n\t\tpadding: 2px 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t}\n\t.tokens a {\n\t\ttext-decoration: none;\n\t}\n\t.tokens a:hover {\n\t\toutline: 2px solid #00f;\n\t}\n\t.tokens .valid {\n\t\tborder-radius: 5px;\n\t\tbackground: #cfc;\n\t\tborder: 2px solid #0a0;\n\t\tline-break: anywhere;\n\t}\n\t.tokens .ignored {\n\t\tcolor: #fff;\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .disallowed {\n\t\tbackground: #f66;\t\n\t}\n\t.tokens .mapped {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #66f;\n\t\tbackground: #ccf;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mapped span:first-child {\n\t\tmargin-bottom: -4px;\n\t\tborder-bottom: 4px solid #000;\n\t}\n\t.tokens .stop {\n\t\tfont-weight: bold;\n\t}\n\t.tokens .glyph {\n\t\tborder: 2px solid #0aa;\n\t\tborder-radius: 5px;\n\t\tbackground: #cff;\n\t}\n\t.tokens .mod {\n\t\tfont-size: 70%;\n\t\tpadding: 2px;\n\t\tbackground: #333;\n\t\tcolor: #fff;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens .mod.zwj {\n\t\tbackground: #0aa;\n\t}\n\t.tokens .mod.tag {\n\t\tbackground: #33f;\n\t}\n\t.tokens .mod.dropped {\n\t\tbackground: #aaa;\n\t\tmin-width: 5px;\n\t}\n\t.tokens .arrow {\n\t\tcolor: rgba(0, 0, 0, 0.35);\n\t}\n\t.tokens .nfc {\n\t\tdisplay: flex;\n\t\tborder: 2px solid #fa0;\n\t\tbackground: #fd8;\n\t\tborder-radius: 5px;\n\t}\n\t.tokens code {\n\t\tfont-size: 90%;\n\t\tpadding: 2px;\n\t\tborder-radius: 5px;\n\t\tcolor: #fff;\n\t\tbackground: rgba(0, 0, 0, .3);\n\t\talign-self: center;\n\t}",document.body.append(t)}export{f as compare_arrays,V as dns_from_normalized_ens,S as dom_from_tokens,x as ens_beautify,M as ens_normalize,k as ens_normalize_fragment,h as ens_normalize_post_check,F as ens_tokenize,p as escape_for_html,d as escape_unicode,a as explode_cp,i as hex_cp,Q as is_printable_ascii,c as quote_cp,G as use_default_style};

@@ -218,6 +218,2 @@ function decode_arithmetic(bytes) {

function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
}
const SORTED_VALID = read_member_array(r).sort((a, b) => a - b);

@@ -269,3 +265,3 @@ const VALID = new Set(SORTED_VALID);

function ens_normalize_fragment(frag) {
return nfc(process(frag, emoji => emoji.filter(cp => cp != FE0F)));
return nfc(process(frag, filter_fe0f));
}

@@ -293,2 +289,6 @@

function filter_fe0f(cps) {
return cps.filter(cp => cp != FE0F);
}
function process(name, emoji_filter) {

@@ -295,0 +295,0 @@ let input = explode_cp(name).reverse(); // flip so we can pop

@@ -1,1 +0,1 @@

function A(A){return 1&A?~A>>1:A>>1}function e(A,e){let t=Array(A);for(let Q=0,B=-1;Q<A;Q++)t[Q]=B+=1+e();return t}function t(e,t){let Q=Array(e);for(let B=0,n=0;B<e;B++)Q[B]=n+=A(t());return Q}function Q(A,t){let Q=e(A(),A),B=A(),n=e(B,A),r=function(A,e){let t=Array(A);for(let Q=0;Q<A;Q++)t[Q]=1+e();return t}(B,A);for(let A=0;A<B;A++)for(let e=0;e<r[A];e++)Q.push(n[A]+e);return t?Q.map((A=>t[A])):Q}function B(A,e,Q){let B=Array(A).fill().map((()=>[]));for(let n=0;n<e;n++)t(A,Q).forEach(((A,e)=>B[e].push(A)));return B}function n(A,e){let t=1+e(),Q=e(),n=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(t)}return e}(e);return B(n.length,1+A,e).flatMap(((A,e)=>{let[B,...r]=A;return Array(n[e]).fill().map(((A,e)=>{let n=e*Q;return[B+e*t,r.map((A=>A+n))]}))}))}function r(A,e){return B(1+e(),1+A,e).map((A=>[A[0],A.slice(1)]))}var C=function(A){let e=0;return()=>A[e++]}(function(A){let e=0;function t(){return A[e++]<<8|A[e++]}let Q=t(),B=1,n=[0,1];for(let A=1;A<Q;A++)n.push(B+=t());let r=t(),C=e;e+=r;let w=0,l=0;function s(){return 0==w&&(l=l<<8|A[e++],w=8),l>>--w&1}const o=2**31,g=o>>>1,D=o-1;let c=0;for(let A=0;A<31;A++)c=c<<1|s();let i=[],E=0,p=o;for(;;){let A=Math.floor(((c-E+1)*B-1)/p),e=0,t=Q;for(;t-e>1;){let Q=e+t>>>1;A<n[Q]?t=Q:e=Q}if(0==e)break;i.push(e);let r=E+Math.floor(p*n[e]/B),C=E+Math.floor(p*n[e+1]/B)-1;for(;0==((r^C)&g);)c=c<<1&D|s(),r=r<<1&D,C=C<<1&D|1;for(;r&~C&536870912;)c=c&g|c<<1&D>>>1|s(),r=r<<1^g,C=(C^g)<<1|g|1;E=r,p=1+C-r}let f=Q-4;return i.map((e=>{switch(e-f){case 3:return f+65792+(A[C++]<<16|A[C++]<<8|A[C++]);case 2:return f+256+(A[C++]<<8|A[C++]);case 1:return f+A[C++];default:return e-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function w(A){return[...A].map((A=>A.codePointAt(0)))}const l=Q(C).sort(((A,e)=>A-e)),s=new Set(l),o=new Set(Q(C)),g=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(n(t,A))}for(;;){let t=A()-1;if(t<0)break;e.push(r(t,A))}return Object.fromEntries(e.flat())}(C),D=new Set(Q(C,l)),c=function(A){let e=Q(A).sort(((A,e)=>A-e));return function t(){let B=[];for(;;){let n=Q(A,e);if(0==n.length)break;B.push({set:new Set(n),node:t()})}B.sort(((A,e)=>e.set.size-A.set.size));let n=A(),r=n%3;n=n/3|0;let C=!!(1&n);return n>>=1,{branches:B,valid:r,fe0f:C,save:1==n,check:2==n}}()}(C),i=new Set(Q(C,l));function E(A){for(let e of A.split("."))try{let A=w(e);for(let e=A.lastIndexOf(95)-1;e>=0;e--)if(95!==A[e])throw new Error("underscore only allowed at start");if(A.length>=4&&45===A[2]&&45===A[3]&&A.every((A=>A<128)))throw new Error("invalid label extension");let t=w(h(e,(()=>[65039])).normalize("NFD"));for(let A=0,e=-1;A<t.length;A++)if(D.has(t[A])){if(0==A)throw new Error("leading combining mark");if(A==e)throw new Error(`adjacent combining marks "${String.fromCodePoint(...t.slice(A-2,A+1))}"`);if(65039==t[A-1])throw new Error("emoji + combining mark");e=A+1}}catch(A){throw new Error(`Invalid label "${e}": ${A.message}`)}return A}function p(A){return U(h(A,(A=>A.filter((A=>65039!=A)))))}function f(A){return E(p(A))}function k(A){return U(h(A,(A=>A)))}function U(A){return A.normalize("NFC")}function h(A,e){let t=w(A).reverse(),Q=[];for(;t.length;){let A=a(t);if(A){Q.push(...e(A));continue}let B=t.pop();if(s.has(B)){Q.push(B);continue}if(o.has(B))continue;let n=g[B];if(!n)throw new Error(`Disallowed codepoint: 0x${B.toString(16).toUpperCase()}`);Q.push(...n)}return String.fromCodePoint(...Q)}function a(A,e){let t,Q,B=c,n=[],r=A.length;for(e&&(e.length=0);r;){let C=A[--r];if(B=B.branches.find((A=>A.set.has(C)))?.node,!B)break;if(B.save)Q=C;else if(B.check&&C===Q)break;n.push(C),B.fe0f&&(n.push(65039),r>0&&65039==A[r-1]&&r--),B.valid&&(t=n.slice(),2==B.valid&&t.splice(1,1),e&&e.push(...A.slice(r).reverse()),A.length=r)}return t}function K(A){let e=w(A).reverse(),t=[],Q=[];for(;e.length;){let A=a(e,t);if(A)Q.push({type:"emoji",emoji:A,input:t.slice(),cps:(B=A,B.filter((A=>65039!=A)))});else{let A=e.pop();if(46===A)Q.push({type:"stop"});else if(s.has(A))Q.push({type:"valid",cps:[A]});else if(o.has(A))Q.push({type:"ignored",cp:A});else{let e=g[A];e?Q.push({type:"mapped",cp:A,cps:e.slice()}):Q.push({type:"disallowed",cp:A})}}}var B;for(let A=0,e=-1;A<Q.length;A++){let t=Q[A];if(M(t.type))if(I(t.cps)){let t=A+1;for(let A=t;A<Q.length;A++){let{type:e,cps:B}=Q[A];if(M(e)){if(!I(B))break;t=A+1}else if("ignored"!==e)break}e<0&&(e=A);let B=Q.slice(e,t),n=B.flatMap((A=>M(A.type)?A.cps:[])),r=String.fromCodePoint(...n),C=U(r);r===C?A=t-1:(Q.splice(e,t-e,{type:"nfc",input:n,cps:w(C),tokens:u(B)}),A=e),e=-1}else e=A;else"emoji"===t.type&&(e=-1)}return u(Q)}function M(A){return"valid"===A||"mapped"===A}function I(A){return A.some((A=>i.has(A)))}function u(A){for(let e=0;e<A.length;e++)if("valid"===A[e].type){let t=e+1;for(;t<A.length&&"valid"===A[t].type;)t++;A.splice(e,t-e,{type:"valid",cps:A.slice(e,t).flatMap((A=>A.cps))})}return A}export{k as ens_beautify,f as ens_normalize,p as ens_normalize_fragment,E as ens_normalize_post_check,K as ens_tokenize};
function A(A){return 1&A?~A>>1:A>>1}function e(A,e){let t=Array(A);for(let Q=0,n=-1;Q<A;Q++)t[Q]=n+=1+e();return t}function t(e,t){let Q=Array(e);for(let n=0,B=0;n<e;n++)Q[n]=B+=A(t());return Q}function Q(A,t){let Q=e(A(),A),n=A(),B=e(n,A),r=function(A,e){let t=Array(A);for(let Q=0;Q<A;Q++)t[Q]=1+e();return t}(n,A);for(let A=0;A<n;A++)for(let e=0;e<r[A];e++)Q.push(B[A]+e);return t?Q.map((A=>t[A])):Q}function n(A,e,Q){let n=Array(A).fill().map((()=>[]));for(let B=0;B<e;B++)t(A,Q).forEach(((A,e)=>n[e].push(A)));return n}function B(A,e){let t=1+e(),Q=e(),B=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(t)}return e}(e);return n(B.length,1+A,e).flatMap(((A,e)=>{let[n,...r]=A;return Array(B[e]).fill().map(((A,e)=>{let B=e*Q;return[n+e*t,r.map((A=>A+B))]}))}))}function r(A,e){return n(1+e(),1+A,e).map((A=>[A[0],A.slice(1)]))}var C=function(A){let e=0;return()=>A[e++]}(function(A){let e=0;function t(){return A[e++]<<8|A[e++]}let Q=t(),n=1,B=[0,1];for(let A=1;A<Q;A++)B.push(n+=t());let r=t(),C=e;e+=r;let w=0,l=0;function s(){return 0==w&&(l=l<<8|A[e++],w=8),l>>--w&1}const o=2**31,g=o>>>1,D=o-1;let c=0;for(let A=0;A<31;A++)c=c<<1|s();let i=[],E=0,p=o;for(;;){let A=Math.floor(((c-E+1)*n-1)/p),e=0,t=Q;for(;t-e>1;){let Q=e+t>>>1;A<B[Q]?t=Q:e=Q}if(0==e)break;i.push(e);let r=E+Math.floor(p*B[e]/n),C=E+Math.floor(p*B[e+1]/n)-1;for(;0==((r^C)&g);)c=c<<1&D|s(),r=r<<1&D,C=C<<1&D|1;for(;r&~C&536870912;)c=c&g|c<<1&D>>>1|s(),r=r<<1^g,C=(C^g)<<1|g|1;E=r,p=1+C-r}let f=Q-4;return i.map((e=>{switch(e-f){case 3:return f+65792+(A[C++]<<16|A[C++]<<8|A[C++]);case 2:return f+256+(A[C++]<<8|A[C++]);case 1:return f+A[C++];default:return e-1}}))}(Uint8Array.from(atob("AEEF2gQjDIMBDQJKAIIBaACJAPQAfQCuAGIAhABHAKwAXwB6AD4AUAAhAFoAIgA6ACQAKwAcAFkAFQAjABoAMwAnADYAFQAhABoALQAVACoAEgAfAA8AIwATAB0AGQAvADgALgAuAD0AFgA7ABgAHgATABQAEgAaABQAFQS0BagA5BKwAT4etwkrAfEAFh02jkgAInBwAaYqBUICsXU1ibYCkwPNBQFTAQpyhEpQ+r8Bc2YB7wKRANNKxQgLigR0AvMBOMIRDPIiAMsgyhNVygETAaYCGhcGLBETD00BHic1DT8EkiarByIBQyIiEgIEEhI+ATUtCZclEgoJKm5nB22DBgP3mSwoWy8RYgAlGidNEhoAem9SAgBfJAQlAhBBEQJBGCpyIQUATQBOgQB9QhsCcgIiOikHAAJiEiMiGYLyEgICFAEjLwJSHxJyChICApKCARISIgASGQACogECwzIJ0jISwiLCAQIUEgGlYhECExbCA8IhsgASCVIyESZywggBoiIDYgFdAyHCnAAEA+KJHQHVUgCx0jIHh4Q0FwAPHjhCQgISwiJiVgMupcIPAqIVUjASIxomJww3YiSqBRgBQhsbCAADDzYCKWxmgQL1mCknK0AVGCEGb08AHhwINhApKmY9Gjj5CgILEAAiHgoHChULAl0xhiUC8QEJAPsTCA0WugOY5QBOLTa4AggZAU6HBiY2GxZVpaIO+6AVRBvzEg1wAWQTgga+F91dFs7kt71iC0MisjfLBdsAuQCuRwFvAKkJAy1jAK6HNzc3NwE/kQ0R8wAFB0cG7DkFXwVgAD0zOQj20hkGDtDJDAAKrQPQngcCzQo3Ao6pAobgP5ZvkQLF0wKD+gEnzREA8OsAjQFJAjWVCimXXQBRAOoKKQAf3MHQFBNFpQAlEwHhU3cBBQJBGMUP8x2pOQFbA2MD278NAhsBMW8NI78GOQCzAHGZ762chwBjBKkHACkDBvEAIwBDAp0IVxcDqgPKQyDXCMMxA7kUQwD3NXOrAKmFIAAfAX8rrwAdA1IAbQIBJQDBGdUFAh0f9AJ7ApoCsTQ5OAYFPwVkBT0BfjejA2MDPho5CZ8JkF4NXnAjVmFSpKDNg0oAGwAUAB0AFnNcACkAFgBP9h3gPfsDOWDKneY2UzleiiVRCwvR/wNgPfQAGwAUAB0AFnMgZECfAMPzACMAQQEEmLZrKgsAhAEUwxbDqgMB2sAFYwXqAtCnAsS4AwpUJKRtFHsadUz9DgDDKyEXC5cAQ5PTFzEvwwAjAAMANaElF5+Z8W1DAAdRviUAzEsBEyMAxSshFwsCgATVk9MXMQeKOesAAwAjBTYOT/uZ8W1DAAdRAEkqBgUDLgMGCQAXAD8zFZsTgSFJFOcCOSEVywALCQB7AG89r5PpBHMNr629ASNrhQC5DQANA+YTAGkHBYmZ8VEElUPdcR8N7QCYh9kBfys1A6MAbwEKIYUFeQXYP+PaAoMAWmW7AFQAXwBgAG8AcgB5AG4AeQByAIcAdDOCFwRUUVMUAAZUW1MKAEYA1Q4CqgLRAtYClwKwAv2/AA8AwgA/u1AErATtDEksMxTjOvs3ZBgWAEKTAEqWzcoBuQGeAisCKDgFOAICsQKmAIMA1QKKOB00HgK0OCE4OgVhuwKYAqACpwGMAZsCrgK1NO80fiI08zSOHgBcNaU4BgU/NBU0LDYHNko2jzZQNlc2HDbznD1aNTpFRCsChQKkArMCqgBDADQFYQVgt8AFcTtlQhpCVyVSrjTnNMIaAwRTBVbaV72fe5tmZ6IAExsDzQ8t+X8rBKtTAltbAn0jsy8Bl6utPWMDTR8Ei2kRANkDBrNHNysDBzECQWUAcwFpJ3kAiyUhAJ0BUb8AL3EfAbfNAz81KUsFWwF3YQZtAm0A+VEfAzEJDQBRSQCzAQBlAHsAM70GD/v3IZWHBwARKQAxALsjTwHZAeMPEznd3kUhgfAAEgAZADwARQBAO3eB28gQZxBkCQZNEUx0QhUTArQPrgvtER0M2SrT0+AANLEH8wNbB/MDWwNbB/MH8wNbB/MDWwNbA1sDWxwS8CLbyBBnD1AEdQWWBZME3giLJlERiQcwCNpUFXQmHE8DTQEEIy1JJDubMxMlSkwUTQsIBDZKbK99QANPMbNU/ZCqA9MyVzl0CQYeeRKoADIPeyQ1vU6Gek9xqApTT7ZX+gBFCQASrgAS6QBJECsAUC8GQABI5jTbABNJAE2eAE3NAExgGwBKawbjAFBaAFCRAFBMABI5SWpObwLGOrBAAAopCZtvw3dWBkUQHyepEPsMNwG5AT8N8UvcBPUGPwTNH4EZHQ/RlaAIqS3hDPEm5y6lgF4j+SqHBfFL+DzhC1FRbA9dC2kJ5zpngVIDJQERIo8K4Q09CHEQ9wrNbw3pEUkHPQPZSZ4AqQcFCxUdORW5JhRisAsNOXsG/xr6C5MmsxMtewAF1xolBlEBLRsDANMu64W0WjVcIE9jBgcLKSPLFKxQJA0pQLt4TBofBxklrQKVQ3RKi1E6Hpch+jxBDWouF1GAB/k8CRlTC4U8okavRRIR1j6RPUwiTUwwBDmDLDMnjwnTD4kMvXx2AV0JJQm1DHUTNREbN8kIPQcdMZcoJxkIJUaZYJ4E+6MD9xPVAw8FQwlFBxcDuRwxEzIVLQURgSjbAvc22S63ApNWhAEbBc8PKR/jEFRH5A7tCJ8CaQOHJe8AMRUlABsinwhHZwBjj9xTCS7PCMtqcCN4A2sU62URdweVDlsHqxw3FcMc5XDMXg+GDCinswlfAXkJnQFjBOcIDTVfjKQgRWdXi1wYnyBlQUNeAAI1DGkVo0TBh3wCjw9vEh8BOQF3Bz0NBQJ7EfERbxCZCO+GCDW5M/w6KQRTIYcgFQorA1Ns0gsrJv0M/G0BpxJmAxA0QXfyZ69guigYAQcdMslBZCH1C5ZP0QygGsUYRlQyGegHwwP3Gvcn7kFbBgMDpwcXOlEz8gTBC20IjwlDAE0OpxsH2xhuCnWM1AE1jwG7nQNblYcCc5MGOwcPAGsPiwV96QAhAqsIpwAJANMDWwA9ArEHoQAdAIlFAUEDKzMBJekCkwOXCDXPAZkzAfctBB/HDBkA+ztuTgLDtQKAbmamBeFcApICTTkBUSkECVJLVQOzdeUA3wBPBhfjSwEZr07PHudHAeNzLwDLAP8ACTkHCUUB0QH3cQC7AWMLNQmmt7kBUe0tAIcAGW8B2wKNAOEAOQCD9QFXAFEFXf0F1wJTTQEVNRwvW2UBvwMjATcBEQB9Bs+Rqc0LIwRxB9cCEB8V5QLvMge5BQMi4xPRQskCveJZADIaUvFeagqrCqpeawC3ZDcKNXY9VAASH6w+ywd1/xlIjAIpTgBQ6QBQRjSdNTRZTDkBqgGtLAK38wFtrgBJAgK38QK3sAK3swK63tAC1QK33wK30hMAUEUAUEIAUpVShgK3pwK8PABHAM8BxTthO1w7YTtcO2E7XDthO1w7YTtcA5srWyZQw1hQKymsCnBfSWHvDKoN2ETMOk0T32BVYDYTzC27FMUV0iVaGUEawCcJJehVDQ8ILddmNAgwNHkXwABDKWyDRWOKHjQKTxzrU5VU/C0fALVLpjOzDbAbGUREBUt18WIuFhIKJgJkhQJiRl9RswFfNyQCofsCaJwCZg0Cn4g4Hw8CZj8CZioEcgSDA38XA36WOQo5exs5hjonJwJsIQIyOjgOAm3LAm2y844DN2tJLwFrAOIA5QBOCQecDJEBAg/GABG5AnczAnamQwJ5T0cCeL4hYN9Fskb3AnxDAnrMAn0NAnz0SARIgWcoAC8ZSVxKXxkbStAC0QUC0NBLKwOIUwOH6kTJkTYC8qVdBwMDskvSTDEpB9NNUE2zAotDAorcxR8LIUdrCbsCjjsCjmBEm4UCjt0CjmB8UbhTOQEOUthUiQKT/wKTEADtACBVIlWzVdQKLB8pmYoy5XhqRT89ApejAu+2WCWsAF0pApaTApaAoACtWbBaDYVRAD8ClrkCllJcSFzVApnPAploXM5dCx0CnJ85xjqhApwaAp+fAp68jgAhEzUuEwKd9QKelgC5QWE4YfMCntcCoHIBrQKeoyMCnlKpY8xkKykvAiezAiaCAqD/AqBQ2wKmMwKl0gKoAwCBAqf2aIBotQAHTWogatUCrOcCrLICrWsCrQYCVyECVeACseXbAx9SbJsCssERArLsG2zkbWdtTGMDJdECtmA/Q26UAylJArhiArlLGQK5LntwOnDlAr0dAy22AzIVAr6McgYDM3UCvh5zJnNTAsPPAsMIc4Z0TzlJdOQDPKsBAzyeAz3DAsWAAsZLAsYUjQLIbVUCyEgCyVMCyTICZKEC3dZ4fWV4snkpS9QDGKdnBgJh+Bn3lSh7D16WXr8VAs9vAs9wM09X1vcXowDKsQLPdwEt7gNOFn5PCQLcKwLbjgLSUwNSYANTYwEFA1WQgI1DBM8a8WRJeQOC0oORAtrLAtnihBSETadAA4apADMDZBKGdV39AFkC32kC3rx3ewLiM+0YAfM0KwH0nwHy1osC6/cC6XR9AwLq/QLq6AD9SwG9Au6NAuuglq6XBwLuQwOF5Jh9cORxpQLzBwBtA44amZcC9xcDkXIDkosC95wC+d0C+GqaIJqvvzubIgOdhwL+/gEfAD2fIAGftwMFkQOmbgOm3QDVyQMGbqGMogkNAwxNAWMBIwK5A0kAnwSDvWsJAL8Eb8MVjxyFAIcPMad5PQAnAzcLlQpJgwFnKyUAjPPfCQEvAKSBez2lC6OVA2lbA30ARwXBvARZp8kGAK8FGcMG8SVFRgUdIDvdNTZANtc2zDZJNjw28zbgNk02KDcTNxw3lT5IP0ZIM0IpQrxUGQoZGV/EAJbNBToAkFQhm8E7LmA6GbrXDjcYzhiRyf4FXwVgBV8FYAVrBWAFXwVgBV8FYAVfBWAFXwVgTh0I340AsQAECAoKApTxhQKhcF7xMwTRA/QD6QPFAKcEU8PDAMMEr8MA70gxGLADWAVPN7U+Rj5xPnhCR0K+BNNZZz9f8ABYGTOzAI0GzHPMBKbvRoJFLisMMx4vPj1+dd9ywfkZyixxAXPXdjgfBWcFcsnJycAI11HzUggPQAgID0AZSgKU6QKgxF6Fk+IAOxw1IDkAlwALHwO1Kw0AjMsTAk17FQClkXU9lwsApyUdwR/BPkQsJ1JCuUI+QCtfL2A+LyIrCclxBgKVCYUCQg5eCl4LP0sgaCBFPmI+iT54PnkCkUI2SkNf01ZXclUSNABzXDcDcgETdidf6DtCE0IMQg1CjCMJb+cKApUFAqCmzDsxCMkYvSkjG44ny0a2I7crHVsgJz5URCUuQrNCVMwJzARf0RYnNhEQEQQHAgcqfqXfckI1UkPJs8m0CW3h09QClQ0CQXZeAF4BP3EAuQ/tEKsZAQCTGz8nPsRNQi0bsW1BzkAKSz8nPnhCRxwPEiVUT3RjNDVa6bwaQic2ZPU/Jz7EM0JHHGUQUhEWO1xLSj8MO0ucNAp1Pyc+xjVCRxv9EFsqKyA4OQgNj2nwZjYtCoNk0XNgE1+2YDUrdgdLX+ZgIUEKIyZfimC7DgpzGG1WG/xgVRkJBgdfwmTv9WAdXzhgnV/aYIVfvGC7HJBgU19sYJlgNAH3TVWcAFgoGw8lNXQTGjVlBXptAjMKtXS0dpUWKytnAJARBtcKUHdwMwD8EwoARA7qJP6IegBWp1BJNjEABDIBOwJZcE2UDBUHICQAIwiDftkocecUcg4IMj4q7gE7Av09AAkZBRMqBR4TGRQwAFIVFQYNgpkOHusAzT8BShMVJ7soAgcJQR4hmAEHaQCpEAwCUwOdzJTwt42BAru4wgsHNxUgJgAzkQB0EwBhAJMAxRcX3DQXygxIDa/u6wsENDIVyQEYCHtiAboA4gCKLKgAiwAELwQsBC4EMQQvBDUEMgQtBDMENQQ0BDAEMgQ1AJ5uAKsDjgDRWQDXAhQA/mIA/gEhAP4A/AD8AP0A/NwF+G4BUQD0AP4A/AD8AP0A/EokAJFiAP4AkQEhAP4AkQLzAP4AkdwF+G4BUQD0SiQA/2IBIQD+AP4A/AD8AP0A/AD/APwA/AD9APzcBfhuAVEA9EokAJFiASEA/gCRAP4AkQLzAP4AkdwF+G4BUQD0SiQBBQoAkQJLAT4CUgFBAlPJA6UC8wOl3AX4bgFRAPRKJACRYgEhA6UAkQOlAJEC8wOlAJHcBfhuAVEA9EokBCYAkQQnAJEAI2p8MQMBBj5MAE65r0UsAJEAQgafzz0SCRUDBQYhCAgUAR4DsgoAY2MAHS5fAFxsAAguPQoAkQohMAl8gOIMMwAJc0UBcgBkCgCRCiEB901VnOwdCQwCDyUcNqk1BBgE+DttAEFlYAsqAJkI3nO0xklDFJ9HKsUAkBEDhwHqTwUGyhgGLkx0DAxSZQUvJAVbKABWp1BJbUgAK2klED0VBxBHtwkAYAJbAIR/HQYACkojACMIbn7ZKHHsFAAQDQAoK5IBOwMqPQAJGQWppSsAcQ9zSi0A3Q3i5iD4PwIJFSe7KALziqPevQKSEIUx2SOqcX+xkU1kfmBWXRNKNmkLhmjy1FLf0BFliz9cZMolTXFPLNzwW20xiIyIV9yjBcHRh3/7a9VwZaTORJjmtDmEVrHFhV2Z7aKUKKtY5X6y8mUw90nBUL8qzbD2nrAF6Rr7KgEgmKRXHd6sXFROKRWRKhlL9tAMc6RinJbEsZzTpG+lgZlJwttETeJSP14pAmuGgaWeM2580XgU3kJNAO8DrIed1nL5GbFGQA+znfEgdSmPdDPy/siJdxzybD8j63X2W1adrzd7wvYfTWEwUuliG60j1KhfDRjoRfdLSuRGfVf9GwYHUYaITw3Hq0Ntx9r00jppM+lqfs71woZt/Rv8f668O1Dx1/iB54JylUORVpGW4XLU+bRdz0QAbEOWWyY0R6j3X85DTUvAkO3ikoOXEa2AVv94tmiNflDs3KLMD4phqhYh/iN3lHzBpXQG0f3XQ2UDV6jJEwbTv/ABXAhghzrBAPM9n7j3GfV7iK6RDHqK+ThA83K4+BGYx3uvsoJxp7up7QflZj6gtYpSkBXq1/wLk8QP1syImkpEulLhi5lXCT6xQg9hUBQilYYyWluGICmfSsRbRBUCENjKKYP3fF3ZG/hqH3ii60OjKEJQPrwGeRKXENaU4/qX6mWF8Y/CehjAhu0XAXcpppxjEMHSiCdrNBgYMlaYezksor5u/3L+4KXFK2hWe34nRpBlVR4ABZ6QATfS5LZQTXna+Xz06pLRlrXKhWjzzW9Dc8FwaE25A/5nwtHx6XTn66EmHwVKNpc4zAGWvKBk2D/cSosi6lAqgZL3VzQIXH6focjsyinX0y7EIQQFbf9ZIu8Pp5KNJP5UX1klXUG3HdjB1Ch5LX1oS1tjZyZJDKCw2A4JlTQ8o8tAk0x6R7YrCW0afNspH9qnlTtQtUi4SzLMs3iy8YU7SOWMoLUNsLwsdkrcxNegrZMorQVNFusWabT2uSNhKZ6kXrrJlXxHr+BI3cozWsBlqSNZ1gF2hD/mhq1aIyrlDlW/0n6rtainBTeGro8IP25QvkGyKyXM4q6cO2SpqyW9hkL7wo6UTkfVE9VzygrPEJdOxYtEIzzZjqfUoRgLtE6XI674PYceAsGpi2KxkvnatF6HLDPl9qBMmXmKdhVReImWztO4qHqQsc5P/KeAH5KJeD2DrNDQrV4guCCt7+XpnsYnDZvzN73MEp754dz+kkRNkTBMnEHLnceCCUw2ASGmEnhXwKfRVtiKS/1iSgq7jzj2iFlVlC64p7PaYf+0LoYUbFXwP02FFwSFKLO1zcuDQn7V38Y065QkWbaoMLq+T7qdqzjxeZGgejCElOk9ZNy8+cO1t9becopD/wrfqpvAg/eNtrhXaR2OT8P44WZGh4uSb6MX3Qudvgy91W1dVdSeCYrnensfpdPuWcsDsmPeWv+nJajAm58JmT/wMxyX8mf/UvkZSLm6o07/eO0ulPnhThf9rw0WUcWO3SPcOy1o0n873t4LI9eL/pNWuPEjtYlFtNg36oaAxVQ+NH2nw6sGq7P+QomW+R9fu5UD8gsNwFjv7FJxKpoYLJVhhj9x6lrAoC8mu7PzG+8NSPKmBOn0mlx6QFZrdOvlhxQIn6VSalSKJqZ8mg53RFghA8g19/Q/gFF29Tcg6SQZvcRgVMqA0njvVG6tv647CnlX94MqkVpbPzwFUYODgLMsFJ0iU+ZVKQyQBVMkP3db9bSBUuMnnNO0G435R21WoMKpIaRr9I177WJldrEwBKIv1OIbeIELpTFs7JHnKZLWyUbFTwes9hbD94N2NT9LbcPJMCcsf70GxxcszFjqJ7bEjayqryIdjrAKTjae6KnIbrSjG1WMpTjI6T4//FtiQ10mu3Rly1rsyn1Vm/ycRbVfXCuZDpIOjGUlpiUJJu528nJeTDtRt2HFa3a7FrLtdNQmxGmKRCozAS/pYNGTT9q2U2TkE+Hn1R3H1Eg7uCOqqQ7mucWBRBk+pR2KLH9QtZ+Buo2RtmxODEQTRm+n+ZX7/XXWf+sPcWkoJEi902pkYRf5WIFxpahdc7BMgxezdzjV1jl/SGJX+HDpWMAMX3I06J7L1cnBedGGRUnRs0mjWeNHZ+f77QCDSimu4ck1QfUk36zGfepx48AJgdL+NhxJPzRRM7UCd4YVqpxeR/lKO3g+UmK2Qw5BQCMrzZwkSUB4XzPolASe/62HoSkOm47+TAcJn2twe/5G/k0GiJbOC7ubwvbpY6NTqpQ05vxI5+ckqqJK8MOuNVGyk/2hjFng8REV3fyp+dDyyLJjDF1ebo6q/fO+Et4Wjf8pnw0XEDHK8mLuuElQ+yxsKO3kiWCC+2RSxm2Ztb66dsrlPquci5wwNlnU/flwLsC7XM7WVZKXMdmemjyresjjNOKIgz0KSX+jV+J1YAQTpAMeI49NMW9Ttbgje4ccIpRMWkz1b6RocIRYg/wxWSyPJMhGBmLpn0IQh9Y8I/JKu2PCLf68EWP2fMie7D4g6csEOzrqi/uI+VYkb/cIBh7O9KGUuZ77vOIjwQRiutjFdmJbJ1vD32o0PgTdhVXS7ILrIAnKK9jXOIzF5pMcCYDJ5ajb7sBaWTL8Aq0jvC86Dc4u1FRKHBQ5LGToNkDfz9VqXPVsUkkc3udPY+wcUwYPaJCitQSmmhu3qZ0col6a1MotQ1iZ2JTeY720mjYeKAi4/XopqrkpXTGHJK9wMC5JT9T4LsNJi0JSe10491oNBtCAiWK0QbKEsaOeQleMsaGeVoVDnqNKmUWnjW4/aiA2KcBHuE9pnYKx9xux9xbhIZocbUmxHonNRPuiGNunZLb7fXMED6uyGP8xh+xkoT8v1KYBVkehX9v7ZfWn/iamO1KAGoe22oGoyobDNQ1hdWpD9NCDL7RK1Gy3xnziCTTUq2NfPbw/DP/lGi85nVrmrjFIkORluoczCs99S7roF917zusjue1cTWqWSdOGfCHpP1wOPVZ6v8M/k3680DFY9GiX1F/CeIU7GARXmw0nIO4q/6gBCgwrPVoBf7bvM522zrHTYKidfr/s0h0w4EaF0fiMMNUx3FOJET5CxYmDraX7mlCxvjZ6w2d862Cmn2KIZ8QxvaK1wkkATcWQQlK6dTjUaPDbVcqfGGaJM6UcxV80Y79Mrx+uktMe1lbJbmsgrjC5mSTDcL4bSQlka33hLh5UXp9ovhS9uk1ttUltsWGx1Fp809287cYQzHdJKrZo7NU+ZYl2oELRJzq7V98lY/tAcWnYfkaLr6wxD7grc8kmCxf4Y9khE2jKQlKe5FimhlUUl7bVuDPoBopONIL5Oj0ztXGN/2qafOQvEB3MknJlx4W3FO0rSZVfUsXbhQcX46m8Ouq4BOB3tp1n8Tz+HgrXOHFeDgkrNtwP50QLmvHlQwsSP7XoC428SsYmB8bXnuSeGtfum/cBxu0nXmUykxMwahly/Pi+zqzR4pLhzV8f2gl3OH+zZZeyBknB4+alDj0vqWI/lFSjGTVzynhKWtjLLtXnWTBkDtzoaz9fddlSBHCN8vNwa9iI8c9KYTD9IMFMiMUnesjvLnpZ2oBk3fQdj3Aev0QJDwG2DQAe1/b8ms4MmKu2a2xHd5WKEyxeSgzWyuY9q+dxTpTOKBnR5IsGluRgEITeUhTuftmr0a40IvxmJjbYD4A15BIbkDOs/XkZ/ozCcClF7+Mme2or0vonZTvZgc5YwnVaI2q9Rc8UbpKURa+Ph7glWs/b5mQQOaPmt6anPgSVtSDxANmM883lvDDaCpEq84p0VwohP4f0ZHDJFjyXQVHvTbgySekH222JSvgpdSEXUfIu4KD9Rz4BwZkKelNQ6rpBcGfdHOksuKrAeXdrVdUC61+eF6oQcng4aZdbJ1yLcP5XXPT/MU6Goe8IRlmvdWMtqEyfWSHtoVJxd8mZO/bLcImh0YC14S8Y9cVMAP23/Ri9KGJ1ODstIt9/peZejs11+PpbUt+nKJmJ4cprZlpPi2iwkt6a7lPkmcaLQO/aeDr/sApZ89pGELZ18JQqCFWRNUCW/BMDkTyFavt26sx1i1OqAkjiCMmAp0MBmtNKZO5/gCROnJCDT3F313oOL+cy7tnG+Pt0dmYDS+3/A+CiDKN3nks0Ja0V95M7MXWkTAnVhYyD0aGWumYtDFP0eUSsKNbFX5bteLXgX5K7Ufg/LZK/UWUd8A8ZTrhJzY3MXhVODsPl7oVcmgRuzgNVogKQfy4tn7Hj63OJ1Tk9BtFAXGKMNgn+x3U/0+lFNCTx1NqqEyU4xvsFmPCduzpuJZzs1EralPNGw97zPxX5bnIa5nGGLmJY/6qS9FNcf415CSSinEVHexxXSBB/vNc6SbpZORNRKJ/zokv7wpo3XNWWyNFT8kDC/Eyr9FX9GpRZIQZrwiAbMIuWjqi/Oq1aa7U5g6R6Z8B0v///6K/fqyYQK7zxUZSuiWVfj6sNkorCtFBkcDkgcrVX3L8FUbpQ7r1WU5jLiY+WT6y0Y/LV3kqxTpi6tzgNAe+lHvnlcH9FhBgN6AOjXNNQHyB2gkDAujp1j0nV7Hs/kvAjxysGP0MaJ48c+naFoe5UQR1MEDodZ06xBgSkKDOfx0+pYfhsrPTa7DhrodtbF1XEpjeeuulPvmFqVlweFySDNbJQm4FAPpOdIFJwpPUGoxpzS7Ltpk23V7jhDKbV/wKG08T+hnnrhGz+we77Y9EzH5fX2Mlk/Nc3H58JgB/ZO0MjLuBo+aQZF8fo2nzBsCMyjbSnmYV/8g7EG7SC2mq25etvpT7xkvfBrldlUcX0dd4MsHcdTYQkT86QhIwwpodCXio0YgrG27SlRAA1AknLTAgpPklBzfyjBbm+akTl4CLXfCWJ9hX7ByNM/J5Zf4/s4H//jLANubeZMdV61GcYivyt6dqrtxhZ+P28Ub8eqUdKSImC0vf25Blfrf9+dc2dHDQso6GFtuuf+yf2dH01+AVr+uVYupmel299i43ip7Guimh78KvNJnMty8ynQ5X3peT344Gktvjj0RpFzRQYa1c95oI//wH6aIDNtKE694bQ0FntdjNUuJH9qWZuC4VS7oAPLyZLtwxpv5GNmf1lNcJGotG1r77DGublMAaFQ0fto4P5LUbm/C10Rp0bt7skImGDQWEWeVuKjzS7JYm3EJMKYIXBG+5LzWmqsSC1GKmI+AgHPRxHdx4yhrYtsioeYA0avctUqVI0S27xQvo4Ozo2Y0yj5czVJuhC1b4dLM82mnO5kwCC/d/3niXZa1thd68xBgYWkrzRisOkbpnHDmrnWQ3Ck4v9NvSwhlmG6L/ftueRgyeRIaMip8pRRd1Ph7AyLQ8dPRv8aEUSQjVlOViIobNQgx2ZXDGkUev4i79s1DRtLrv6Dw5woF1ubrl9S4rHTXabOi8ZvBJ1N2+j3NCxSsBJ/sa1Zv7oC8XfS3IJr57cLMJPAsY16jKaqtG9hxe8VR/UnlqadjZarXHnTk1VZPEs7e6ZEQ9Oom+fYsC3oguS99SvCHoQDWEfj4AYzrsQy4JZf6jTG60qgv9Myv5UxOIIysR2MfariNyyFmyFqtpRla4yXchZVNSioD6GbcWMHka2mnVO7gKyq0/Ct0tVJhkRUmTsxSoBcIXPaKkCiiPaIMDtuSRi6i6RsnxQlEQ428HMMC8UMJjZ6aFaIpibRsJ9rsIsQ1JdQKBbL/XwaXOeEk+dkPZGyamEGlPdxVzbXwFDRtdkbNcN1Etb6VDbTSCUPHszTcf2sbH2WRGUpTdAhb8m8GOM5up/n+rVc2wAiXT6V2RDxuJeBldcFHMWL3FOlBNFbyP+pADwaXgOG63NqRhc38JnySDwSIEICzsOKnppg0ZhI1j19BSI4rCVDsWISNtFJiUdoWuVI5uyqWej+ph55jvDevf5/sAn5Raf/9mzp1ATd/o5qVvj3VDvzkkJP37/fB+YI4uFvDwlBADHYuiLDXZh5q2N5o6P6DfJ22beRHId6sxdQCr7hbr9+G59k4i0ERweSsqQHjXUVCh4ueKVKOed99dwTjFz4KP49QPkxyXAaU2Fdj2RiQpb6yo3qw5QWihWV+oOr2NZPF+WutHEYSOqI5mSQXkt0cXJ+tUqg0VHfbc2vMBmXx8VvnHlMmU0vuV2cHEZz8xcNZKA7ktuEUF7zeCaYzEI+LarDhnmqiSXv4MLC04pvTjRXvJr8M1WqA5syYcq8wchCKokcG871T9216dcR6tq+FDeF/x75vQQw3i6EsfSTt4bBUYo4x+WE5O6qSeoqIyqlxlB5mITT6yZTJq9Bt5UGFDRMl8kGdTaE0OsT/EZxP9tlT6F3pAV4yi2EYLSnEXmbZBgxaZHkplnIJ6Zc0Ih6AYaL13xuhHKSonBQgcu0uBKDymvxHyFGzu69y6XItF5tlFGUd5LUFoT+fEon2FyGXx0iyLU7jqiqSqVvqEdxPoiVkVeWHrL5Y9W/vJxa63peWsYgMlXMdr2SnzuTSpH+egC0j4lJzA2ezV1SVnxd9x3gNiDeBusdhDHxdMJMMBq3PBU2LXnzPsrLNFd0wYX9fDkx7AnGCet9UYB/MxpdA8rYQw+vscq7OZWFiyw3b7hgRMUax2jc+g8QMsJ1qTLuI5QBRRDl+cUs1A6xPlLItwhCBeLSv9zbbw3CoQFQ2sddLEwQsPKty9SHjvIOX1aKPW9Y5MKiDV8VoEcbbHntAgrCHfd7/LFuokvJC2uG3SMgVFn6Q9An3AxB+Bh4oLX1yA2gByQ4eazVnSJ4lQ3SoWPsFITi0uFLNzs/KRT1TaovltnlVurHR6gHteCLHGuedDv5/dCdTXDUzUBEXVSWfsLN5UQ0iNycfpgxwfl/6gX+oCRtREOYqjH0vTGxIwzY8DPmd8tehnlpTE9KoNJYNi/pFqx+kMPjRZMZdM+s6ink/wopVIx0iy6caSIyzFA5XBBSenfmRpCSEJAEspASaovtRi4AjP1GecG2Zgl9nVtmuTl8IVrglIvPPPXIET4vX3xPQ0qe5vCwC589a3Q42RUOBN0FiSZdLpbyJ5Zalhs4CghX0BMm4p7NREr7O7P9ZRjGdKE06ZIdtCQR+UfLkhwdMZtJNAKPvHXBaC1mjr4nF1D1m5DVXHMZiPOf2NRSdPvRi9rW7C8DruFgujJKL+u45jpBJFoDLZl/1PtgbaIGh0PgWu9wiAUJb6Prg8Eiy9aob0Q4/y4BCDV8luImCZrKo5cNRXFk77q9GpM8lQpl+d6Ay5nvTbBaR/e3VMBJ9uKImw6YUDR1piWti7x9b0vGOI7Hc/fRLaGgtavOyOZ1xY3162GjSAkiyVKXIUT965kAWv5D3+D2ONuicxE1CU0QFlCUIsBO4u+bXfQREA9PP0Rkslh52XkEvWJ4eziR0I3DzFUGkEdIwf3hYFuSh4tEj0C7AFJva67qxahnZ5HvAnCL3OsPREOD2C1swCeOTnpX6I86XnphX2+vlUhQKXQ2xGXw//ZcQzeNtWSgtvV6ozBmtyC2A8VZtm+8l70MSavS9K4RemvD/HJ8Vp0YB0hUFJ2FwOqUUaFs3vozXh+UNdJA1DNptY9NVjVJSXdfYh8faBd9RVR6Q3j76JwcMvZqAyJFE4H/YLjn7pDfhdhG5zyKZyVXR6SYDIkxMagCsL6et/Mg88Lt6V1KMnaxWqm7XjdiiJKi7oYpFEe1ZdG8nYLmHUhpBXvcY1TB5zQw6AFovIcf2VtX6qqSTWOAO04Jn5bUpYUpL2+m2qLu+v80KXswvLXvDopMhC+6+fobafndpMJ4vFY+TC621OXzrXawv6Q4Kd2wIBNRKSvijm5uEt/0PSyCvj7Z5WO5DXz6vNW1p0p5OxXdXzrujv7Jj31+yDtd0TvdVjUOHxKcqXxR4T3LV1Hfv2BxkGYBG2o6yLxl1nvxH4G9KdVKSyun7op8o3pPaa/gNpoWMbZdWnSKv/QCMIU3Zpn+gc0NJ7xuxPECl2sc5ccf3zspboGDCIw5dBxws80c4klzGnRYqUHrQ9/UBwcvDEPoiyf2enZ1CLfZIkf9253OHb0wJgBH4Sqj6paB1IXmZtF6T8jEVGhxzeRm1/UbNtBE6sftta2FDmGVdYrzoTpTysGJxkRxK3lt9oTmsl+dZRksCrPOaBAepRBVuPmXO9Vcn/I39dX5Wez2KOL3bb21J4AXnfPGcLLPA+EueilOLPZX6owdr7krNTwygfDb8wnKw2WzI/5b9vU/26NED0DKAS/WVXZTH1lwfZ4FbdadDwwU8XLBwgvCQD0h9rVJc5OsoPpaF9LuvQh8F4u3noMbBRwbwBV7jWpXXqAJVZ5uQiaPoIxxdZY4VmkAQoB74rIlmZXFgi2uTornh88dWnG/294J5b2iRzsLMgIwm2N/eJmDJhlYN1QMxCnDC1zTS/Hw5oaLOvDXOEVK0R6GwnBQFMWmXBQcAH3Z3uVmFPv7onxt04Xh1CUjujzxkwSj6kgNgU1Sbrr8SSTMWv/YL2MyUkjsXaksxW2BSGu4yGCdaJkj93IeCrR3+3MtYqcvHh0+kGbQkePaU2Yh1K1hkk1QkNwbZTPgzVjejDbN/I0Ktl68GGM/TbUsYDbDDrAYNG+kKzZ/G7RvajluTP+c774GqxaiLO/4lgNEjKUnqF7KbgsZQ6kVyOaS+0eV/UfgQOM06Yea1RAy3Vo1pXXoGkWrfvBbd6suupFxLscgBElELIgWejkxxlUGcfMbYCbmal93b8uBHthES+9rTg9cMLdhpURRWI5yUugp23v0zjWza6VO0OW41gQ2T7CRxNdfqls2wmYeUoBvMq/g0CuQB/LiwPA9O/IXeHLasBBs40c8hchjtm3khd2g9I7XAACEoxu114dnsWyQ2E5RIENB8lJpbWa8Z3AtimFSzlCxmKBcJVPkyjvpEb2kPC20lSzBxuDZQnk78wlzXZ5YH5O+HwdeXAkmUWsRpPi/RV+ib1Fob1YUHOP4DqIk06oScWF+DGtsi8lI34Z5XunvCLEeq2ok3sHp/9h/RrROKHXxFem1VcwEEPMB6stf21zGlzU0/aff7o6mL9xbRiZ/3a7m9ASp8VDv68dG94yJa9WmWLjsyh/Epq+pg=="),(A=>A.charCodeAt(0)))));function w(A){return[...A].map((A=>A.codePointAt(0)))}const l=Q(C).sort(((A,e)=>A-e)),s=new Set(l),o=new Set(Q(C)),g=function(A){let e=[];for(;;){let t=A();if(0==t)break;e.push(B(t,A))}for(;;){let t=A()-1;if(t<0)break;e.push(r(t,A))}return Object.fromEntries(e.flat())}(C),D=new Set(Q(C,l)),c=function(A){let e=Q(A).sort(((A,e)=>A-e));return function t(){let n=[];for(;;){let B=Q(A,e);if(0==B.length)break;n.push({set:new Set(B),node:t()})}n.sort(((A,e)=>e.set.size-A.set.size));let B=A(),r=B%3;B=B/3|0;let C=!!(1&B);return B>>=1,{branches:n,valid:r,fe0f:C,save:1==B,check:2==B}}()}(C),i=new Set(Q(C,l));function E(A){for(let e of A.split("."))try{let A=w(e);for(let e=A.lastIndexOf(95)-1;e>=0;e--)if(95!==A[e])throw new Error("underscore only allowed at start");if(A.length>=4&&45===A[2]&&45===A[3]&&A.every((A=>A<128)))throw new Error("invalid label extension");let t=w(a(e,(()=>[65039])).normalize("NFD"));for(let A=0,e=-1;A<t.length;A++)if(D.has(t[A])){if(0==A)throw new Error("leading combining mark");if(A==e)throw new Error(`adjacent combining marks "${String.fromCodePoint(...t.slice(A-2,A+1))}"`);if(65039==t[A-1])throw new Error("emoji + combining mark");e=A+1}}catch(A){throw new Error(`Invalid label "${e}": ${A.message}`)}return A}function p(A){return U(a(A,h))}function f(A){return E(p(A))}function k(A){return U(a(A,(A=>A)))}function U(A){return A.normalize("NFC")}function h(A){return A.filter((A=>65039!=A))}function a(A,e){let t=w(A).reverse(),Q=[];for(;t.length;){let A=K(t);if(A){Q.push(...e(A));continue}let n=t.pop();if(s.has(n)){Q.push(n);continue}if(o.has(n))continue;let B=g[n];if(!B)throw new Error(`Disallowed codepoint: 0x${n.toString(16).toUpperCase()}`);Q.push(...B)}return String.fromCodePoint(...Q)}function K(A,e){let t,Q,n=c,B=[],r=A.length;for(e&&(e.length=0);r;){let C=A[--r];if(n=n.branches.find((A=>A.set.has(C)))?.node,!n)break;if(n.save)Q=C;else if(n.check&&C===Q)break;B.push(C),n.fe0f&&(B.push(65039),r>0&&65039==A[r-1]&&r--),n.valid&&(t=B.slice(),2==n.valid&&t.splice(1,1),e&&e.push(...A.slice(r).reverse()),A.length=r)}return t}function M(A){let e=w(A).reverse(),t=[],Q=[];for(;e.length;){let A=K(e,t);if(A)Q.push({type:"emoji",emoji:A,input:t.slice(),cps:h(A)});else{let A=e.pop();if(46===A)Q.push({type:"stop"});else if(s.has(A))Q.push({type:"valid",cps:[A]});else if(o.has(A))Q.push({type:"ignored",cp:A});else{let e=g[A];e?Q.push({type:"mapped",cp:A,cps:e.slice()}):Q.push({type:"disallowed",cp:A})}}}for(let A=0,e=-1;A<Q.length;A++){let t=Q[A];if(I(t.type))if(u(t.cps)){let t=A+1;for(let A=t;A<Q.length;A++){let{type:e,cps:n}=Q[A];if(I(e)){if(!u(n))break;t=A+1}else if("ignored"!==e)break}e<0&&(e=A);let n=Q.slice(e,t),B=n.flatMap((A=>I(A.type)?A.cps:[])),r=String.fromCodePoint(...B),C=U(r);r===C?A=t-1:(Q.splice(e,t-e,{type:"nfc",input:B,cps:w(C),tokens:F(n)}),A=e),e=-1}else e=A;else"emoji"===t.type&&(e=-1)}return F(Q)}function I(A){return"valid"===A||"mapped"===A}function u(A){return A.some((A=>i.has(A)))}function F(A){for(let e=0;e<A.length;e++)if("valid"===A[e].type){let t=e+1;for(;t<A.length&&"valid"===A[t].type;)t++;A.splice(e,t-e,{type:"valid",cps:A.slice(e,t).flatMap((A=>A.cps))})}return A}export{k as ens_beautify,f as ens_normalize,p as ens_normalize_fragment,E as ens_normalize_post_check,M as ens_tokenize};

@@ -1,1 +0,1 @@

function A(A){return 1&A?~A>>1:A>>1}function Q(A,Q){let B=Array(A);for(let t=0,e=-1;t<A;t++)B[t]=e+=1+Q();return B}function B(Q,B){let t=Array(Q);for(let e=0,C=0;e<Q;e++)t[e]=C+=A(B());return t}function t(A,B){let t=Q(A(),A),e=A(),C=Q(e,A),w=function(A,Q){let B=Array(A);for(let t=0;t<A;t++)B[t]=1+Q();return B}(e,A);for(let A=0;A<e;A++)for(let Q=0;Q<w[A];Q++)t.push(C[A]+Q);return B?t.map((A=>B[A])):t}function e(A,Q,t){let e=Array(A).fill().map((()=>[]));for(let C=0;C<Q;C++)B(A,t).forEach(((A,Q)=>e[Q].push(A)));return e}function C(A,Q){let B=1+Q(),t=Q(),C=function(A){let Q=[];for(;;){let B=A();if(0==B)break;Q.push(B)}return Q}(Q);return e(C.length,1+A,Q).flatMap(((A,Q)=>{let[e,...w]=A;return Array(C[Q]).fill().map(((A,Q)=>{let C=Q*t;return[e+Q*B,w.map((A=>A+C))]}))}))}function w(A,Q){return e(1+Q(),1+A,Q).map((A=>[A[0],A.slice(1)]))}var n=function(A){let Q=0;return()=>A[Q++]}(function(A){let Q=0;function B(){return A[Q++]<<8|A[Q++]}let t=B(),e=1,C=[0,1];for(let A=1;A<t;A++)C.push(e+=B());let w=B(),n=Q;Q+=w;let r=0,D=0;function g(){return 0==r&&(D=D<<8|A[Q++],r=8),D>>--r&1}const o=2**31,s=o>>>1,l=o-1;let E=0;for(let A=0;A<31;A++)E=E<<1|g();let c=[],U=0,k=o;for(;;){let A=Math.floor(((E-U+1)*e-1)/k),Q=0,B=t;for(;B-Q>1;){let t=Q+B>>>1;A<C[t]?B=t:Q=t}if(0==Q)break;c.push(Q);let w=U+Math.floor(k*C[Q]/e),n=U+Math.floor(k*C[Q+1]/e)-1;for(;0==((w^n)&s);)E=E<<1&l|g(),w=w<<1&l,n=n<<1&l|1;for(;w&~n&536870912;)E=E&s|E<<1&l>>>1|g(),w=w<<1^s,n=(n^s)<<1|s|1;U=w,k=1+n-w}let i=t-4;return c.map((Q=>{switch(Q-i){case 3:return i+65792+(A[n++]<<16|A[n++]<<8|A[n++]);case 2:return i+256+(A[n++]<<8|A[n++]);case 1:return i+A[n++];default:return Q-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function r(A){return[...A].map((A=>A.codePointAt(0)))}const D=t(n).sort(((A,Q)=>A-Q)),g=new Set(D),o=new Set(t(n)),s=function(A){let Q=[];for(;;){let B=A();if(0==B)break;Q.push(C(B,A))}for(;;){let B=A()-1;if(B<0)break;Q.push(w(B,A))}return Object.fromEntries(Q.flat())}(n),l=new Set(t(n,D)),E=function(A){let Q=t(A).sort(((A,Q)=>A-Q));return function B(){let e=[];for(;;){let C=t(A,Q);if(0==C.length)break;e.push({set:new Set(C),node:B()})}e.sort(((A,Q)=>Q.set.size-A.set.size));let C=A(),w=C%3;C=C/3|0;let n=!!(1&C);return C>>=1,{branches:e,valid:w,fe0f:n,save:1==C,check:2==C}}()}(n);function c(A){return function(A){for(let Q of A.split("."))try{let A=r(Q);for(let Q=A.lastIndexOf(95)-1;Q>=0;Q--)if(95!==A[Q])throw new Error("underscore only allowed at start");if(A.length>=4&&45===A[2]&&45===A[3]&&A.every((A=>A<128)))throw new Error("invalid label extension");let B=r(U(Q,(()=>[65039])).normalize("NFD"));for(let A=0,Q=-1;A<B.length;A++)if(l.has(B[A])){if(0==A)throw new Error("leading combining mark");if(A==Q)throw new Error(`adjacent combining marks "${String.fromCodePoint(...B.slice(A-2,A+1))}"`);if(65039==B[A-1])throw new Error("emoji + combining mark");Q=A+1}}catch(A){throw new Error(`Invalid label "${Q}": ${A.message}`)}return A}(U(A,(A=>A.filter((A=>65039!=A)))).normalize("NFC"))}function U(A,Q){let B=r(A).reverse(),t=[];for(;B.length;){let A=k(B);if(A){t.push(...Q(A));continue}let e=B.pop();if(g.has(e)){t.push(e);continue}if(o.has(e))continue;let C=s[e];if(!C)throw new Error(`Disallowed codepoint: 0x${e.toString(16).toUpperCase()}`);t.push(...C)}return String.fromCodePoint(...t)}function k(A,Q){let B,t,e=E,C=[],w=A.length;for(Q&&(Q.length=0);w;){let n=A[--w];if(e=e.branches.find((A=>A.set.has(n)))?.node,!e)break;if(e.save)t=n;else if(e.check&&n===t)break;C.push(n),e.fe0f&&(C.push(65039),w>0&&65039==A[w-1]&&w--),e.valid&&(B=C.slice(),2==e.valid&&B.splice(1,1),Q&&Q.push(...A.slice(w).reverse()),A.length=w)}return B}new Set(t(n,D));export{c as ens_normalize};
function A(A){return 1&A?~A>>1:A>>1}function Q(A,Q){let B=Array(A);for(let t=0,e=-1;t<A;t++)B[t]=e+=1+Q();return B}function B(Q,B){let t=Array(Q);for(let e=0,C=0;e<Q;e++)t[e]=C+=A(B());return t}function t(A,B){let t=Q(A(),A),e=A(),C=Q(e,A),w=function(A,Q){let B=Array(A);for(let t=0;t<A;t++)B[t]=1+Q();return B}(e,A);for(let A=0;A<e;A++)for(let Q=0;Q<w[A];Q++)t.push(C[A]+Q);return B?t.map((A=>B[A])):t}function e(A,Q,t){let e=Array(A).fill().map((()=>[]));for(let C=0;C<Q;C++)B(A,t).forEach(((A,Q)=>e[Q].push(A)));return e}function C(A,Q){let B=1+Q(),t=Q(),C=function(A){let Q=[];for(;;){let B=A();if(0==B)break;Q.push(B)}return Q}(Q);return e(C.length,1+A,Q).flatMap(((A,Q)=>{let[e,...w]=A;return Array(C[Q]).fill().map(((A,Q)=>{let C=Q*t;return[e+Q*B,w.map((A=>A+C))]}))}))}function w(A,Q){return e(1+Q(),1+A,Q).map((A=>[A[0],A.slice(1)]))}var n=function(A){let Q=0;return()=>A[Q++]}(function(A){let Q=0;function B(){return A[Q++]<<8|A[Q++]}let t=B(),e=1,C=[0,1];for(let A=1;A<t;A++)C.push(e+=B());let w=B(),n=Q;Q+=w;let r=0,D=0;function g(){return 0==r&&(D=D<<8|A[Q++],r=8),D>>--r&1}const o=2**31,s=o>>>1,l=o-1;let E=0;for(let A=0;A<31;A++)E=E<<1|g();let c=[],U=0,k=o;for(;;){let A=Math.floor(((E-U+1)*e-1)/k),Q=0,B=t;for(;B-Q>1;){let t=Q+B>>>1;A<C[t]?B=t:Q=t}if(0==Q)break;c.push(Q);let w=U+Math.floor(k*C[Q]/e),n=U+Math.floor(k*C[Q+1]/e)-1;for(;0==((w^n)&s);)E=E<<1&l|g(),w=w<<1&l,n=n<<1&l|1;for(;w&~n&536870912;)E=E&s|E<<1&l>>>1|g(),w=w<<1^s,n=(n^s)<<1|s|1;U=w,k=1+n-w}let i=t-4;return c.map((Q=>{switch(Q-i){case 3:return i+65792+(A[n++]<<16|A[n++]<<8|A[n++]);case 2:return i+256+(A[n++]<<8|A[n++]);case 1:return i+A[n++];default:return Q-1}}))}(Uint8Array.from(atob("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"),(A=>A.charCodeAt(0)))));function r(A){return[...A].map((A=>A.codePointAt(0)))}const D=t(n).sort(((A,Q)=>A-Q)),g=new Set(D),o=new Set(t(n)),s=function(A){let Q=[];for(;;){let B=A();if(0==B)break;Q.push(C(B,A))}for(;;){let B=A()-1;if(B<0)break;Q.push(w(B,A))}return Object.fromEntries(Q.flat())}(n),l=new Set(t(n,D)),E=function(A){let Q=t(A).sort(((A,Q)=>A-Q));return function B(){let e=[];for(;;){let C=t(A,Q);if(0==C.length)break;e.push({set:new Set(C),node:B()})}e.sort(((A,Q)=>Q.set.size-A.set.size));let C=A(),w=C%3;C=C/3|0;let n=!!(1&C);return C>>=1,{branches:e,valid:w,fe0f:n,save:1==C,check:2==C}}()}(n);function c(A){return function(A){for(let Q of A.split("."))try{let A=r(Q);for(let Q=A.lastIndexOf(95)-1;Q>=0;Q--)if(95!==A[Q])throw new Error("underscore only allowed at start");if(A.length>=4&&45===A[2]&&45===A[3]&&A.every((A=>A<128)))throw new Error("invalid label extension");let B=r(k(Q,(()=>[65039])).normalize("NFD"));for(let A=0,Q=-1;A<B.length;A++)if(l.has(B[A])){if(0==A)throw new Error("leading combining mark");if(A==Q)throw new Error(`adjacent combining marks "${String.fromCodePoint(...B.slice(A-2,A+1))}"`);if(65039==B[A-1])throw new Error("emoji + combining mark");Q=A+1}}catch(A){throw new Error(`Invalid label "${Q}": ${A.message}`)}return A}(k(A,U).normalize("NFC"))}function U(A){return A.filter((A=>65039!=A))}function k(A,Q){let B=r(A).reverse(),t=[];for(;B.length;){let A=i(B);if(A){t.push(...Q(A));continue}let e=B.pop();if(g.has(e)){t.push(e);continue}if(o.has(e))continue;let C=s[e];if(!C)throw new Error(`Disallowed codepoint: 0x${e.toString(16).toUpperCase()}`);t.push(...C)}return String.fromCodePoint(...t)}function i(A,Q){let B,t,e=E,C=[],w=A.length;for(Q&&(Q.length=0);w;){let n=A[--w];if(e=e.branches.find((A=>A.set.has(n)))?.node,!e)break;if(e.save)t=n;else if(e.check&&n===t)break;C.push(n),e.fe0f&&(C.push(65039),w>0&&65039==A[w-1]&&w--),e.valid&&(B=C.slice(),2==e.valid&&B.splice(1,1),Q&&Q.push(...A.slice(w).reverse()),A.length=w)}return B}new Set(t(n,D));export{c as ens_normalize};
{
"name": "@adraffy/ens-normalize",
"version": "1.6.0",
"version": "1.6.1",
"description": "Compact ES6 Ethereum Name Service (ENS) Name Normalizer",

@@ -13,3 +13,3 @@ "keywords": [

"main": "index.js",
"browser": "dist/only-norm.min.js",
"browser": "dist/index.min.js",
"type": "module",

@@ -16,0 +16,0 @@ "repository": {

# ens-normalize.js
0-dependancy Compact ES6 Ethereum Name Service (ENS) Name Normalizer that works in the browser.
* Passes **100%** [ENSIP Norm](https://github.com/adraffy/ensip-norm/) Validation Tests [(Latest)](https://adraffy.github.io/ens-norm-tests/test-validation/output/ens_normalize_1.5.5.html)
* File Size: [`19KB`](./dist/only-norm.min.js)
* [Demo](https://adraffy.github.io/ens-normalize.js/test/resolver.html)
* Passes [**100%**](https://adraffy.github.io/ens-norm-tests/test-validation/output/ens_normalize_1.6.0.html) ENSIP Norm [Validation Tests](https://github.com/adraffy/ensip-norm/)
* File Size: [`19KB`](./dist/only-norm.min.js) (only `ens_normalize`) / [`21KB`](./dist/index.min.js) (`ens_*`)
* [**Demo**](https://adraffy.github.io/ens-normalize.js/test/resolver.html)

@@ -34,3 +34,3 @@ ```Javascript

```Javascript
// fragments can fails ens_normalize due to post_check rules
// fragments fail ens_normalize() due to ens_normalize_post_check() rules
let frag1 = ens_normalize_fragment('AB--');

@@ -37,0 +37,0 @@ let frag2 = ens_normalize_fragment('\u{303}');

import r from './include.js';
import {read_member_array, read_mapped_map, read_emoji_trie} from './decoder.js';
import {explode_cp, filter_fe0f} from './utils.js';
import {explode_cp} from './utils.js';

@@ -51,3 +51,3 @@ const SORTED_VALID = read_member_array(r).sort((a, b) => a - b);

export function ens_normalize_fragment(frag) {
return nfc(process(frag, emoji => emoji.filter(cp => cp != FE0F)));
return nfc(process(frag, filter_fe0f));
}

@@ -75,2 +75,6 @@

function filter_fe0f(cps) {
return cps.filter(cp => cp != FE0F);
}
function process(name, emoji_filter) {

@@ -77,0 +81,0 @@ let input = explode_cp(name).reverse(); // flip so we can pop

@@ -1,2 +0,1 @@

export function hex_cp(cp) {

@@ -14,6 +13,2 @@ return cp.toString(16).toUpperCase();

export function filter_fe0f(cps) {
return cps.filter(cp => cp != 0xFE0F);
}
export function escape_for_html(s, quoter = quote_cp) {

@@ -20,0 +15,0 @@ // printable w/o:

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc