diff --git a/.github/actions/check-pr-status/dist/index.js b/.github/actions/check-pr-status/dist/index.js index 9ada842ef9..5b1217c816 100644 --- a/.github/actions/check-pr-status/dist/index.js +++ b/.github/actions/check-pr-status/dist/index.js @@ -1,7 +1,7 @@ -(()=>{var __webpack_modules__={2079:(module,__unused_webpack_exports,__nccwpck_require__)=>{"use strict";const core=__nccwpck_require__(2481);const github=__nccwpck_require__(707);const BLOCKING_LABELS=[`flag: 💥 Breaking change`,`flag: don't merge`,`flag: documentation`];async function main(){try{const e=github.context.payload.pull_request?.labels??[];const a=e.filter((e=>BLOCKING_LABELS.includes(e.name)));if(a.length>0){core.setFailed(`The PR has been labelled with a blocking label (${a.map((e=>e.name)).join(", ")}).`);return}const p=e.filter((e=>e.name.startsWith("source: "))).length;const t=e.filter((e=>e.name.startsWith("pr: "))).length;if(p!==1){core.setFailed(`The PR must have one and only one 'source:' label.`)}if(t!==1){core.setFailed(`The PR must have one and only one 'pr:' label.`)}}catch(e){core.setFailed(e.message)}}main.BLOCKING_LABELS=BLOCKING_LABELS;if(require.main===require.cache[eval("__filename")]){main()}else{module.exports=main}},6062:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.issue=a.issueCommand=void 0;const s=r(p(2037));const i=p(4309);function issueCommand(e,a,p){const t=new Command(e,a,p);process.stdout.write(t.toString()+s.EOL)}a.issueCommand=issueCommand;function issue(e,a=""){issueCommand(e,{},a)}a.issue=issue;const o="::";class Command{constructor(e,a,p){if(!e){e="missing.command"}this.command=e;this.properties=a;this.message=p}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let a=true;for(const p in this.properties){if(this.properties.hasOwnProperty(p)){const t=this.properties[p];if(t){if(a){a=false}else{e+=","}e+=`${p}=${escapeProperty(t)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2481:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};var s=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.getIDToken=a.getState=a.saveState=a.group=a.endGroup=a.startGroup=a.info=a.notice=a.warning=a.error=a.debug=a.isDebug=a.setFailed=a.setCommandEcho=a.setOutput=a.getBooleanInput=a.getMultilineInput=a.getInput=a.addPath=a.setSecret=a.exportVariable=a.ExitCode=void 0;const i=p(6062);const o=p(4720);const n=p(4309);const l=r(p(2037));const m=r(p(1017));const c=p(7045);var u;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(u=a.ExitCode||(a.ExitCode={}));function exportVariable(e,a){const p=n.toCommandValue(a);process.env[e]=p;const t=process.env["GITHUB_ENV"]||"";if(t){return o.issueFileCommand("ENV",o.prepareKeyValueMessage(e,a))}i.issueCommand("set-env",{name:e},p)}a.exportVariable=exportVariable;function setSecret(e){i.issueCommand("add-mask",{},e)}a.setSecret=setSecret;function addPath(e){const a=process.env["GITHUB_PATH"]||"";if(a){o.issueFileCommand("PATH",e)}else{i.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${m.delimiter}${process.env["PATH"]}`}a.addPath=addPath;function getInput(e,a){const p=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(a&&a.required&&!p){throw new Error(`Input required and not supplied: ${e}`)}if(a&&a.trimWhitespace===false){return p}return p.trim()}a.getInput=getInput;function getMultilineInput(e,a){const p=getInput(e,a).split("\n").filter((e=>e!==""));if(a&&a.trimWhitespace===false){return p}return p.map((e=>e.trim()))}a.getMultilineInput=getMultilineInput;function getBooleanInput(e,a){const p=["true","True","TRUE"];const t=["false","False","FALSE"];const d=getInput(e,a);if(p.includes(d))return true;if(t.includes(d))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}a.getBooleanInput=getBooleanInput;function setOutput(e,a){const p=process.env["GITHUB_OUTPUT"]||"";if(p){return o.issueFileCommand("OUTPUT",o.prepareKeyValueMessage(e,a))}process.stdout.write(l.EOL);i.issueCommand("set-output",{name:e},n.toCommandValue(a))}a.setOutput=setOutput;function setCommandEcho(e){i.issue("echo",e?"on":"off")}a.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=u.Failure;error(e)}a.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}a.isDebug=isDebug;function debug(e){i.issueCommand("debug",{},e)}a.debug=debug;function error(e,a={}){i.issueCommand("error",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.error=error;function warning(e,a={}){i.issueCommand("warning",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.warning=warning;function notice(e,a={}){i.issueCommand("notice",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.notice=notice;function info(e){process.stdout.write(e+l.EOL)}a.info=info;function startGroup(e){i.issue("group",e)}a.startGroup=startGroup;function endGroup(){i.issue("endgroup")}a.endGroup=endGroup;function group(e,a){return s(this,void 0,void 0,(function*(){startGroup(e);let p;try{p=yield a()}finally{endGroup()}return p}))}a.group=group;function saveState(e,a){const p=process.env["GITHUB_STATE"]||"";if(p){return o.issueFileCommand("STATE",o.prepareKeyValueMessage(e,a))}i.issueCommand("save-state",{name:e},n.toCommandValue(a))}a.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}a.getState=getState;function getIDToken(e){return s(this,void 0,void 0,(function*(){return yield c.OidcClient.getIDToken(e)}))}a.getIDToken=getIDToken;var h=p(3176);Object.defineProperty(a,"summary",{enumerable:true,get:function(){return h.summary}});var v=p(3176);Object.defineProperty(a,"markdownSummary",{enumerable:true,get:function(){return v.markdownSummary}});var g=p(2314);Object.defineProperty(a,"toPosixPath",{enumerable:true,get:function(){return g.toPosixPath}});Object.defineProperty(a,"toWin32Path",{enumerable:true,get:function(){return g.toWin32Path}});Object.defineProperty(a,"toPlatformPath",{enumerable:true,get:function(){return g.toPlatformPath}})},4720:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.prepareKeyValueMessage=a.issueFileCommand=void 0;const s=r(p(7147));const i=r(p(2037));const o=p(757);const n=p(4309);function issueFileCommand(e,a){const p=process.env[`GITHUB_${e}`];if(!p){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!s.existsSync(p)){throw new Error(`Missing file at path: ${p}`)}s.appendFileSync(p,`${n.toCommandValue(a)}${i.EOL}`,{encoding:"utf8"})}a.issueFileCommand=issueFileCommand;function prepareKeyValueMessage(e,a){const p=`ghadelimiter_${o.v4()}`;const t=n.toCommandValue(a);if(e.includes(p)){throw new Error(`Unexpected input: name should not contain the delimiter "${p}"`)}if(t.includes(p)){throw new Error(`Unexpected input: value should not contain the delimiter "${p}"`)}return`${e}<<${p}${i.EOL}${t}${i.EOL}${p}`}a.prepareKeyValueMessage=prepareKeyValueMessage},7045:function(e,a,p){"use strict";var t=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.OidcClient=void 0;const d=p(2712);const r=p(4659);const s=p(2481);class OidcClient{static createHttpClient(e=true,a=10){const p={allowRetries:e,maxRetries:a};return new d.HttpClient("actions/oidc-client",[new r.BearerCredentialHandler(OidcClient.getRequestToken())],p)}static getRequestToken(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable")}return e}static getIDTokenUrl(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable")}return e}static getCall(e){var a;return t(this,void 0,void 0,(function*(){const p=OidcClient.createHttpClient();const t=yield p.getJson(e).catch((e=>{throw new Error(`Failed to get ID Token. \n \n Error Code : ${e.statusCode}\n \n Error Message: ${e.result.message}`)}));const d=(a=t.result)===null||a===void 0?void 0:a.value;if(!d){throw new Error("Response json body do not have ID Token field")}return d}))}static getIDToken(e){return t(this,void 0,void 0,(function*(){try{let a=OidcClient.getIDTokenUrl();if(e){const p=encodeURIComponent(e);a=`${a}&audience=${p}`}s.debug(`ID token url is ${a}`);const p=yield OidcClient.getCall(a);s.setSecret(p);return p}catch(e){throw new Error(`Error message: ${e.message}`)}}))}}a.OidcClient=OidcClient},2314:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.toPlatformPath=a.toWin32Path=a.toPosixPath=void 0;const s=r(p(1017));function toPosixPath(e){return e.replace(/[\\]/g,"/")}a.toPosixPath=toPosixPath;function toWin32Path(e){return e.replace(/[/]/g,"\\")}a.toWin32Path=toWin32Path;function toPlatformPath(e){return e.replace(/[/\\]/g,s.sep)}a.toPlatformPath=toPlatformPath},3176:function(e,a,p){"use strict";var t=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.summary=a.markdownSummary=a.SUMMARY_DOCS_URL=a.SUMMARY_ENV_VAR=void 0;const d=p(2037);const r=p(7147);const{access:s,appendFile:i,writeFile:o}=r.promises;a.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";a.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";class Summary{constructor(){this._buffer=""}filePath(){return t(this,void 0,void 0,(function*(){if(this._filePath){return this._filePath}const e=process.env[a.SUMMARY_ENV_VAR];if(!e){throw new Error(`Unable to find environment variable for $${a.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`)}try{yield s(e,r.constants.R_OK|r.constants.W_OK)}catch(a){throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}this._filePath=e;return this._filePath}))}wrap(e,a,p={}){const t=Object.entries(p).map((([e,a])=>` ${e}="${a}"`)).join("");if(!a){return`<${e}${t}>`}return`<${e}${t}>${a}`}write(e){return t(this,void 0,void 0,(function*(){const a=!!(e===null||e===void 0?void 0:e.overwrite);const p=yield this.filePath();const t=a?o:i;yield t(p,this._buffer,{encoding:"utf8"});return this.emptyBuffer()}))}clear(){return t(this,void 0,void 0,(function*(){return this.emptyBuffer().write({overwrite:true})}))}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){this._buffer="";return this}addRaw(e,a=false){this._buffer+=e;return a?this.addEOL():this}addEOL(){return this.addRaw(d.EOL)}addCodeBlock(e,a){const p=Object.assign({},a&&{lang:a});const t=this.wrap("pre",this.wrap("code",e),p);return this.addRaw(t).addEOL()}addList(e,a=false){const p=a?"ol":"ul";const t=e.map((e=>this.wrap("li",e))).join("");const d=this.wrap(p,t);return this.addRaw(d).addEOL()}addTable(e){const a=e.map((e=>{const a=e.map((e=>{if(typeof e==="string"){return this.wrap("td",e)}const{header:a,data:p,colspan:t,rowspan:d}=e;const r=a?"th":"td";const s=Object.assign(Object.assign({},t&&{colspan:t}),d&&{rowspan:d});return this.wrap(r,p,s)})).join("");return this.wrap("tr",a)})).join("");const p=this.wrap("table",a);return this.addRaw(p).addEOL()}addDetails(e,a){const p=this.wrap("details",this.wrap("summary",e)+a);return this.addRaw(p).addEOL()}addImage(e,a,p){const{width:t,height:d}=p||{};const r=Object.assign(Object.assign({},t&&{width:t}),d&&{height:d});const s=this.wrap("img",null,Object.assign({src:e,alt:a},r));return this.addRaw(s).addEOL()}addHeading(e,a){const p=`h${a}`;const t=["h1","h2","h3","h4","h5","h6"].includes(p)?p:"h1";const d=this.wrap(t,e);return this.addRaw(d).addEOL()}addSeparator(){const e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){const e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,a){const p=Object.assign({},a&&{cite:a});const t=this.wrap("blockquote",e,p);return this.addRaw(t).addEOL()}addLink(e,a){const p=this.wrap("a",e,{href:a});return this.addRaw(p).addEOL()}}const n=new Summary;a.markdownSummary=n;a.summary=n},4309:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.toCommandProperties=a.toCommandValue=void 0;function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}a.toCommandValue=toCommandValue;function toCommandProperties(e){if(!Object.keys(e).length){return{}}return{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}}a.toCommandProperties=toCommandProperties},7917:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.Context=void 0;const t=p(7147);const d=p(2037);class Context{constructor(){var e,a,p;this.payload={};if(process.env.GITHUB_EVENT_PATH){if(t.existsSync(process.env.GITHUB_EVENT_PATH)){this.payload=JSON.parse(t.readFileSync(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}))}else{const e=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${e} does not exist${d.EOL}`)}}this.eventName=process.env.GITHUB_EVENT_NAME;this.sha=process.env.GITHUB_SHA;this.ref=process.env.GITHUB_REF;this.workflow=process.env.GITHUB_WORKFLOW;this.action=process.env.GITHUB_ACTION;this.actor=process.env.GITHUB_ACTOR;this.job=process.env.GITHUB_JOB;this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10);this.runId=parseInt(process.env.GITHUB_RUN_ID,10);this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:`https://api.github.com`;this.serverUrl=(a=process.env.GITHUB_SERVER_URL)!==null&&a!==void 0?a:`https://github.com`;this.graphqlUrl=(p=process.env.GITHUB_GRAPHQL_URL)!==null&&p!==void 0?p:`https://api.github.com/graphql`}get issue(){const e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){const[e,a]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:a}}if(this.payload.repository){return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name}}throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}}a.Context=Context},707:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getOctokit=a.context=void 0;const s=r(p(7917));const i=p(5628);a.context=new s.Context;function getOctokit(e,a,...p){const t=i.GitHub.plugin(...p);return new t(i.getOctokitOptions(e,a))}a.getOctokit=getOctokit},9587:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getApiBaseUrl=a.getProxyAgent=a.getAuthString=void 0;const s=r(p(2712));function getAuthString(e,a){if(!e&&!a.auth){throw new Error("Parameter token or opts.auth is required")}else if(e&&a.auth){throw new Error("Parameters token and opts.auth may not both be specified")}return typeof a.auth==="string"?a.auth:`token ${e}`}a.getAuthString=getAuthString;function getProxyAgent(e){const a=new s.HttpClient;return a.getAgent(e)}a.getProxyAgent=getProxyAgent;function getApiBaseUrl(){return process.env["GITHUB_API_URL"]||"https://api.github.com"}a.getApiBaseUrl=getApiBaseUrl},5628:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getOctokitOptions=a.GitHub=a.defaults=a.context=void 0;const s=r(p(7917));const i=r(p(9587));const o=p(500);const n=p(4698);const l=p(5335);a.context=new s.Context;const m=i.getApiBaseUrl();a.defaults={baseUrl:m,request:{agent:i.getProxyAgent(m)}};a.GitHub=o.Octokit.plugin(n.restEndpointMethods,l.paginateRest).defaults(a.defaults);function getOctokitOptions(e,a){const p=Object.assign({},a||{});const t=i.getAuthString(e,p);if(t){p.auth=t}return p}a.getOctokitOptions=getOctokitOptions},4592:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});const p=/^v1\./;const t=/^ghs_/;const d=/^ghu_/;async function auth(e){const a=e.split(/\./).length===3;const r=p.test(e)||t.test(e);const s=d.test(e);const i=a?"app":r?"installation":s?"user-to-server":"oauth";return{type:"token",token:e,tokenType:i}}function withAuthorizationPrefix(e){if(e.split(/\./).length===3){return`bearer ${e}`}return`token ${e}`}async function hook(e,a,p,t){const d=a.endpoint.merge(p,t);d.headers.authorization=withAuthorizationPrefix(e);return a(d)}const r=function createTokenAuth(e){if(!e){throw new Error("[@octokit/auth-token] No token passed to createTokenAuth")}if(typeof e!=="string"){throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string")}e=e.replace(/^(token|bearer) +/i,"");return Object.assign(auth.bind(null,e),{hook:hook.bind(null,e)})};a.createTokenAuth=r},500:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(5581);var d=p(5546);var r=p(125);var s=p(7867);var i=p(4592);function _objectWithoutPropertiesLoose(e,a){if(e==null)return{};var p={};var t=Object.keys(e);var d,r;for(r=0;r=0)continue;p[d]=e[d]}return p}function _objectWithoutProperties(e,a){if(e==null)return{};var p=_objectWithoutPropertiesLoose(e,a);var t,d;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(d=0;d=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,t))continue;p[t]=e[t]}}return p}const o="3.6.0";const n=["authStrategy"];class Octokit{constructor(e={}){const a=new d.Collection;const p={baseUrl:r.request.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:a.bind(null,"request")}),mediaType:{previews:[],format:""}};p.headers["user-agent"]=[e.userAgent,`octokit-core.js/${o} ${t.getUserAgent()}`].filter(Boolean).join(" ");if(e.baseUrl){p.baseUrl=e.baseUrl}if(e.previews){p.mediaType.previews=e.previews}if(e.timeZone){p.headers["time-zone"]=e.timeZone}this.request=r.request.defaults(p);this.graphql=s.withCustomRequest(this.request).defaults(p);this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log);this.hook=a;if(!e.authStrategy){if(!e.auth){this.auth=async()=>({type:"unauthenticated"})}else{const p=i.createTokenAuth(e.auth);a.wrap("request",p.hook);this.auth=p}}else{const{authStrategy:p}=e,t=_objectWithoutProperties(e,n);const d=p(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:t},e.auth));a.wrap("request",d.hook);this.auth=d}const l=this.constructor;l.plugins.forEach((a=>{Object.assign(this,a(this,e))}))}static defaults(e){const a=class extends(this){constructor(...a){const p=a[0]||{};if(typeof e==="function"){super(e(p));return}super(Object.assign({},e,p,p.userAgent&&e.userAgent?{userAgent:`${p.userAgent} ${e.userAgent}`}:null))}};return a}static plugin(...e){var a;const p=this.plugins;const t=(a=class extends(this){},a.plugins=p.concat(e.filter((e=>!p.includes(e)))),a);return t}}Octokit.VERSION=o;Octokit.plugins=[];a.Octokit=Octokit},8969:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(1363);var d=p(5581);function lowercaseKeys(e){if(!e){return{}}return Object.keys(e).reduce(((a,p)=>{a[p.toLowerCase()]=e[p];return a}),{})}function mergeDeep(e,a){const p=Object.assign({},e);Object.keys(a).forEach((d=>{if(t.isPlainObject(a[d])){if(!(d in e))Object.assign(p,{[d]:a[d]});else p[d]=mergeDeep(e[d],a[d])}else{Object.assign(p,{[d]:a[d]})}}));return p}function removeUndefinedProperties(e){for(const a in e){if(e[a]===undefined){delete e[a]}}return e}function merge(e,a,p){if(typeof a==="string"){let[e,t]=a.split(" ");p=Object.assign(t?{method:e,url:t}:{url:e},p)}else{p=Object.assign({},a)}p.headers=lowercaseKeys(p.headers);removeUndefinedProperties(p);removeUndefinedProperties(p.headers);const t=mergeDeep(e||{},p);if(e&&e.mediaType.previews.length){t.mediaType.previews=e.mediaType.previews.filter((e=>!t.mediaType.previews.includes(e))).concat(t.mediaType.previews)}t.mediaType.previews=t.mediaType.previews.map((e=>e.replace(/-preview/,"")));return t}function addQueryParameters(e,a){const p=/\?/.test(e)?"&":"?";const t=Object.keys(a);if(t.length===0){return e}return e+p+t.map((e=>{if(e==="q"){return"q="+a.q.split("+").map(encodeURIComponent).join("+")}return`${e}=${encodeURIComponent(a[e])}`})).join("&")}const r=/\{[^}]+\}/g;function removeNonChars(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function extractUrlVariableNames(e){const a=e.match(r);if(!a){return[]}return a.map(removeNonChars).reduce(((e,a)=>e.concat(a)),[])}function omit(e,a){return Object.keys(e).filter((e=>!a.includes(e))).reduce(((a,p)=>{a[p]=e[p];return a}),{})}function encodeReserved(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map((function(e){if(!/%[0-9A-Fa-f]/.test(e)){e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")}return e})).join("")}function encodeUnreserved(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function encodeValue(e,a,p){a=e==="+"||e==="#"?encodeReserved(a):encodeUnreserved(a);if(p){return encodeUnreserved(p)+"="+a}else{return a}}function isDefined(e){return e!==undefined&&e!==null}function isKeyOperator(e){return e===";"||e==="&"||e==="?"}function getValues(e,a,p,t){var d=e[p],r=[];if(isDefined(d)&&d!==""){if(typeof d==="string"||typeof d==="number"||typeof d==="boolean"){d=d.toString();if(t&&t!=="*"){d=d.substring(0,parseInt(t,10))}r.push(encodeValue(a,d,isKeyOperator(a)?p:""))}else{if(t==="*"){if(Array.isArray(d)){d.filter(isDefined).forEach((function(e){r.push(encodeValue(a,e,isKeyOperator(a)?p:""))}))}else{Object.keys(d).forEach((function(e){if(isDefined(d[e])){r.push(encodeValue(a,d[e],e))}}))}}else{const e=[];if(Array.isArray(d)){d.filter(isDefined).forEach((function(p){e.push(encodeValue(a,p))}))}else{Object.keys(d).forEach((function(p){if(isDefined(d[p])){e.push(encodeUnreserved(p));e.push(encodeValue(a,d[p].toString()))}}))}if(isKeyOperator(a)){r.push(encodeUnreserved(p)+"="+e.join(","))}else if(e.length!==0){r.push(e.join(","))}}}}else{if(a===";"){if(isDefined(d)){r.push(encodeUnreserved(p))}}else if(d===""&&(a==="&"||a==="?")){r.push(encodeUnreserved(p)+"=")}else if(d===""){r.push("")}}return r}function parseUrl(e){return{expand:expand.bind(null,e)}}function expand(e,a){var p=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,(function(e,t,d){if(t){let e="";const d=[];if(p.indexOf(t.charAt(0))!==-1){e=t.charAt(0);t=t.substr(1)}t.split(/,/g).forEach((function(p){var t=/([^:\*]*)(?::(\d+)|(\*))?/.exec(p);d.push(getValues(a,e,t[1],t[2]||t[3]))}));if(e&&e!=="+"){var r=",";if(e==="?"){r="&"}else if(e!=="#"){r=e}return(d.length!==0?e:"")+d.join(r)}else{return d.join(",")}}else{return encodeReserved(d)}}))}function parse(e){let a=e.method.toUpperCase();let p=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}");let t=Object.assign({},e.headers);let d;let r=omit(e,["method","baseUrl","url","headers","request","mediaType"]);const s=extractUrlVariableNames(p);p=parseUrl(p).expand(r);if(!/^http/.test(p)){p=e.baseUrl+p}const i=Object.keys(e).filter((e=>s.includes(e))).concat("baseUrl");const o=omit(r,i);const n=/application\/octet-stream/i.test(t.accept);if(!n){if(e.mediaType.format){t.accept=t.accept.split(/,/).map((a=>a.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`))).join(",")}if(e.mediaType.previews.length){const a=t.accept.match(/[\w-]+(?=-preview)/g)||[];t.accept=a.concat(e.mediaType.previews).map((a=>{const p=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${a}-preview${p}`})).join(",")}}if(["GET","HEAD"].includes(a)){p=addQueryParameters(p,o)}else{if("data"in o){d=o.data}else{if(Object.keys(o).length){d=o}else{t["content-length"]=0}}}if(!t["content-type"]&&typeof d!=="undefined"){t["content-type"]="application/json; charset=utf-8"}if(["PATCH","PUT"].includes(a)&&typeof d==="undefined"){d=""}return Object.assign({method:a,url:p,headers:t},typeof d!=="undefined"?{body:d}:null,e.request?{request:e.request}:null)}function endpointWithDefaults(e,a,p){return parse(merge(e,a,p))}function withDefaults(e,a){const p=merge(e,a);const t=endpointWithDefaults.bind(null,p);return Object.assign(t,{DEFAULTS:p,defaults:withDefaults.bind(null,p),merge:merge.bind(null,p),parse:parse})}const s="6.0.12";const i=`octokit-endpoint.js/${s} ${d.getUserAgent()}`;const o={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":i},mediaType:{format:"",previews:[]}};const n=withDefaults(null,o);a.endpoint=n},7867:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(125);var d=p(5581);const r="4.8.0";function _buildMessageForResponseErrors(e){return`Request failed due to following response errors:\n`+e.errors.map((e=>` - ${e.message}`)).join("\n")}class GraphqlResponseError extends Error{constructor(e,a,p){super(_buildMessageForResponseErrors(p));this.request=e;this.headers=a;this.response=p;this.name="GraphqlResponseError";this.errors=p.errors;this.data=p.data;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}}const s=["method","baseUrl","url","headers","request","query","mediaType"];const i=["query","method","url"];const o=/\/api\/v3\/?$/;function graphql(e,a,p){if(p){if(typeof a==="string"&&"query"in p){return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`))}for(const e in p){if(!i.includes(e))continue;return Promise.reject(new Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}}const t=typeof a==="string"?Object.assign({query:a},p):a;const d=Object.keys(t).reduce(((e,a)=>{if(s.includes(a)){e[a]=t[a];return e}if(!e.variables){e.variables={}}e.variables[a]=t[a];return e}),{});const r=t.baseUrl||e.endpoint.DEFAULTS.baseUrl;if(o.test(r)){d.url=r.replace(o,"/api/graphql")}return e(d).then((e=>{if(e.data.errors){const a={};for(const p of Object.keys(e.headers)){a[p]=e.headers[p]}throw new GraphqlResponseError(d,a,e.data)}return e.data.data}))}function withDefaults(e,a){const p=e.defaults(a);const newApi=(e,a)=>graphql(p,e,a);return Object.assign(newApi,{defaults:withDefaults.bind(null,p),endpoint:t.request.endpoint})}const n=withDefaults(t.request,{headers:{"user-agent":`octokit-graphql.js/${r} ${d.getUserAgent()}`},method:"POST",url:"/graphql"});function withCustomRequest(e){return withDefaults(e,{method:"POST",url:"/graphql"})}a.GraphqlResponseError=GraphqlResponseError;a.graphql=n;a.withCustomRequest=withCustomRequest},5335:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});const p="2.21.3";function ownKeys(e,a){var p=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),p.push.apply(p,t)}return p}function _objectSpread2(e){for(var a=1;a({async next(){if(!i)return{done:true};try{const e=await d({method:r,url:i,headers:s});const a=normalizePaginatedListResponse(e);i=((a.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1];return{value:a}}catch(e){if(e.status!==409)throw e;i="";return{value:{status:200,headers:{},data:[]}}}}})}}function paginate(e,a,p,t){if(typeof p==="function"){t=p;p=undefined}return gather(e,[],iterator(e,a,p)[Symbol.asyncIterator](),t)}function gather(e,a,p,t){return p.next().then((d=>{if(d.done){return a}let r=false;function done(){r=true}a=a.concat(t?t(d.value,done):d.value.data);if(r){return a}return gather(e,a,p,t)}))}const t=Object.assign(paginate,{iterator:iterator});const d=["GET /app/hook/deliveries","GET /app/installations","GET /applications/grants","GET /authorizations","GET /enterprises/{enterprise}/actions/permissions/organizations","GET /enterprises/{enterprise}/actions/runner-groups","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners","GET /enterprises/{enterprise}/actions/runners","GET /enterprises/{enterprise}/audit-log","GET /enterprises/{enterprise}/secret-scanning/alerts","GET /enterprises/{enterprise}/settings/billing/advanced-security","GET /events","GET /gists","GET /gists/public","GET /gists/starred","GET /gists/{gist_id}/comments","GET /gists/{gist_id}/commits","GET /gists/{gist_id}/forks","GET /installation/repositories","GET /issues","GET /licenses","GET /marketplace_listing/plans","GET /marketplace_listing/plans/{plan_id}/accounts","GET /marketplace_listing/stubbed/plans","GET /marketplace_listing/stubbed/plans/{plan_id}/accounts","GET /networks/{owner}/{repo}/events","GET /notifications","GET /organizations","GET /orgs/{org}/actions/cache/usage-by-repository","GET /orgs/{org}/actions/permissions/repositories","GET /orgs/{org}/actions/runner-groups","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners","GET /orgs/{org}/actions/runners","GET /orgs/{org}/actions/secrets","GET /orgs/{org}/actions/secrets/{secret_name}/repositories","GET /orgs/{org}/audit-log","GET /orgs/{org}/blocks","GET /orgs/{org}/code-scanning/alerts","GET /orgs/{org}/codespaces","GET /orgs/{org}/credential-authorizations","GET /orgs/{org}/dependabot/secrets","GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories","GET /orgs/{org}/events","GET /orgs/{org}/external-groups","GET /orgs/{org}/failed_invitations","GET /orgs/{org}/hooks","GET /orgs/{org}/hooks/{hook_id}/deliveries","GET /orgs/{org}/installations","GET /orgs/{org}/invitations","GET /orgs/{org}/invitations/{invitation_id}/teams","GET /orgs/{org}/issues","GET /orgs/{org}/members","GET /orgs/{org}/migrations","GET /orgs/{org}/migrations/{migration_id}/repositories","GET /orgs/{org}/outside_collaborators","GET /orgs/{org}/packages","GET /orgs/{org}/packages/{package_type}/{package_name}/versions","GET /orgs/{org}/projects","GET /orgs/{org}/public_members","GET /orgs/{org}/repos","GET /orgs/{org}/secret-scanning/alerts","GET /orgs/{org}/settings/billing/advanced-security","GET /orgs/{org}/team-sync/groups","GET /orgs/{org}/teams","GET /orgs/{org}/teams/{team_slug}/discussions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions","GET /orgs/{org}/teams/{team_slug}/invitations","GET /orgs/{org}/teams/{team_slug}/members","GET /orgs/{org}/teams/{team_slug}/projects","GET /orgs/{org}/teams/{team_slug}/repos","GET /orgs/{org}/teams/{team_slug}/teams","GET /projects/columns/{column_id}/cards","GET /projects/{project_id}/collaborators","GET /projects/{project_id}/columns","GET /repos/{owner}/{repo}/actions/artifacts","GET /repos/{owner}/{repo}/actions/caches","GET /repos/{owner}/{repo}/actions/runners","GET /repos/{owner}/{repo}/actions/runs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts","GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs","GET /repos/{owner}/{repo}/actions/secrets","GET /repos/{owner}/{repo}/actions/workflows","GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs","GET /repos/{owner}/{repo}/assignees","GET /repos/{owner}/{repo}/branches","GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations","GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs","GET /repos/{owner}/{repo}/code-scanning/alerts","GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances","GET /repos/{owner}/{repo}/code-scanning/analyses","GET /repos/{owner}/{repo}/codespaces","GET /repos/{owner}/{repo}/codespaces/devcontainers","GET /repos/{owner}/{repo}/codespaces/secrets","GET /repos/{owner}/{repo}/collaborators","GET /repos/{owner}/{repo}/comments","GET /repos/{owner}/{repo}/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/commits","GET /repos/{owner}/{repo}/commits/{commit_sha}/comments","GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls","GET /repos/{owner}/{repo}/commits/{ref}/check-runs","GET /repos/{owner}/{repo}/commits/{ref}/check-suites","GET /repos/{owner}/{repo}/commits/{ref}/status","GET /repos/{owner}/{repo}/commits/{ref}/statuses","GET /repos/{owner}/{repo}/contributors","GET /repos/{owner}/{repo}/dependabot/secrets","GET /repos/{owner}/{repo}/deployments","GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses","GET /repos/{owner}/{repo}/environments","GET /repos/{owner}/{repo}/events","GET /repos/{owner}/{repo}/forks","GET /repos/{owner}/{repo}/git/matching-refs/{ref}","GET /repos/{owner}/{repo}/hooks","GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries","GET /repos/{owner}/{repo}/invitations","GET /repos/{owner}/{repo}/issues","GET /repos/{owner}/{repo}/issues/comments","GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/issues/events","GET /repos/{owner}/{repo}/issues/{issue_number}/comments","GET /repos/{owner}/{repo}/issues/{issue_number}/events","GET /repos/{owner}/{repo}/issues/{issue_number}/labels","GET /repos/{owner}/{repo}/issues/{issue_number}/reactions","GET /repos/{owner}/{repo}/issues/{issue_number}/timeline","GET /repos/{owner}/{repo}/keys","GET /repos/{owner}/{repo}/labels","GET /repos/{owner}/{repo}/milestones","GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels","GET /repos/{owner}/{repo}/notifications","GET /repos/{owner}/{repo}/pages/builds","GET /repos/{owner}/{repo}/projects","GET /repos/{owner}/{repo}/pulls","GET /repos/{owner}/{repo}/pulls/comments","GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/pulls/{pull_number}/comments","GET /repos/{owner}/{repo}/pulls/{pull_number}/commits","GET /repos/{owner}/{repo}/pulls/{pull_number}/files","GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments","GET /repos/{owner}/{repo}/releases","GET /repos/{owner}/{repo}/releases/{release_id}/assets","GET /repos/{owner}/{repo}/releases/{release_id}/reactions","GET /repos/{owner}/{repo}/secret-scanning/alerts","GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations","GET /repos/{owner}/{repo}/stargazers","GET /repos/{owner}/{repo}/subscribers","GET /repos/{owner}/{repo}/tags","GET /repos/{owner}/{repo}/teams","GET /repos/{owner}/{repo}/topics","GET /repositories","GET /repositories/{repository_id}/environments/{environment_name}/secrets","GET /search/code","GET /search/commits","GET /search/issues","GET /search/labels","GET /search/repositories","GET /search/topics","GET /search/users","GET /teams/{team_id}/discussions","GET /teams/{team_id}/discussions/{discussion_number}/comments","GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /teams/{team_id}/discussions/{discussion_number}/reactions","GET /teams/{team_id}/invitations","GET /teams/{team_id}/members","GET /teams/{team_id}/projects","GET /teams/{team_id}/repos","GET /teams/{team_id}/teams","GET /user/blocks","GET /user/codespaces","GET /user/codespaces/secrets","GET /user/emails","GET /user/followers","GET /user/following","GET /user/gpg_keys","GET /user/installations","GET /user/installations/{installation_id}/repositories","GET /user/issues","GET /user/keys","GET /user/marketplace_purchases","GET /user/marketplace_purchases/stubbed","GET /user/memberships/orgs","GET /user/migrations","GET /user/migrations/{migration_id}/repositories","GET /user/orgs","GET /user/packages","GET /user/packages/{package_type}/{package_name}/versions","GET /user/public_emails","GET /user/repos","GET /user/repository_invitations","GET /user/starred","GET /user/subscriptions","GET /user/teams","GET /users","GET /users/{username}/events","GET /users/{username}/events/orgs/{org}","GET /users/{username}/events/public","GET /users/{username}/followers","GET /users/{username}/following","GET /users/{username}/gists","GET /users/{username}/gpg_keys","GET /users/{username}/keys","GET /users/{username}/orgs","GET /users/{username}/packages","GET /users/{username}/projects","GET /users/{username}/received_events","GET /users/{username}/received_events/public","GET /users/{username}/repos","GET /users/{username}/starred","GET /users/{username}/subscriptions"];function isPaginatingEndpoint(e){if(typeof e==="string"){return d.includes(e)}else{return false}}function paginateRest(e){return{paginate:Object.assign(paginate.bind(null,e),{iterator:iterator.bind(null,e)})}}paginateRest.VERSION=p;a.composePaginateRest=t;a.isPaginatingEndpoint=isPaginatingEndpoint;a.paginateRest=paginateRest;a.paginatingEndpoints=d},4698:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function ownKeys(e,a){var p=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);if(a){t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))}p.push.apply(p,t)}return p}function _objectSpread2(e){for(var a=1;a{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=p(3383);var d=_interopDefault(p(8995));const r=d((e=>console.warn(e)));const s=d((e=>console.warn(e)));class RequestError extends Error{constructor(e,a,p){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="HttpError";this.status=a;let d;if("headers"in p&&typeof p.headers!=="undefined"){d=p.headers}if("response"in p){this.response=p.response;d=p.response.headers}const i=Object.assign({},p.request);if(p.request.headers.authorization){i.headers=Object.assign({},p.request.headers,{authorization:p.request.headers.authorization.replace(/ .*$/," [REDACTED]")})}i.url=i.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]");this.request=i;Object.defineProperty(this,"code",{get(){r(new t.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));return a}});Object.defineProperty(this,"headers",{get(){s(new t.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));return d||{}}})}}a.RequestError=RequestError},125:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=p(8969);var d=p(5581);var r=p(1363);var s=_interopDefault(p(8885));var i=p(1280);const o="5.6.3";function getBufferResponse(e){return e.arrayBuffer()}function fetchWrapper(e){const a=e.request&&e.request.log?e.request.log:console;if(r.isPlainObject(e.body)||Array.isArray(e.body)){e.body=JSON.stringify(e.body)}let p={};let t;let d;const o=e.request&&e.request.fetch||s;return o(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then((async r=>{d=r.url;t=r.status;for(const e of r.headers){p[e[0]]=e[1]}if("deprecation"in p){const t=p.link&&p.link.match(/<([^>]+)>; rel="deprecation"/);const d=t&&t.pop();a.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${p.sunset}${d?`. See ${d}`:""}`)}if(t===204||t===205){return}if(e.method==="HEAD"){if(t<400){return}throw new i.RequestError(r.statusText,t,{response:{url:d,status:t,headers:p,data:undefined},request:e})}if(t===304){throw new i.RequestError("Not modified",t,{response:{url:d,status:t,headers:p,data:await getResponseData(r)},request:e})}if(t>=400){const a=await getResponseData(r);const s=new i.RequestError(toErrorMessage(a),t,{response:{url:d,status:t,headers:p,data:a},request:e});throw s}return getResponseData(r)})).then((e=>({status:t,url:d,headers:p,data:e}))).catch((a=>{if(a instanceof i.RequestError)throw a;throw new i.RequestError(a.message,500,{request:e})}))}async function getResponseData(e){const a=e.headers.get("content-type");if(/application\/json/.test(a)){return e.json()}if(!a||/^text\/|charset=utf-8$/.test(a)){return e.text()}return getBufferResponse(e)}function toErrorMessage(e){if(typeof e==="string")return e;if("message"in e){if(Array.isArray(e.errors)){return`${e.message}: ${e.errors.map(JSON.stringify).join(", ")}`}return e.message}return`Unknown error: ${JSON.stringify(e)}`}function withDefaults(e,a){const p=e.defaults(a);const newApi=function(e,a){const t=p.merge(e,a);if(!t.request||!t.request.hook){return fetchWrapper(p.parse(t))}const request=(e,a)=>fetchWrapper(p.parse(p.merge(e,a)));Object.assign(request,{endpoint:p,defaults:withDefaults.bind(null,p)});return t.request.hook(request,t)};return Object.assign(newApi,{endpoint:p,defaults:withDefaults.bind(null,p)})}const n=withDefaults(t.endpoint,{headers:{"user-agent":`octokit-request.js/${o} ${d.getUserAgent()}`}});a.request=n},4659:function(e,a){"use strict";var p=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.PersonalAccessTokenCredentialHandler=a.BearerCredentialHandler=a.BasicCredentialHandler=void 0;class BasicCredentialHandler{constructor(e,a){this.username=e;this.password=a}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.BasicCredentialHandler=BasicCredentialHandler;class BearerCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Bearer ${this.token}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.BearerCredentialHandler=BearerCredentialHandler;class PersonalAccessTokenCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.PersonalAccessTokenCredentialHandler=PersonalAccessTokenCredentialHandler},2712:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};var s=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.HttpClient=a.isHttps=a.HttpClientResponse=a.HttpClientError=a.getProxyUrl=a.MediaTypes=a.Headers=a.HttpCodes=void 0;const i=r(p(3685));const o=r(p(5687));const n=r(p(2722));const l=r(p(391));var m;(function(e){e[e["OK"]=200]="OK";e[e["MultipleChoices"]=300]="MultipleChoices";e[e["MovedPermanently"]=301]="MovedPermanently";e[e["ResourceMoved"]=302]="ResourceMoved";e[e["SeeOther"]=303]="SeeOther";e[e["NotModified"]=304]="NotModified";e[e["UseProxy"]=305]="UseProxy";e[e["SwitchProxy"]=306]="SwitchProxy";e[e["TemporaryRedirect"]=307]="TemporaryRedirect";e[e["PermanentRedirect"]=308]="PermanentRedirect";e[e["BadRequest"]=400]="BadRequest";e[e["Unauthorized"]=401]="Unauthorized";e[e["PaymentRequired"]=402]="PaymentRequired";e[e["Forbidden"]=403]="Forbidden";e[e["NotFound"]=404]="NotFound";e[e["MethodNotAllowed"]=405]="MethodNotAllowed";e[e["NotAcceptable"]=406]="NotAcceptable";e[e["ProxyAuthenticationRequired"]=407]="ProxyAuthenticationRequired";e[e["RequestTimeout"]=408]="RequestTimeout";e[e["Conflict"]=409]="Conflict";e[e["Gone"]=410]="Gone";e[e["TooManyRequests"]=429]="TooManyRequests";e[e["InternalServerError"]=500]="InternalServerError";e[e["NotImplemented"]=501]="NotImplemented";e[e["BadGateway"]=502]="BadGateway";e[e["ServiceUnavailable"]=503]="ServiceUnavailable";e[e["GatewayTimeout"]=504]="GatewayTimeout"})(m=a.HttpCodes||(a.HttpCodes={}));var c;(function(e){e["Accept"]="accept";e["ContentType"]="content-type"})(c=a.Headers||(a.Headers={}));var u;(function(e){e["ApplicationJson"]="application/json"})(u=a.MediaTypes||(a.MediaTypes={}));function getProxyUrl(e){const a=n.getProxyUrl(new URL(e));return a?a.href:""}a.getProxyUrl=getProxyUrl;const h=[m.MovedPermanently,m.ResourceMoved,m.SeeOther,m.TemporaryRedirect,m.PermanentRedirect];const v=[m.BadGateway,m.ServiceUnavailable,m.GatewayTimeout];const g=["OPTIONS","GET","DELETE","HEAD"];const w=10;const b=5;class HttpClientError extends Error{constructor(e,a){super(e);this.name="HttpClientError";this.statusCode=a;Object.setPrototypeOf(this,HttpClientError.prototype)}}a.HttpClientError=HttpClientError;class HttpClientResponse{constructor(e){this.message=e}readBody(){return s(this,void 0,void 0,(function*(){return new Promise((e=>s(this,void 0,void 0,(function*(){let a=Buffer.alloc(0);this.message.on("data",(e=>{a=Buffer.concat([a,e])}));this.message.on("end",(()=>{e(a.toString())}))}))))}))}}a.HttpClientResponse=HttpClientResponse;function isHttps(e){const a=new URL(e);return a.protocol==="https:"}a.isHttps=isHttps;class HttpClient{constructor(e,a,p){this._ignoreSslError=false;this._allowRedirects=true;this._allowRedirectDowngrade=false;this._maxRedirects=50;this._allowRetries=false;this._maxRetries=1;this._keepAlive=false;this._disposed=false;this.userAgent=e;this.handlers=a||[];this.requestOptions=p;if(p){if(p.ignoreSslError!=null){this._ignoreSslError=p.ignoreSslError}this._socketTimeout=p.socketTimeout;if(p.allowRedirects!=null){this._allowRedirects=p.allowRedirects}if(p.allowRedirectDowngrade!=null){this._allowRedirectDowngrade=p.allowRedirectDowngrade}if(p.maxRedirects!=null){this._maxRedirects=Math.max(p.maxRedirects,0)}if(p.keepAlive!=null){this._keepAlive=p.keepAlive}if(p.allowRetries!=null){this._allowRetries=p.allowRetries}if(p.maxRetries!=null){this._maxRetries=p.maxRetries}}}options(e,a){return s(this,void 0,void 0,(function*(){return this.request("OPTIONS",e,null,a||{})}))}get(e,a){return s(this,void 0,void 0,(function*(){return this.request("GET",e,null,a||{})}))}del(e,a){return s(this,void 0,void 0,(function*(){return this.request("DELETE",e,null,a||{})}))}post(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("POST",e,a,p||{})}))}patch(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("PATCH",e,a,p||{})}))}put(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("PUT",e,a,p||{})}))}head(e,a){return s(this,void 0,void 0,(function*(){return this.request("HEAD",e,null,a||{})}))}sendStream(e,a,p,t){return s(this,void 0,void 0,(function*(){return this.request(e,a,p,t)}))}getJson(e,a={}){return s(this,void 0,void 0,(function*(){a[c.Accept]=this._getExistingOrDefaultHeader(a,c.Accept,u.ApplicationJson);const p=yield this.get(e,a);return this._processResponse(p,this.requestOptions)}))}postJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.post(e,t,p);return this._processResponse(d,this.requestOptions)}))}putJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.put(e,t,p);return this._processResponse(d,this.requestOptions)}))}patchJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.patch(e,t,p);return this._processResponse(d,this.requestOptions)}))}request(e,a,p,t){return s(this,void 0,void 0,(function*(){if(this._disposed){throw new Error("Client has already been disposed.")}const d=new URL(a);let r=this._prepareRequest(e,d,t);const s=this._allowRetries&&g.includes(e)?this._maxRetries+1:1;let i=0;let o;do{o=yield this.requestRaw(r,p);if(o&&o.message&&o.message.statusCode===m.Unauthorized){let e;for(const a of this.handlers){if(a.canHandleAuthentication(o)){e=a;break}}if(e){return e.handleAuthentication(this,r,p)}else{return o}}let a=this._maxRedirects;while(o.message.statusCode&&h.includes(o.message.statusCode)&&this._allowRedirects&&a>0){const s=o.message.headers["location"];if(!s){break}const i=new URL(s);if(d.protocol==="https:"&&d.protocol!==i.protocol&&!this._allowRedirectDowngrade){throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.")}yield o.readBody();if(i.hostname!==d.hostname){for(const e in t){if(e.toLowerCase()==="authorization"){delete t[e]}}}r=this._prepareRequest(e,i,t);o=yield this.requestRaw(r,p);a--}if(!o.message.statusCode||!v.includes(o.message.statusCode)){return o}i+=1;if(i{function callbackForResult(e,a){if(e){t(e)}else if(!a){t(new Error("Unknown error"))}else{p(a)}}this.requestRawWithCallback(e,a,callbackForResult)}))}))}requestRawWithCallback(e,a,p){if(typeof a==="string"){if(!e.options.headers){e.options.headers={}}e.options.headers["Content-Length"]=Buffer.byteLength(a,"utf8")}let t=false;function handleResult(e,a){if(!t){t=true;p(e,a)}}const d=e.httpModule.request(e.options,(e=>{const a=new HttpClientResponse(e);handleResult(undefined,a)}));let r;d.on("socket",(e=>{r=e}));d.setTimeout(this._socketTimeout||3*6e4,(()=>{if(r){r.end()}handleResult(new Error(`Request timeout: ${e.options.path}`))}));d.on("error",(function(e){handleResult(e)}));if(a&&typeof a==="string"){d.write(a,"utf8")}if(a&&typeof a!=="string"){a.on("close",(function(){d.end()}));a.pipe(d)}else{d.end()}}getAgent(e){const a=new URL(e);return this._getAgent(a)}_prepareRequest(e,a,p){const t={};t.parsedUrl=a;const d=t.parsedUrl.protocol==="https:";t.httpModule=d?o:i;const r=d?443:80;t.options={};t.options.host=t.parsedUrl.hostname;t.options.port=t.parsedUrl.port?parseInt(t.parsedUrl.port):r;t.options.path=(t.parsedUrl.pathname||"")+(t.parsedUrl.search||"");t.options.method=e;t.options.headers=this._mergeHeaders(p);if(this.userAgent!=null){t.options.headers["user-agent"]=this.userAgent}t.options.agent=this._getAgent(t.parsedUrl);if(this.handlers){for(const e of this.handlers){e.prepareRequest(t.options)}}return t}_mergeHeaders(e){if(this.requestOptions&&this.requestOptions.headers){return Object.assign({},lowercaseKeys(this.requestOptions.headers),lowercaseKeys(e||{}))}return lowercaseKeys(e||{})}_getExistingOrDefaultHeader(e,a,p){let t;if(this.requestOptions&&this.requestOptions.headers){t=lowercaseKeys(this.requestOptions.headers)[a]}return e[a]||t||p}_getAgent(e){let a;const p=n.getProxyUrl(e);const t=p&&p.hostname;if(this._keepAlive&&t){a=this._proxyAgent}if(this._keepAlive&&!t){a=this._agent}if(a){return a}const d=e.protocol==="https:";let r=100;if(this.requestOptions){r=this.requestOptions.maxSockets||i.globalAgent.maxSockets}if(p&&p.hostname){const e={maxSockets:r,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(p.username||p.password)&&{proxyAuth:`${p.username}:${p.password}`}),{host:p.hostname,port:p.port})};let t;const s=p.protocol==="https:";if(d){t=s?l.httpsOverHttps:l.httpsOverHttp}else{t=s?l.httpOverHttps:l.httpOverHttp}a=t(e);this._proxyAgent=a}if(this._keepAlive&&!a){const e={keepAlive:this._keepAlive,maxSockets:r};a=d?new o.Agent(e):new i.Agent(e);this._agent=a}if(!a){a=d?o.globalAgent:i.globalAgent}if(d&&this._ignoreSslError){a.options=Object.assign(a.options||{},{rejectUnauthorized:false})}return a}_performExponentialBackoff(e){return s(this,void 0,void 0,(function*(){e=Math.min(w,e);const a=b*Math.pow(2,e);return new Promise((e=>setTimeout((()=>e()),a)))}))}_processResponse(e,a){return s(this,void 0,void 0,(function*(){return new Promise(((p,t)=>s(this,void 0,void 0,(function*(){const d=e.message.statusCode||0;const r={statusCode:d,result:null,headers:{}};if(d===m.NotFound){p(r)}function dateTimeDeserializer(e,a){if(typeof a==="string"){const e=new Date(a);if(!isNaN(e.valueOf())){return e}}return a}let s;let i;try{i=yield e.readBody();if(i&&i.length>0){if(a&&a.deserializeDates){s=JSON.parse(i,dateTimeDeserializer)}else{s=JSON.parse(i)}r.result=s}r.headers=e.message.headers}catch(e){}if(d>299){let e;if(s&&s.message){e=s.message}else if(i&&i.length>0){e=i}else{e=`Failed request: (${d})`}const a=new HttpClientError(e,d);a.result=r.result;t(a)}else{p(r)}}))))}))}}a.HttpClient=HttpClient;const lowercaseKeys=e=>Object.keys(e).reduce(((a,p)=>(a[p.toLowerCase()]=e[p],a)),{})},2722:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.checkBypass=a.getProxyUrl=void 0;function getProxyUrl(e){const a=e.protocol==="https:";if(checkBypass(e)){return undefined}const p=(()=>{if(a){return process.env["https_proxy"]||process.env["HTTPS_PROXY"]}else{return process.env["http_proxy"]||process.env["HTTP_PROXY"]}})();if(p){return new URL(p)}else{return undefined}}a.getProxyUrl=getProxyUrl;function checkBypass(e){if(!e.hostname){return false}const a=process.env["no_proxy"]||process.env["NO_PROXY"]||"";if(!a){return false}let p;if(e.port){p=Number(e.port)}else if(e.protocol==="http:"){p=80}else if(e.protocol==="https:"){p=443}const t=[e.hostname.toUpperCase()];if(typeof p==="number"){t.push(`${t[0]}:${p}`)}for(const e of a.split(",").map((e=>e.trim().toUpperCase())).filter((e=>e))){if(t.some((a=>a===e))){return true}}return false}a.checkBypass=checkBypass},5546:(e,a,p)=>{var t=p(5109);var d=p(7614);var r=p(6538);var s=Function.bind;var i=s.bind(s);function bindApi(e,a,p){var t=i(r,null).apply(null,p?[a,p]:[a]);e.api={remove:t};e.remove=t;["before","error","after","wrap"].forEach((function(t){var r=p?[a,t,p]:[a,t];e[t]=e.api[t]=i(d,null).apply(null,r)}))}function HookSingular(){var e="h";var a={registry:{}};var p=t.bind(null,a,e);bindApi(p,a,e);return p}function HookCollection(){var e={registry:{}};var a=t.bind(null,e);bindApi(a,e);return a}var o=false;function Hook(){if(!o){console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4');o=true}return HookCollection()}Hook.Singular=HookSingular.bind();Hook.Collection=HookCollection.bind();e.exports=Hook;e.exports.Hook=Hook;e.exports.Singular=Hook.Singular;e.exports.Collection=Hook.Collection},7614:e=>{e.exports=addHook;function addHook(e,a,p,t){var d=t;if(!e.registry[p]){e.registry[p]=[]}if(a==="before"){t=function(e,a){return Promise.resolve().then(d.bind(null,a)).then(e.bind(null,a))}}if(a==="after"){t=function(e,a){var p;return Promise.resolve().then(e.bind(null,a)).then((function(e){p=e;return d(p,a)})).then((function(){return p}))}}if(a==="error"){t=function(e,a){return Promise.resolve().then(e.bind(null,a)).catch((function(e){return d(e,a)}))}}e.registry[p].push({hook:t,orig:d})}},5109:e=>{e.exports=register;function register(e,a,p,t){if(typeof p!=="function"){throw new Error("method for before hook must be a function")}if(!t){t={}}if(Array.isArray(a)){return a.reverse().reduce((function(a,p){return register.bind(null,e,p,a,t)}),p)()}return Promise.resolve().then((function(){if(!e.registry[a]){return p(t)}return e.registry[a].reduce((function(e,a){return a.hook.bind(null,e,t)}),p)()}))}},6538:e=>{e.exports=removeHook;function removeHook(e,a,p){if(!e.registry[a]){return}var t=e.registry[a].map((function(e){return e.orig})).indexOf(p);if(t===-1){return}e.registry[a].splice(t,1)}},3383:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});class Deprecation extends Error{constructor(e){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="Deprecation"}}a.Deprecation=Deprecation},5140:(e,a,p)=>{"use strict";var t=p(343);e.exports.O=convert;function convert(e,a,p){p=checkEncoding(p||"UTF-8");a=checkEncoding(a||"UTF-8");e=e||"";var t;if(p!=="UTF-8"&&typeof e==="string"){e=Buffer.from(e,"binary")}if(p===a){if(typeof e==="string"){t=Buffer.from(e)}else{t=e}}else{try{t=convertIconvLite(e,a,p)}catch(a){console.error(a);t=e}}if(typeof t==="string"){t=Buffer.from(t,"utf-8")}return t}function convertIconvLite(e,a,p){if(a==="UTF-8"){return t.decode(e,p)}else if(p==="UTF-8"){return t.encode(e,a)}else{return t.encode(t.decode(e,p),a)}}function checkEncoding(e){return(e||"").toString().trim().replace(/^latin[\-_]?(\d+)$/i,"ISO-8859-$1").replace(/^win(?:dows)?[\-_]?(\d+)$/i,"WINDOWS-$1").replace(/^utf[\-_]?(\d+)$/i,"UTF-$1").replace(/^ks_c_5601\-1987$/i,"CP949").replace(/^us[\-_]?ascii$/i,"ASCII").toUpperCase()}},3348:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a._dbcs=DBCSCodec;var d=-1,r=-2,s=-10,i=-1e3,o=new Array(256),n=-1;for(var l=0;l<256;l++)o[l]=d;function DBCSCodec(e,a){this.encodingName=e.encodingName;if(!e)throw new Error("DBCS codec is called without the data.");if(!e.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var p=e.table();this.decodeTables=[];this.decodeTables[0]=o.slice(0);this.decodeTableSeq=[];for(var t=0;ti){throw new Error("gb18030 decode tables conflict at byte 2")}var u=this.decodeTables[i-m[c]];for(var h=129;h<=254;h++){if(u[h]===d){u[h]=i-n}else if(u[h]===i-n){continue}else if(u[h]>i){throw new Error("gb18030 decode tables conflict at byte 3")}var v=this.decodeTables[i-u[h]];for(var g=48;g<=57;g++){if(v[g]===d)v[g]=r}}}}}this.defaultCharUnicode=a.defaultCharUnicode;this.encodeTable=[];this.encodeTableSeq=[];var w={};if(e.encodeSkipVals)for(var t=0;t0;e>>>=8)a.push(e&255);if(a.length==0)a.push(0);var p=this.decodeTables[0];for(var t=a.length-1;t>0;t--){var r=p[a[t]];if(r==d){p[a[t]]=i-this.decodeTables.length;this.decodeTables.push(p=o.slice(0))}else if(r<=i){p=this.decodeTables[i-r]}else throw new Error("Overwrite byte in "+this.encodingName+", addr: "+e.toString(16))}return p};DBCSCodec.prototype._addDecodeChunk=function(e){var a=parseInt(e[0],16);var p=this._getDecodeTrieNode(a);a=a&255;for(var t=1;t255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+e[0]+": too long"+a)};DBCSCodec.prototype._getEncodeBucket=function(e){var a=e>>8;if(this.encodeTable[a]===undefined)this.encodeTable[a]=o.slice(0);return this.encodeTable[a]};DBCSCodec.prototype._setEncodeChar=function(e,a){var p=this._getEncodeBucket(e);var t=e&255;if(p[t]<=s)this.encodeTableSeq[s-p[t]][n]=a;else if(p[t]==d)p[t]=a};DBCSCodec.prototype._setEncodeSequence=function(e,a){var p=e[0];var t=this._getEncodeBucket(p);var r=p&255;var i;if(t[r]<=s){i=this.encodeTableSeq[s-t[r]]}else{i={};if(t[r]!==d)i[n]=t[r];t[r]=s-this.encodeTableSeq.length;this.encodeTableSeq.push(i)}for(var o=1;o=0){this._setEncodeChar(n,l);d=true}else if(n<=i){var m=i-n;if(!r[m]){var c=l<<8>>>0;if(this._fillEncodeTable(m,c,p))d=true;else r[m]=true}}else if(n<=s){this._setEncodeSequence(this.decodeTableSeq[s-n],l);d=true}}return d};function DBCSEncoder(e,a){this.leadSurrogate=-1;this.seqObj=undefined;this.encodeTable=a.encodeTable;this.encodeTableSeq=a.encodeTableSeq;this.defaultCharSingleByte=a.defCharSB;this.gb18030=a.gb18030}DBCSEncoder.prototype.write=function(e){var a=t.alloc(e.length*(this.gb18030?4:3)),p=this.leadSurrogate,r=this.seqObj,i=-1,o=0,l=0;while(true){if(i===-1){if(o==e.length)break;var m=e.charCodeAt(o++)}else{var m=i;i=-1}if(55296<=m&&m<57344){if(m<56320){if(p===-1){p=m;continue}else{p=m;m=d}}else{if(p!==-1){m=65536+(p-55296)*1024+(m-56320);p=-1}else{m=d}}}else if(p!==-1){i=m;m=d;p=-1}var c=d;if(r!==undefined&&m!=d){var u=r[m];if(typeof u==="object"){r=u;continue}else if(typeof u=="number"){c=u}else if(u==undefined){u=r[n];if(u!==undefined){c=u;i=m}else{}}r=undefined}else if(m>=0){var h=this.encodeTable[m>>8];if(h!==undefined)c=h[m&255];if(c<=s){r=this.encodeTableSeq[s-c];continue}if(c==d&&this.gb18030){var v=findIdx(this.gb18030.uChars,m);if(v!=-1){var c=this.gb18030.gbChars[v]+(m-this.gb18030.uChars[v]);a[l++]=129+Math.floor(c/12600);c=c%12600;a[l++]=48+Math.floor(c/1260);c=c%1260;a[l++]=129+Math.floor(c/10);c=c%10;a[l++]=48+c;continue}}}if(c===d)c=this.defaultCharSingleByte;if(c<256){a[l++]=c}else if(c<65536){a[l++]=c>>8;a[l++]=c&255}else if(c<16777216){a[l++]=c>>16;a[l++]=c>>8&255;a[l++]=c&255}else{a[l++]=c>>>24;a[l++]=c>>>16&255;a[l++]=c>>>8&255;a[l++]=c&255}}this.seqObj=r;this.leadSurrogate=p;return a.slice(0,l)};DBCSEncoder.prototype.end=function(){if(this.leadSurrogate===-1&&this.seqObj===undefined)return;var e=t.alloc(10),a=0;if(this.seqObj){var p=this.seqObj[n];if(p!==undefined){if(p<256){e[a++]=p}else{e[a++]=p>>8;e[a++]=p&255}}else{}this.seqObj=undefined}if(this.leadSurrogate!==-1){e[a++]=this.defaultCharSingleByte;this.leadSurrogate=-1}return e.slice(0,a)};DBCSEncoder.prototype.findIdx=findIdx;function DBCSDecoder(e,a){this.nodeIdx=0;this.prevBytes=[];this.decodeTables=a.decodeTables;this.decodeTableSeq=a.decodeTableSeq;this.defaultCharUnicode=a.defaultCharUnicode;this.gb18030=a.gb18030}DBCSDecoder.prototype.write=function(e){var a=t.alloc(e.length*2),p=this.nodeIdx,o=this.prevBytes,n=this.prevBytes.length,l=-this.prevBytes.length,m;for(var c=0,u=0;c=0?e[c]:o[c+n];var m=this.decodeTables[p][h];if(m>=0){}else if(m===d){m=this.defaultCharUnicode.charCodeAt(0);c=l}else if(m===r){if(c>=3){var v=(e[c-3]-129)*12600+(e[c-2]-48)*1260+(e[c-1]-129)*10+(h-48)}else{var v=(o[c-3+n]-129)*12600+((c-2>=0?e[c-2]:o[c-2+n])-48)*1260+((c-1>=0?e[c-1]:o[c-1+n])-129)*10+(h-48)}var g=findIdx(this.gb18030.gbChars,v);m=this.gb18030.uChars[g]+v-this.gb18030.gbChars[g]}else if(m<=i){p=i-m;continue}else if(m<=s){var w=this.decodeTableSeq[s-m];for(var b=0;b>8}m=w[w.length-1]}else throw new Error("iconv-lite internal error: invalid decoding table value "+m+" at "+p+"/"+h);if(m>=65536){m-=65536;var _=55296|m>>10;a[u++]=_&255;a[u++]=_>>8;m=56320|m&1023}a[u++]=m&255;a[u++]=m>>8;p=0;l=c+1}this.nodeIdx=p;this.prevBytes=l>=0?Array.prototype.slice.call(e,l):o.slice(l+n).concat(Array.prototype.slice.call(e));return a.slice(0,u).toString("ucs2")};DBCSDecoder.prototype.end=function(){var e="";while(this.prevBytes.length>0){e+=this.defaultCharUnicode;var a=this.prevBytes.slice(1);this.prevBytes=[];this.nodeIdx=0;if(a.length>0)e+=this.write(a)}this.prevBytes=[];this.nodeIdx=0;return e};function findIdx(e,a){if(e[0]>a)return-1;var p=0,t=e.length;while(p>1);if(e[d]<=a)p=d;else t=d}return p}},5430:(e,a,p)=>{"use strict";e.exports={shiftjis:{type:"_dbcs",table:function(){return p(7109)},encodeAdd:{"¥":92,"‾":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return p(4983)},encodeAdd:{"¥":92,"‾":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return p(1893)}},gbk:{type:"_dbcs",table:function(){return p(1893).concat(p(233))}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return p(1893).concat(p(233))},gb18030:function(){return p(3982)},encodeSkipVals:[128],encodeAdd:{"€":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return p(2882)}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return p(1987)}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return p(1987).concat(p(2375))},encodeSkipVals:[36457,36463,36478,36523,36532,36557,36560,36695,36713,36718,36811,36862,36973,36986,37060,37084,37105,37311,37551,37552,37553,37554,37585,37959,38090,38361,38652,39285,39798,39800,39803,39878,39902,39916,39926,40002,40019,40034,40040,40043,40055,40124,40125,40144,40279,40282,40388,40431,40443,40617,40687,40701,40800,40907,41079,41180,41183,36812,37576,38468,38637,41636,41637,41639,41638,41676,41678]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}},477:(e,a,p)=>{"use strict";var t=[p(2834),p(7225),p(9347),p(5374),p(5834),p(5943),p(6322),p(3348),p(5430)];for(var d=0;d{"use strict";var t=p(9761).Buffer;e.exports={utf8:{type:"_internal",bomAware:true},cesu8:{type:"_internal",bomAware:true},unicode11utf8:"utf8",ucs2:{type:"_internal",bomAware:true},utf16le:"ucs2",binary:{type:"_internal"},base64:{type:"_internal"},hex:{type:"_internal"},_internal:InternalCodec};function InternalCodec(e,a){this.enc=e.encodingName;this.bomAware=e.bomAware;if(this.enc==="base64")this.encoder=InternalEncoderBase64;else if(this.enc==="cesu8"){this.enc="utf8";this.encoder=InternalEncoderCesu8;if(t.from("eda0bdedb2a9","hex").toString()!=="💩"){this.decoder=InternalDecoderCesu8;this.defaultCharUnicode=a.defaultCharUnicode}}}InternalCodec.prototype.encoder=InternalEncoder;InternalCodec.prototype.decoder=InternalDecoder;var d=p(1576).StringDecoder;if(!d.prototype.end)d.prototype.end=function(){};function InternalDecoder(e,a){this.decoder=new d(a.enc)}InternalDecoder.prototype.write=function(e){if(!t.isBuffer(e)){e=t.from(e)}return this.decoder.write(e)};InternalDecoder.prototype.end=function(){return this.decoder.end()};function InternalEncoder(e,a){this.enc=a.enc}InternalEncoder.prototype.write=function(e){return t.from(e,this.enc)};InternalEncoder.prototype.end=function(){};function InternalEncoderBase64(e,a){this.prevStr=""}InternalEncoderBase64.prototype.write=function(e){e=this.prevStr+e;var a=e.length-e.length%4;this.prevStr=e.slice(a);e=e.slice(0,a);return t.from(e,"base64")};InternalEncoderBase64.prototype.end=function(){return t.from(this.prevStr,"base64")};function InternalEncoderCesu8(e,a){}InternalEncoderCesu8.prototype.write=function(e){var a=t.alloc(e.length*3),p=0;for(var d=0;d>>6);a[p++]=128+(r&63)}else{a[p++]=224+(r>>>12);a[p++]=128+(r>>>6&63);a[p++]=128+(r&63)}}return a.slice(0,p)};InternalEncoderCesu8.prototype.end=function(){};function InternalDecoderCesu8(e,a){this.acc=0;this.contBytes=0;this.accBytes=0;this.defaultCharUnicode=a.defaultCharUnicode}InternalDecoderCesu8.prototype.write=function(e){var a=this.acc,p=this.contBytes,t=this.accBytes,d="";for(var r=0;r0){d+=this.defaultCharUnicode;p=0}if(s<128){d+=String.fromCharCode(s)}else if(s<224){a=s&31;p=1;t=1}else if(s<240){a=s&15;p=2;t=1}else{d+=this.defaultCharUnicode}}else{if(p>0){a=a<<6|s&63;p--;t++;if(p===0){if(t===2&&a<128&&a>0)d+=this.defaultCharUnicode;else if(t===3&&a<2048)d+=this.defaultCharUnicode;else d+=String.fromCharCode(a)}}else{d+=this.defaultCharUnicode}}}this.acc=a;this.contBytes=p;this.accBytes=t;return d};InternalDecoderCesu8.prototype.end=function(){var e=0;if(this.contBytes>0)e+=this.defaultCharUnicode;return e}},5834:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a._sbcs=SBCSCodec;function SBCSCodec(e,a){if(!e)throw new Error("SBCS codec is called without the data.");if(!e.chars||e.chars.length!==128&&e.chars.length!==256)throw new Error("Encoding '"+e.type+"' has incorrect 'chars' (must be of len 128 or 256)");if(e.chars.length===128){var p="";for(var d=0;d<128;d++)p+=String.fromCharCode(d);e.chars=p+e.chars}this.decodeBuf=t.from(e.chars,"ucs2");var r=t.alloc(65536,a.defaultCharSingleByte.charCodeAt(0));for(var d=0;d{"use strict";e.exports={437:"cp437",737:"cp737",775:"cp775",850:"cp850",852:"cp852",855:"cp855",856:"cp856",857:"cp857",858:"cp858",860:"cp860",861:"cp861",862:"cp862",863:"cp863",864:"cp864",865:"cp865",866:"cp866",869:"cp869",874:"windows874",922:"cp922",1046:"cp1046",1124:"cp1124",1125:"cp1125",1129:"cp1129",1133:"cp1133",1161:"cp1161",1162:"cp1162",1163:"cp1163",1250:"windows1250",1251:"windows1251",1252:"windows1252",1253:"windows1253",1254:"windows1254",1255:"windows1255",1256:"windows1256",1257:"windows1257",1258:"windows1258",28591:"iso88591",28592:"iso88592",28593:"iso88593",28594:"iso88594",28595:"iso88595",28596:"iso88596",28597:"iso88597",28598:"iso88598",28599:"iso88599",28600:"iso885910",28601:"iso885911",28603:"iso885913",28604:"iso885914",28605:"iso885915",28606:"iso885916",windows874:{type:"_sbcs",chars:"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},win874:"windows874",cp874:"windows874",windows1250:{type:"_sbcs",chars:"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"},win1250:"windows1250",cp1250:"windows1250",windows1251:{type:"_sbcs",chars:"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},win1251:"windows1251",cp1251:"windows1251",windows1252:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},win1252:"windows1252",cp1252:"windows1252",windows1253:{type:"_sbcs",chars:"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"},win1253:"windows1253",cp1253:"windows1253",windows1254:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"},win1254:"windows1254",cp1254:"windows1254",windows1255:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"},win1255:"windows1255",cp1255:"windows1255",windows1256:{type:"_sbcs",chars:"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"},win1256:"windows1256",cp1256:"windows1256",windows1257:{type:"_sbcs",chars:"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"},win1257:"windows1257",cp1257:"windows1257",windows1258:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},win1258:"windows1258",cp1258:"windows1258",iso88591:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},cp28591:"iso88591",iso88592:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"},cp28592:"iso88592",iso88593:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"},cp28593:"iso88593",iso88594:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"},cp28594:"iso88594",iso88595:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"},cp28595:"iso88595",iso88596:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"},cp28596:"iso88596",iso88597:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"},cp28597:"iso88597",iso88598:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"},cp28598:"iso88598",iso88599:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"},cp28599:"iso88599",iso885910:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"},cp28600:"iso885910",iso885911:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},cp28601:"iso885911",iso885913:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"},cp28603:"iso885913",iso885914:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ"},cp28604:"iso885914",iso885915:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},cp28605:"iso885915",iso885916:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"},cp28606:"iso885916",cp437:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm437:"cp437",csibm437:"cp437",cp737:{type:"_sbcs",chars:"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ "},ibm737:"cp737",csibm737:"cp737",cp775:{type:"_sbcs",chars:"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ "},ibm775:"cp775",csibm775:"cp775",cp850:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "},ibm850:"cp850",csibm850:"cp850",cp852:{type:"_sbcs",chars:"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ "},ibm852:"cp852",csibm852:"cp852",cp855:{type:"_sbcs",chars:"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ "},ibm855:"cp855",csibm855:"cp855",cp856:{type:"_sbcs",chars:"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ "},ibm856:"cp856",csibm856:"cp856",cp857:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ "},ibm857:"cp857",csibm857:"cp857",cp858:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "},ibm858:"cp858",csibm858:"cp858",cp860:{type:"_sbcs",chars:"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm860:"cp860",csibm860:"cp860",cp861:{type:"_sbcs",chars:"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm861:"cp861",csibm861:"cp861",cp862:{type:"_sbcs",chars:"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm862:"cp862",csibm862:"cp862",cp863:{type:"_sbcs",chars:"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm863:"cp863",csibm863:"cp863",cp864:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"},ibm864:"cp864",csibm864:"cp864",cp865:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm865:"cp865",csibm865:"cp865",cp866:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "},ibm866:"cp866",csibm866:"cp866",cp869:{type:"_sbcs",chars:"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ "},ibm869:"cp869",csibm869:"cp869",cp922:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ"},ibm922:"cp922",csibm922:"cp922",cp1046:{type:"_sbcs",chars:"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"},ibm1046:"cp1046",csibm1046:"cp1046",cp1124:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"},ibm1124:"cp1124",csibm1124:"cp1124",cp1125:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ "},ibm1125:"cp1125",csibm1125:"cp1125",cp1129:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1129:"cp1129",csibm1129:"cp1129",cp1133:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"},ibm1133:"cp1133",csibm1133:"cp1133",cp1161:{type:"_sbcs",chars:"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ "},ibm1161:"cp1161",csibm1161:"cp1161",cp1162:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},ibm1162:"cp1162",csibm1162:"cp1162",cp1163:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1163:"cp1163",csibm1163:"cp1163",maccroatian:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"},maccyrillic:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},macgreek:{type:"_sbcs",chars:"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"},maciceland:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macroman:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macromania:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macthai:{type:"_sbcs",chars:"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\ufeff​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"},macturkish:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"},macukraine:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},koi8r:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8u:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8ru:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8t:{type:"_sbcs",chars:"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},armscii8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"},rk1048:{type:"_sbcs",chars:"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},tcvn:{type:"_sbcs",chars:"\0ÚỤỪỬỮ\b\t\n\v\f\rỨỰỲỶỸÝỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"},georgianacademy:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},georgianps:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},pt154:{type:"_sbcs",chars:"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},viscii:{type:"_sbcs",chars:"\0ẲẴẪ\b\t\n\v\f\rỶỸỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"},iso646cn:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},iso646jp:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},hproman8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"},macintosh:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},ascii:{type:"_sbcs",chars:"��������������������������������������������������������������������������������������������������������������������������������"},tis620:{type:"_sbcs",chars:"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"}}},5943:e=>{"use strict";e.exports={10029:"maccenteuro",maccenteuro:{type:"_sbcs",chars:"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"},808:"cp808",ibm808:"cp808",cp808:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ "},mik:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},cp720:{type:"_sbcs",chars:"€éâ„à†çêëèïّْô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡ًٌٍَُِ≈°∙·√ⁿ²■ "},ascii8bit:"ascii",usascii:"ascii",ansix34:"ascii",ansix341968:"ascii",ansix341986:"ascii",csascii:"ascii",cp367:"ascii",ibm367:"ascii",isoir6:"ascii",iso646us:"ascii",iso646irv:"ascii",us:"ascii",latin1:"iso88591",latin2:"iso88592",latin3:"iso88593",latin4:"iso88594",latin5:"iso88599",latin6:"iso885910",latin7:"iso885913",latin8:"iso885914",latin9:"iso885915",latin10:"iso885916",csisolatin1:"iso88591",csisolatin2:"iso88592",csisolatin3:"iso88593",csisolatin4:"iso88594",csisolatincyrillic:"iso88595",csisolatinarabic:"iso88596",csisolatingreek:"iso88597",csisolatinhebrew:"iso88598",csisolatin5:"iso88599",csisolatin6:"iso885910",l1:"iso88591",l2:"iso88592",l3:"iso88593",l4:"iso88594",l5:"iso88599",l6:"iso885910",l7:"iso885913",l8:"iso885914",l9:"iso885915",l10:"iso885916",isoir14:"iso646jp",isoir57:"iso646cn",isoir100:"iso88591",isoir101:"iso88592",isoir109:"iso88593",isoir110:"iso88594",isoir144:"iso88595",isoir127:"iso88596",isoir126:"iso88597",isoir138:"iso88598",isoir148:"iso88599",isoir157:"iso885910",isoir166:"tis620",isoir179:"iso885913",isoir199:"iso885914",isoir203:"iso885915",isoir226:"iso885916",cp819:"iso88591",ibm819:"iso88591",cyrillic:"iso88595",arabic:"iso88596",arabic8:"iso88596",ecma114:"iso88596",asmo708:"iso88596",greek:"iso88597",greek8:"iso88597",ecma118:"iso88597",elot928:"iso88597",hebrew:"iso88598",hebrew8:"iso88598",turkish:"iso88599",turkish8:"iso88599",thai:"iso885911",thai8:"iso885911",celtic:"iso885914",celtic8:"iso885914",isoceltic:"iso885914",tis6200:"tis620",tis62025291:"tis620",tis62025330:"tis620",1e4:"macroman",10006:"macgreek",10007:"maccyrillic",10079:"maciceland",10081:"macturkish",cspc8codepage437:"cp437",cspc775baltic:"cp775",cspc850multilingual:"cp850",cspcp852:"cp852",cspc862latinhebrew:"cp862",cpgr:"cp869",msee:"cp1250",mscyrl:"cp1251",msansi:"cp1252",msgreek:"cp1253",msturk:"cp1254",mshebr:"cp1255",msarab:"cp1256",winbaltrim:"cp1257",cp20866:"koi8r",20866:"koi8r",ibm878:"koi8r",cskoi8r:"koi8r",cp21866:"koi8u",21866:"koi8u",ibm1168:"koi8u",strk10482002:"rk1048",tcvn5712:"tcvn",tcvn57121:"tcvn",gb198880:"iso646cn",cn:"iso646cn",csiso14jisc6220ro:"iso646jp",jisc62201969ro:"iso646jp",jp:"iso646jp",cshproman8:"hproman8",r8:"hproman8",roman8:"hproman8",xroman8:"hproman8",ibm1051:"hproman8",mac:"macintosh",csmacintosh:"macintosh"}},9347:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a.utf16be=Utf16BECodec;function Utf16BECodec(){}Utf16BECodec.prototype.encoder=Utf16BEEncoder;Utf16BECodec.prototype.decoder=Utf16BEDecoder;Utf16BECodec.prototype.bomAware=true;function Utf16BEEncoder(){}Utf16BEEncoder.prototype.write=function(e){var a=t.from(e,"ucs2");for(var p=0;p=100){break e}}}}if(r>d)return"utf-16be";if(r{"use strict";var t=p(9761).Buffer;a._utf32=Utf32Codec;function Utf32Codec(e,a){this.iconv=a;this.bomAware=true;this.isLE=e.isLE}a.utf32le={type:"_utf32",isLE:true};a.utf32be={type:"_utf32",isLE:false};a.ucs4le="utf32le";a.ucs4be="utf32be";Utf32Codec.prototype.encoder=Utf32Encoder;Utf32Codec.prototype.decoder=Utf32Decoder;function Utf32Encoder(e,a){this.isLE=a.isLE;this.highSurrogate=0}Utf32Encoder.prototype.write=function(e){var a=t.from(e,"ucs2");var p=t.alloc(a.length*2);var d=this.isLE?p.writeUInt32LE:p.writeUInt32BE;var r=0;for(var s=0;s0){for(;a1114111){p=t}if(p>=65536){p-=65536;var d=55296|p>>10;e[a++]=d&255;e[a++]=d>>8;var p=56320|p&1023}e[a++]=p&255;e[a++]=p>>8;return a}Utf32Decoder.prototype.end=function(){this.overflow.length=0};a.utf32=Utf32AutoCodec;a.ucs4="utf32";function Utf32AutoCodec(e,a){this.iconv=a}Utf32AutoCodec.prototype.encoder=Utf32AutoEncoder;Utf32AutoCodec.prototype.decoder=Utf32AutoDecoder;function Utf32AutoEncoder(e,a){e=e||{};if(e.addBOM===undefined)e.addBOM=true;this.encoder=a.iconv.getEncoder(e.defaultEncoding||"utf-32le",e)}Utf32AutoEncoder.prototype.write=function(e){return this.encoder.write(e)};Utf32AutoEncoder.prototype.end=function(){return this.encoder.end()};function Utf32AutoDecoder(e,a){this.decoder=null;this.initialBufs=[];this.initialBufsLen=0;this.options=e||{};this.iconv=a.iconv}Utf32AutoDecoder.prototype.write=function(e){if(!this.decoder){this.initialBufs.push(e);this.initialBufsLen+=e.length;if(this.initialBufsLen<32)return"";var a=detectEncoding(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(a,this.options);var p="";for(var t=0;t16)r++;if(p[3]!==0||p[2]>16)d++;if(p[0]===0&&p[1]===0&&(p[2]!==0||p[3]!==0))i++;if((p[0]!==0||p[1]!==0)&&p[2]===0&&p[3]===0)s++;p.length=0;t++;if(t>=100){break e}}}}if(i-r>s-d)return"utf-32be";if(i-r{"use strict";var t=p(9761).Buffer;a.utf7=Utf7Codec;a.unicode11utf7="utf7";function Utf7Codec(e,a){this.iconv=a}Utf7Codec.prototype.encoder=Utf7Encoder;Utf7Codec.prototype.decoder=Utf7Decoder;Utf7Codec.prototype.bomAware=true;var d=/[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;function Utf7Encoder(e,a){this.iconv=a.iconv}Utf7Encoder.prototype.write=function(e){return t.from(e.replace(d,function(e){return"+"+(e==="+"?"":this.iconv.encode(e,"utf16-be").toString("base64").replace(/=+$/,""))+"-"}.bind(this)))};Utf7Encoder.prototype.end=function(){};function Utf7Decoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=""}var r=/[A-Za-z0-9\/+]/;var s=[];for(var i=0;i<256;i++)s[i]=r.test(String.fromCharCode(i));var o="+".charCodeAt(0),n="-".charCodeAt(0),l="&".charCodeAt(0);Utf7Decoder.prototype.write=function(e){var a="",p=0,d=this.inBase64,r=this.base64Accum;for(var i=0;i0)e=this.iconv.decode(t.from(this.base64Accum,"base64"),"utf16-be");this.inBase64=false;this.base64Accum="";return e};a.utf7imap=Utf7IMAPCodec;function Utf7IMAPCodec(e,a){this.iconv=a}Utf7IMAPCodec.prototype.encoder=Utf7IMAPEncoder;Utf7IMAPCodec.prototype.decoder=Utf7IMAPDecoder;Utf7IMAPCodec.prototype.bomAware=true;function Utf7IMAPEncoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=t.alloc(6);this.base64AccumIdx=0}Utf7IMAPEncoder.prototype.write=function(e){var a=this.inBase64,p=this.base64Accum,d=this.base64AccumIdx,r=t.alloc(e.length*5+10),s=0;for(var i=0;i0){s+=r.write(p.slice(0,d).toString("base64").replace(/\//g,",").replace(/=+$/,""),s);d=0}r[s++]=n;a=false}if(!a){r[s++]=o;if(o===l)r[s++]=n}}else{if(!a){r[s++]=l;a=true}if(a){p[d++]=o>>8;p[d++]=o&255;if(d==p.length){s+=r.write(p.toString("base64").replace(/\//g,","),s);d=0}}}}this.inBase64=a;this.base64AccumIdx=d;return r.slice(0,s)};Utf7IMAPEncoder.prototype.end=function(){var e=t.alloc(10),a=0;if(this.inBase64){if(this.base64AccumIdx>0){a+=e.write(this.base64Accum.slice(0,this.base64AccumIdx).toString("base64").replace(/\//g,",").replace(/=+$/,""),a);this.base64AccumIdx=0}e[a++]=n;this.inBase64=false}return e.slice(0,a)};function Utf7IMAPDecoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=""}var m=s.slice();m[",".charCodeAt(0)]=true;Utf7IMAPDecoder.prototype.write=function(e){var a="",p=0,d=this.inBase64,r=this.base64Accum;for(var s=0;s0)e=this.iconv.decode(t.from(this.base64Accum,"base64"),"utf16-be");this.inBase64=false;this.base64Accum="";return e}},3578:(e,a)=>{"use strict";var p="\ufeff";a.PrependBOM=PrependBOMWrapper;function PrependBOMWrapper(e,a){this.encoder=e;this.addBOM=true}PrependBOMWrapper.prototype.write=function(e){if(this.addBOM){e=p+e;this.addBOM=false}return this.encoder.write(e)};PrependBOMWrapper.prototype.end=function(){return this.encoder.end()};a.StripBOM=StripBOMWrapper;function StripBOMWrapper(e,a){this.decoder=e;this.pass=false;this.options=a||{}}StripBOMWrapper.prototype.write=function(e){var a=this.decoder.write(e);if(this.pass||!a)return a;if(a[0]===p){a=a.slice(1);if(typeof this.options.stripBOM==="function")this.options.stripBOM()}this.pass=true;return a};StripBOMWrapper.prototype.end=function(){return this.decoder.end()}},343:(e,a,p)=>{"use strict";var t=p(9761).Buffer;var d=p(3578),r=e.exports;r.encodings=null;r.defaultCharUnicode="�";r.defaultCharSingleByte="?";r.encode=function encode(e,a,p){e=""+(e||"");var d=r.getEncoder(a,p);var s=d.write(e);var i=d.end();return i&&i.length>0?t.concat([s,i]):s};r.decode=function decode(e,a,p){if(typeof e==="string"){if(!r.skipDecodeWarning){console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");r.skipDecodeWarning=true}e=t.from(""+(e||""),"binary")}var d=r.getDecoder(a,p);var s=d.write(e);var i=d.end();return i?s+i:s};r.encodingExists=function encodingExists(e){try{r.getCodec(e);return true}catch(e){return false}};r.toEncoding=r.encode;r.fromEncoding=r.decode;r._codecDataCache={};r.getCodec=function getCodec(e){if(!r.encodings)r.encodings=p(477);var a=r._canonicalizeEncoding(e);var t={};while(true){var d=r._codecDataCache[a];if(d)return d;var s=r.encodings[a];switch(typeof s){case"string":a=s;break;case"object":for(var i in s)t[i]=s[i];if(!t.encodingName)t.encodingName=a;a=s.type;break;case"function":if(!t.encodingName)t.encodingName=a;d=new s(t,r);r._codecDataCache[t.encodingName]=d;return d;default:throw new Error("Encoding not recognized: '"+e+"' (searched as: '"+a+"')")}}};r._canonicalizeEncoding=function(e){return(""+e).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")};r.getEncoder=function getEncoder(e,a){var p=r.getCodec(e),t=new p.encoder(a,p);if(p.bomAware&&a&&a.addBOM)t=new d.PrependBOM(t,a);return t};r.getDecoder=function getDecoder(e,a){var p=r.getCodec(e),t=new p.decoder(a,p);if(p.bomAware&&!(a&&a.stripBOM===false))t=new d.StripBOM(t,a);return t};r.enableStreamingAPI=function enableStreamingAPI(e){if(r.supportsStreams)return;var a=p(9857)(e);r.IconvLiteEncoderStream=a.IconvLiteEncoderStream;r.IconvLiteDecoderStream=a.IconvLiteDecoderStream;r.encodeStream=function encodeStream(e,a){return new r.IconvLiteEncoderStream(r.getEncoder(e,a),a)};r.decodeStream=function decodeStream(e,a){return new r.IconvLiteDecoderStream(r.getDecoder(e,a),a)};r.supportsStreams=true};var s;try{s=p(2781)}catch(e){}if(s&&s.Transform){r.enableStreamingAPI(s)}else{r.encodeStream=r.decodeStream=function(){throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.")}}if(false){}},9857:(e,a,p)=>{"use strict";var t=p(9761).Buffer;e.exports=function(e){var a=e.Transform;function IconvLiteEncoderStream(e,p){this.conv=e;p=p||{};p.decodeStrings=false;a.call(this,p)}IconvLiteEncoderStream.prototype=Object.create(a.prototype,{constructor:{value:IconvLiteEncoderStream}});IconvLiteEncoderStream.prototype._transform=function(e,a,p){if(typeof e!="string")return p(new Error("Iconv encoding stream needs strings as its input."));try{var t=this.conv.write(e);if(t&&t.length)this.push(t);p()}catch(e){p(e)}};IconvLiteEncoderStream.prototype._flush=function(e){try{var a=this.conv.end();if(a&&a.length)this.push(a);e()}catch(a){e(a)}};IconvLiteEncoderStream.prototype.collect=function(e){var a=[];this.on("error",e);this.on("data",(function(e){a.push(e)}));this.on("end",(function(){e(null,t.concat(a))}));return this};function IconvLiteDecoderStream(e,p){this.conv=e;p=p||{};p.encoding=this.encoding="utf8";a.call(this,p)}IconvLiteDecoderStream.prototype=Object.create(a.prototype,{constructor:{value:IconvLiteDecoderStream}});IconvLiteDecoderStream.prototype._transform=function(e,a,p){if(!t.isBuffer(e)&&!(e instanceof Uint8Array))return p(new Error("Iconv decoding stream needs buffers as its input."));try{var d=this.conv.write(e);if(d&&d.length)this.push(d,this.encoding);p()}catch(e){p(e)}};IconvLiteDecoderStream.prototype._flush=function(e){try{var a=this.conv.end();if(a&&a.length)this.push(a,this.encoding);e()}catch(a){e(a)}};IconvLiteDecoderStream.prototype.collect=function(e){var a="";this.on("error",e);this.on("data",(function(e){a+=e}));this.on("end",(function(){e(null,a)}));return this};return{IconvLiteEncoderStream:IconvLiteEncoderStream,IconvLiteDecoderStream:IconvLiteDecoderStream}}},1363:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true}); +(()=>{var __webpack_modules__={2079:(module,__unused_webpack_exports,__nccwpck_require__)=>{"use strict";const core=__nccwpck_require__(2481);const github=__nccwpck_require__(707);const BLOCKING_LABELS=[`flag: 💥 Breaking change`,`flag: don't merge`,`flag: documentation`];async function main(){try{const e=github.context.payload.pull_request?.labels??[];const a=e.filter((e=>BLOCKING_LABELS.includes(e.name)));if(a.length>0){core.setFailed(`The PR has been labelled with a blocking label (${a.map((e=>e.name)).join(", ")}).`);return}const p=e.filter((e=>e.name.startsWith("source: "))).length;const t=e.filter((e=>e.name.startsWith("pr: "))).length;if(p!==1){core.setFailed(`The PR must have one and only one 'source:' label.`)}if(t!==1){core.setFailed(`The PR must have one and only one 'pr:' label.`)}}catch(e){core.setFailed(e.message)}}main.BLOCKING_LABELS=BLOCKING_LABELS;if(require.main===require.cache[eval("__filename")]){main()}else{module.exports=main}},6062:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.issue=a.issueCommand=void 0;const s=r(p(2037));const i=p(4309);function issueCommand(e,a,p){const t=new Command(e,a,p);process.stdout.write(t.toString()+s.EOL)}a.issueCommand=issueCommand;function issue(e,a=""){issueCommand(e,{},a)}a.issue=issue;const o="::";class Command{constructor(e,a,p){if(!e){e="missing.command"}this.command=e;this.properties=a;this.message=p}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let a=true;for(const p in this.properties){if(this.properties.hasOwnProperty(p)){const t=this.properties[p];if(t){if(a){a=false}else{e+=","}e+=`${p}=${escapeProperty(t)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2481:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};var s=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.getIDToken=a.getState=a.saveState=a.group=a.endGroup=a.startGroup=a.info=a.notice=a.warning=a.error=a.debug=a.isDebug=a.setFailed=a.setCommandEcho=a.setOutput=a.getBooleanInput=a.getMultilineInput=a.getInput=a.addPath=a.setSecret=a.exportVariable=a.ExitCode=void 0;const i=p(6062);const o=p(4720);const n=p(4309);const l=r(p(2037));const m=r(p(1017));const c=p(7045);var u;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(u=a.ExitCode||(a.ExitCode={}));function exportVariable(e,a){const p=n.toCommandValue(a);process.env[e]=p;const t=process.env["GITHUB_ENV"]||"";if(t){return o.issueFileCommand("ENV",o.prepareKeyValueMessage(e,a))}i.issueCommand("set-env",{name:e},p)}a.exportVariable=exportVariable;function setSecret(e){i.issueCommand("add-mask",{},e)}a.setSecret=setSecret;function addPath(e){const a=process.env["GITHUB_PATH"]||"";if(a){o.issueFileCommand("PATH",e)}else{i.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${m.delimiter}${process.env["PATH"]}`}a.addPath=addPath;function getInput(e,a){const p=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(a&&a.required&&!p){throw new Error(`Input required and not supplied: ${e}`)}if(a&&a.trimWhitespace===false){return p}return p.trim()}a.getInput=getInput;function getMultilineInput(e,a){const p=getInput(e,a).split("\n").filter((e=>e!==""));if(a&&a.trimWhitespace===false){return p}return p.map((e=>e.trim()))}a.getMultilineInput=getMultilineInput;function getBooleanInput(e,a){const p=["true","True","TRUE"];const t=["false","False","FALSE"];const d=getInput(e,a);if(p.includes(d))return true;if(t.includes(d))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}a.getBooleanInput=getBooleanInput;function setOutput(e,a){const p=process.env["GITHUB_OUTPUT"]||"";if(p){return o.issueFileCommand("OUTPUT",o.prepareKeyValueMessage(e,a))}process.stdout.write(l.EOL);i.issueCommand("set-output",{name:e},n.toCommandValue(a))}a.setOutput=setOutput;function setCommandEcho(e){i.issue("echo",e?"on":"off")}a.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=u.Failure;error(e)}a.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}a.isDebug=isDebug;function debug(e){i.issueCommand("debug",{},e)}a.debug=debug;function error(e,a={}){i.issueCommand("error",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.error=error;function warning(e,a={}){i.issueCommand("warning",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.warning=warning;function notice(e,a={}){i.issueCommand("notice",n.toCommandProperties(a),e instanceof Error?e.toString():e)}a.notice=notice;function info(e){process.stdout.write(e+l.EOL)}a.info=info;function startGroup(e){i.issue("group",e)}a.startGroup=startGroup;function endGroup(){i.issue("endgroup")}a.endGroup=endGroup;function group(e,a){return s(this,void 0,void 0,(function*(){startGroup(e);let p;try{p=yield a()}finally{endGroup()}return p}))}a.group=group;function saveState(e,a){const p=process.env["GITHUB_STATE"]||"";if(p){return o.issueFileCommand("STATE",o.prepareKeyValueMessage(e,a))}i.issueCommand("save-state",{name:e},n.toCommandValue(a))}a.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}a.getState=getState;function getIDToken(e){return s(this,void 0,void 0,(function*(){return yield c.OidcClient.getIDToken(e)}))}a.getIDToken=getIDToken;var h=p(3176);Object.defineProperty(a,"summary",{enumerable:true,get:function(){return h.summary}});var v=p(3176);Object.defineProperty(a,"markdownSummary",{enumerable:true,get:function(){return v.markdownSummary}});var g=p(2314);Object.defineProperty(a,"toPosixPath",{enumerable:true,get:function(){return g.toPosixPath}});Object.defineProperty(a,"toWin32Path",{enumerable:true,get:function(){return g.toWin32Path}});Object.defineProperty(a,"toPlatformPath",{enumerable:true,get:function(){return g.toPlatformPath}})},4720:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.prepareKeyValueMessage=a.issueFileCommand=void 0;const s=r(p(7147));const i=r(p(2037));const o=p(757);const n=p(4309);function issueFileCommand(e,a){const p=process.env[`GITHUB_${e}`];if(!p){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!s.existsSync(p)){throw new Error(`Missing file at path: ${p}`)}s.appendFileSync(p,`${n.toCommandValue(a)}${i.EOL}`,{encoding:"utf8"})}a.issueFileCommand=issueFileCommand;function prepareKeyValueMessage(e,a){const p=`ghadelimiter_${o.v4()}`;const t=n.toCommandValue(a);if(e.includes(p)){throw new Error(`Unexpected input: name should not contain the delimiter "${p}"`)}if(t.includes(p)){throw new Error(`Unexpected input: value should not contain the delimiter "${p}"`)}return`${e}<<${p}${i.EOL}${t}${i.EOL}${p}`}a.prepareKeyValueMessage=prepareKeyValueMessage},7045:function(e,a,p){"use strict";var t=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.OidcClient=void 0;const d=p(2712);const r=p(4659);const s=p(2481);class OidcClient{static createHttpClient(e=true,a=10){const p={allowRetries:e,maxRetries:a};return new d.HttpClient("actions/oidc-client",[new r.BearerCredentialHandler(OidcClient.getRequestToken())],p)}static getRequestToken(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable")}return e}static getIDTokenUrl(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable")}return e}static getCall(e){var a;return t(this,void 0,void 0,(function*(){const p=OidcClient.createHttpClient();const t=yield p.getJson(e).catch((e=>{throw new Error(`Failed to get ID Token. \n \n Error Code : ${e.statusCode}\n \n Error Message: ${e.result.message}`)}));const d=(a=t.result)===null||a===void 0?void 0:a.value;if(!d){throw new Error("Response json body do not have ID Token field")}return d}))}static getIDToken(e){return t(this,void 0,void 0,(function*(){try{let a=OidcClient.getIDTokenUrl();if(e){const p=encodeURIComponent(e);a=`${a}&audience=${p}`}s.debug(`ID token url is ${a}`);const p=yield OidcClient.getCall(a);s.setSecret(p);return p}catch(e){throw new Error(`Error message: ${e.message}`)}}))}}a.OidcClient=OidcClient},2314:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.toPlatformPath=a.toWin32Path=a.toPosixPath=void 0;const s=r(p(1017));function toPosixPath(e){return e.replace(/[\\]/g,"/")}a.toPosixPath=toPosixPath;function toWin32Path(e){return e.replace(/[/]/g,"\\")}a.toWin32Path=toWin32Path;function toPlatformPath(e){return e.replace(/[/\\]/g,s.sep)}a.toPlatformPath=toPlatformPath},3176:function(e,a,p){"use strict";var t=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.summary=a.markdownSummary=a.SUMMARY_DOCS_URL=a.SUMMARY_ENV_VAR=void 0;const d=p(2037);const r=p(7147);const{access:s,appendFile:i,writeFile:o}=r.promises;a.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";a.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";class Summary{constructor(){this._buffer=""}filePath(){return t(this,void 0,void 0,(function*(){if(this._filePath){return this._filePath}const e=process.env[a.SUMMARY_ENV_VAR];if(!e){throw new Error(`Unable to find environment variable for $${a.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`)}try{yield s(e,r.constants.R_OK|r.constants.W_OK)}catch(a){throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}this._filePath=e;return this._filePath}))}wrap(e,a,p={}){const t=Object.entries(p).map((([e,a])=>` ${e}="${a}"`)).join("");if(!a){return`<${e}${t}>`}return`<${e}${t}>${a}`}write(e){return t(this,void 0,void 0,(function*(){const a=!!(e===null||e===void 0?void 0:e.overwrite);const p=yield this.filePath();const t=a?o:i;yield t(p,this._buffer,{encoding:"utf8"});return this.emptyBuffer()}))}clear(){return t(this,void 0,void 0,(function*(){return this.emptyBuffer().write({overwrite:true})}))}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){this._buffer="";return this}addRaw(e,a=false){this._buffer+=e;return a?this.addEOL():this}addEOL(){return this.addRaw(d.EOL)}addCodeBlock(e,a){const p=Object.assign({},a&&{lang:a});const t=this.wrap("pre",this.wrap("code",e),p);return this.addRaw(t).addEOL()}addList(e,a=false){const p=a?"ol":"ul";const t=e.map((e=>this.wrap("li",e))).join("");const d=this.wrap(p,t);return this.addRaw(d).addEOL()}addTable(e){const a=e.map((e=>{const a=e.map((e=>{if(typeof e==="string"){return this.wrap("td",e)}const{header:a,data:p,colspan:t,rowspan:d}=e;const r=a?"th":"td";const s=Object.assign(Object.assign({},t&&{colspan:t}),d&&{rowspan:d});return this.wrap(r,p,s)})).join("");return this.wrap("tr",a)})).join("");const p=this.wrap("table",a);return this.addRaw(p).addEOL()}addDetails(e,a){const p=this.wrap("details",this.wrap("summary",e)+a);return this.addRaw(p).addEOL()}addImage(e,a,p){const{width:t,height:d}=p||{};const r=Object.assign(Object.assign({},t&&{width:t}),d&&{height:d});const s=this.wrap("img",null,Object.assign({src:e,alt:a},r));return this.addRaw(s).addEOL()}addHeading(e,a){const p=`h${a}`;const t=["h1","h2","h3","h4","h5","h6"].includes(p)?p:"h1";const d=this.wrap(t,e);return this.addRaw(d).addEOL()}addSeparator(){const e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){const e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,a){const p=Object.assign({},a&&{cite:a});const t=this.wrap("blockquote",e,p);return this.addRaw(t).addEOL()}addLink(e,a){const p=this.wrap("a",e,{href:a});return this.addRaw(p).addEOL()}}const n=new Summary;a.markdownSummary=n;a.summary=n},4309:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.toCommandProperties=a.toCommandValue=void 0;function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}a.toCommandValue=toCommandValue;function toCommandProperties(e){if(!Object.keys(e).length){return{}}return{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}}a.toCommandProperties=toCommandProperties},7917:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.Context=void 0;const t=p(7147);const d=p(2037);class Context{constructor(){var e,a,p;this.payload={};if(process.env.GITHUB_EVENT_PATH){if(t.existsSync(process.env.GITHUB_EVENT_PATH)){this.payload=JSON.parse(t.readFileSync(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}))}else{const e=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${e} does not exist${d.EOL}`)}}this.eventName=process.env.GITHUB_EVENT_NAME;this.sha=process.env.GITHUB_SHA;this.ref=process.env.GITHUB_REF;this.workflow=process.env.GITHUB_WORKFLOW;this.action=process.env.GITHUB_ACTION;this.actor=process.env.GITHUB_ACTOR;this.job=process.env.GITHUB_JOB;this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10);this.runId=parseInt(process.env.GITHUB_RUN_ID,10);this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:`https://api.github.com`;this.serverUrl=(a=process.env.GITHUB_SERVER_URL)!==null&&a!==void 0?a:`https://github.com`;this.graphqlUrl=(p=process.env.GITHUB_GRAPHQL_URL)!==null&&p!==void 0?p:`https://api.github.com/graphql`}get issue(){const e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){const[e,a]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:a}}if(this.payload.repository){return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name}}throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}}a.Context=Context},707:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getOctokit=a.context=void 0;const s=r(p(7917));const i=p(5628);a.context=new s.Context;function getOctokit(e,a,...p){const t=i.GitHub.plugin(...p);return new t(i.getOctokitOptions(e,a))}a.getOctokit=getOctokit},9587:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getApiBaseUrl=a.getProxyAgent=a.getAuthString=void 0;const s=r(p(2712));function getAuthString(e,a){if(!e&&!a.auth){throw new Error("Parameter token or opts.auth is required")}else if(e&&a.auth){throw new Error("Parameters token and opts.auth may not both be specified")}return typeof a.auth==="string"?a.auth:`token ${e}`}a.getAuthString=getAuthString;function getProxyAgent(e){const a=new s.HttpClient;return a.getAgent(e)}a.getProxyAgent=getProxyAgent;function getApiBaseUrl(){return process.env["GITHUB_API_URL"]||"https://api.github.com"}a.getApiBaseUrl=getApiBaseUrl},5628:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};Object.defineProperty(a,"__esModule",{value:true});a.getOctokitOptions=a.GitHub=a.defaults=a.context=void 0;const s=r(p(7917));const i=r(p(9587));const o=p(500);const n=p(4698);const l=p(5335);a.context=new s.Context;const m=i.getApiBaseUrl();a.defaults={baseUrl:m,request:{agent:i.getProxyAgent(m)}};a.GitHub=o.Octokit.plugin(n.restEndpointMethods,l.paginateRest).defaults(a.defaults);function getOctokitOptions(e,a){const p=Object.assign({},a||{});const t=i.getAuthString(e,p);if(t){p.auth=t}return p}a.getOctokitOptions=getOctokitOptions},4592:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});const p=/^v1\./;const t=/^ghs_/;const d=/^ghu_/;async function auth(e){const a=e.split(/\./).length===3;const r=p.test(e)||t.test(e);const s=d.test(e);const i=a?"app":r?"installation":s?"user-to-server":"oauth";return{type:"token",token:e,tokenType:i}}function withAuthorizationPrefix(e){if(e.split(/\./).length===3){return`bearer ${e}`}return`token ${e}`}async function hook(e,a,p,t){const d=a.endpoint.merge(p,t);d.headers.authorization=withAuthorizationPrefix(e);return a(d)}const r=function createTokenAuth(e){if(!e){throw new Error("[@octokit/auth-token] No token passed to createTokenAuth")}if(typeof e!=="string"){throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string")}e=e.replace(/^(token|bearer) +/i,"");return Object.assign(auth.bind(null,e),{hook:hook.bind(null,e)})};a.createTokenAuth=r},500:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(5581);var d=p(5546);var r=p(125);var s=p(7867);var i=p(4592);function _objectWithoutPropertiesLoose(e,a){if(e==null)return{};var p={};var t=Object.keys(e);var d,r;for(r=0;r=0)continue;p[d]=e[d]}return p}function _objectWithoutProperties(e,a){if(e==null)return{};var p=_objectWithoutPropertiesLoose(e,a);var t,d;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(d=0;d=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,t))continue;p[t]=e[t]}}return p}const o="3.6.0";const n=["authStrategy"];class Octokit{constructor(e={}){const a=new d.Collection;const p={baseUrl:r.request.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:a.bind(null,"request")}),mediaType:{previews:[],format:""}};p.headers["user-agent"]=[e.userAgent,`octokit-core.js/${o} ${t.getUserAgent()}`].filter(Boolean).join(" ");if(e.baseUrl){p.baseUrl=e.baseUrl}if(e.previews){p.mediaType.previews=e.previews}if(e.timeZone){p.headers["time-zone"]=e.timeZone}this.request=r.request.defaults(p);this.graphql=s.withCustomRequest(this.request).defaults(p);this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log);this.hook=a;if(!e.authStrategy){if(!e.auth){this.auth=async()=>({type:"unauthenticated"})}else{const p=i.createTokenAuth(e.auth);a.wrap("request",p.hook);this.auth=p}}else{const{authStrategy:p}=e,t=_objectWithoutProperties(e,n);const d=p(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:t},e.auth));a.wrap("request",d.hook);this.auth=d}const l=this.constructor;l.plugins.forEach((a=>{Object.assign(this,a(this,e))}))}static defaults(e){const a=class extends(this){constructor(...a){const p=a[0]||{};if(typeof e==="function"){super(e(p));return}super(Object.assign({},e,p,p.userAgent&&e.userAgent?{userAgent:`${p.userAgent} ${e.userAgent}`}:null))}};return a}static plugin(...e){var a;const p=this.plugins;const t=(a=class extends(this){},a.plugins=p.concat(e.filter((e=>!p.includes(e)))),a);return t}}Octokit.VERSION=o;Octokit.plugins=[];a.Octokit=Octokit},8969:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(1363);var d=p(5581);function lowercaseKeys(e){if(!e){return{}}return Object.keys(e).reduce(((a,p)=>{a[p.toLowerCase()]=e[p];return a}),{})}function mergeDeep(e,a){const p=Object.assign({},e);Object.keys(a).forEach((d=>{if(t.isPlainObject(a[d])){if(!(d in e))Object.assign(p,{[d]:a[d]});else p[d]=mergeDeep(e[d],a[d])}else{Object.assign(p,{[d]:a[d]})}}));return p}function removeUndefinedProperties(e){for(const a in e){if(e[a]===undefined){delete e[a]}}return e}function merge(e,a,p){if(typeof a==="string"){let[e,t]=a.split(" ");p=Object.assign(t?{method:e,url:t}:{url:e},p)}else{p=Object.assign({},a)}p.headers=lowercaseKeys(p.headers);removeUndefinedProperties(p);removeUndefinedProperties(p.headers);const t=mergeDeep(e||{},p);if(e&&e.mediaType.previews.length){t.mediaType.previews=e.mediaType.previews.filter((e=>!t.mediaType.previews.includes(e))).concat(t.mediaType.previews)}t.mediaType.previews=t.mediaType.previews.map((e=>e.replace(/-preview/,"")));return t}function addQueryParameters(e,a){const p=/\?/.test(e)?"&":"?";const t=Object.keys(a);if(t.length===0){return e}return e+p+t.map((e=>{if(e==="q"){return"q="+a.q.split("+").map(encodeURIComponent).join("+")}return`${e}=${encodeURIComponent(a[e])}`})).join("&")}const r=/\{[^}]+\}/g;function removeNonChars(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function extractUrlVariableNames(e){const a=e.match(r);if(!a){return[]}return a.map(removeNonChars).reduce(((e,a)=>e.concat(a)),[])}function omit(e,a){return Object.keys(e).filter((e=>!a.includes(e))).reduce(((a,p)=>{a[p]=e[p];return a}),{})}function encodeReserved(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map((function(e){if(!/%[0-9A-Fa-f]/.test(e)){e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")}return e})).join("")}function encodeUnreserved(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function encodeValue(e,a,p){a=e==="+"||e==="#"?encodeReserved(a):encodeUnreserved(a);if(p){return encodeUnreserved(p)+"="+a}else{return a}}function isDefined(e){return e!==undefined&&e!==null}function isKeyOperator(e){return e===";"||e==="&"||e==="?"}function getValues(e,a,p,t){var d=e[p],r=[];if(isDefined(d)&&d!==""){if(typeof d==="string"||typeof d==="number"||typeof d==="boolean"){d=d.toString();if(t&&t!=="*"){d=d.substring(0,parseInt(t,10))}r.push(encodeValue(a,d,isKeyOperator(a)?p:""))}else{if(t==="*"){if(Array.isArray(d)){d.filter(isDefined).forEach((function(e){r.push(encodeValue(a,e,isKeyOperator(a)?p:""))}))}else{Object.keys(d).forEach((function(e){if(isDefined(d[e])){r.push(encodeValue(a,d[e],e))}}))}}else{const e=[];if(Array.isArray(d)){d.filter(isDefined).forEach((function(p){e.push(encodeValue(a,p))}))}else{Object.keys(d).forEach((function(p){if(isDefined(d[p])){e.push(encodeUnreserved(p));e.push(encodeValue(a,d[p].toString()))}}))}if(isKeyOperator(a)){r.push(encodeUnreserved(p)+"="+e.join(","))}else if(e.length!==0){r.push(e.join(","))}}}}else{if(a===";"){if(isDefined(d)){r.push(encodeUnreserved(p))}}else if(d===""&&(a==="&"||a==="?")){r.push(encodeUnreserved(p)+"=")}else if(d===""){r.push("")}}return r}function parseUrl(e){return{expand:expand.bind(null,e)}}function expand(e,a){var p=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,(function(e,t,d){if(t){let e="";const d=[];if(p.indexOf(t.charAt(0))!==-1){e=t.charAt(0);t=t.substr(1)}t.split(/,/g).forEach((function(p){var t=/([^:\*]*)(?::(\d+)|(\*))?/.exec(p);d.push(getValues(a,e,t[1],t[2]||t[3]))}));if(e&&e!=="+"){var r=",";if(e==="?"){r="&"}else if(e!=="#"){r=e}return(d.length!==0?e:"")+d.join(r)}else{return d.join(",")}}else{return encodeReserved(d)}}))}function parse(e){let a=e.method.toUpperCase();let p=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}");let t=Object.assign({},e.headers);let d;let r=omit(e,["method","baseUrl","url","headers","request","mediaType"]);const s=extractUrlVariableNames(p);p=parseUrl(p).expand(r);if(!/^http/.test(p)){p=e.baseUrl+p}const i=Object.keys(e).filter((e=>s.includes(e))).concat("baseUrl");const o=omit(r,i);const n=/application\/octet-stream/i.test(t.accept);if(!n){if(e.mediaType.format){t.accept=t.accept.split(/,/).map((a=>a.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`))).join(",")}if(e.mediaType.previews.length){const a=t.accept.match(/[\w-]+(?=-preview)/g)||[];t.accept=a.concat(e.mediaType.previews).map((a=>{const p=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${a}-preview${p}`})).join(",")}}if(["GET","HEAD"].includes(a)){p=addQueryParameters(p,o)}else{if("data"in o){d=o.data}else{if(Object.keys(o).length){d=o}else{t["content-length"]=0}}}if(!t["content-type"]&&typeof d!=="undefined"){t["content-type"]="application/json; charset=utf-8"}if(["PATCH","PUT"].includes(a)&&typeof d==="undefined"){d=""}return Object.assign({method:a,url:p,headers:t},typeof d!=="undefined"?{body:d}:null,e.request?{request:e.request}:null)}function endpointWithDefaults(e,a,p){return parse(merge(e,a,p))}function withDefaults(e,a){const p=merge(e,a);const t=endpointWithDefaults.bind(null,p);return Object.assign(t,{DEFAULTS:p,defaults:withDefaults.bind(null,p),merge:merge.bind(null,p),parse:parse})}const s="6.0.12";const i=`octokit-endpoint.js/${s} ${d.getUserAgent()}`;const o={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":i},mediaType:{format:"",previews:[]}};const n=withDefaults(null,o);a.endpoint=n},7867:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});var t=p(125);var d=p(5581);const r="4.8.0";function _buildMessageForResponseErrors(e){return`Request failed due to following response errors:\n`+e.errors.map((e=>` - ${e.message}`)).join("\n")}class GraphqlResponseError extends Error{constructor(e,a,p){super(_buildMessageForResponseErrors(p));this.request=e;this.headers=a;this.response=p;this.name="GraphqlResponseError";this.errors=p.errors;this.data=p.data;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}}const s=["method","baseUrl","url","headers","request","query","mediaType"];const i=["query","method","url"];const o=/\/api\/v3\/?$/;function graphql(e,a,p){if(p){if(typeof a==="string"&&"query"in p){return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`))}for(const e in p){if(!i.includes(e))continue;return Promise.reject(new Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}}const t=typeof a==="string"?Object.assign({query:a},p):a;const d=Object.keys(t).reduce(((e,a)=>{if(s.includes(a)){e[a]=t[a];return e}if(!e.variables){e.variables={}}e.variables[a]=t[a];return e}),{});const r=t.baseUrl||e.endpoint.DEFAULTS.baseUrl;if(o.test(r)){d.url=r.replace(o,"/api/graphql")}return e(d).then((e=>{if(e.data.errors){const a={};for(const p of Object.keys(e.headers)){a[p]=e.headers[p]}throw new GraphqlResponseError(d,a,e.data)}return e.data.data}))}function withDefaults(e,a){const p=e.defaults(a);const newApi=(e,a)=>graphql(p,e,a);return Object.assign(newApi,{defaults:withDefaults.bind(null,p),endpoint:t.request.endpoint})}const n=withDefaults(t.request,{headers:{"user-agent":`octokit-graphql.js/${r} ${d.getUserAgent()}`},method:"POST",url:"/graphql"});function withCustomRequest(e){return withDefaults(e,{method:"POST",url:"/graphql"})}a.GraphqlResponseError=GraphqlResponseError;a.graphql=n;a.withCustomRequest=withCustomRequest},5335:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});const p="2.21.3";function ownKeys(e,a){var p=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),p.push.apply(p,t)}return p}function _objectSpread2(e){for(var a=1;a({async next(){if(!i)return{done:true};try{const e=await d({method:r,url:i,headers:s});const a=normalizePaginatedListResponse(e);i=((a.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1];return{value:a}}catch(e){if(e.status!==409)throw e;i="";return{value:{status:200,headers:{},data:[]}}}}})}}function paginate(e,a,p,t){if(typeof p==="function"){t=p;p=undefined}return gather(e,[],iterator(e,a,p)[Symbol.asyncIterator](),t)}function gather(e,a,p,t){return p.next().then((d=>{if(d.done){return a}let r=false;function done(){r=true}a=a.concat(t?t(d.value,done):d.value.data);if(r){return a}return gather(e,a,p,t)}))}const t=Object.assign(paginate,{iterator:iterator});const d=["GET /app/hook/deliveries","GET /app/installations","GET /applications/grants","GET /authorizations","GET /enterprises/{enterprise}/actions/permissions/organizations","GET /enterprises/{enterprise}/actions/runner-groups","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners","GET /enterprises/{enterprise}/actions/runners","GET /enterprises/{enterprise}/audit-log","GET /enterprises/{enterprise}/secret-scanning/alerts","GET /enterprises/{enterprise}/settings/billing/advanced-security","GET /events","GET /gists","GET /gists/public","GET /gists/starred","GET /gists/{gist_id}/comments","GET /gists/{gist_id}/commits","GET /gists/{gist_id}/forks","GET /installation/repositories","GET /issues","GET /licenses","GET /marketplace_listing/plans","GET /marketplace_listing/plans/{plan_id}/accounts","GET /marketplace_listing/stubbed/plans","GET /marketplace_listing/stubbed/plans/{plan_id}/accounts","GET /networks/{owner}/{repo}/events","GET /notifications","GET /organizations","GET /orgs/{org}/actions/cache/usage-by-repository","GET /orgs/{org}/actions/permissions/repositories","GET /orgs/{org}/actions/runner-groups","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners","GET /orgs/{org}/actions/runners","GET /orgs/{org}/actions/secrets","GET /orgs/{org}/actions/secrets/{secret_name}/repositories","GET /orgs/{org}/audit-log","GET /orgs/{org}/blocks","GET /orgs/{org}/code-scanning/alerts","GET /orgs/{org}/codespaces","GET /orgs/{org}/credential-authorizations","GET /orgs/{org}/dependabot/secrets","GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories","GET /orgs/{org}/events","GET /orgs/{org}/external-groups","GET /orgs/{org}/failed_invitations","GET /orgs/{org}/hooks","GET /orgs/{org}/hooks/{hook_id}/deliveries","GET /orgs/{org}/installations","GET /orgs/{org}/invitations","GET /orgs/{org}/invitations/{invitation_id}/teams","GET /orgs/{org}/issues","GET /orgs/{org}/members","GET /orgs/{org}/migrations","GET /orgs/{org}/migrations/{migration_id}/repositories","GET /orgs/{org}/outside_collaborators","GET /orgs/{org}/packages","GET /orgs/{org}/packages/{package_type}/{package_name}/versions","GET /orgs/{org}/projects","GET /orgs/{org}/public_members","GET /orgs/{org}/repos","GET /orgs/{org}/secret-scanning/alerts","GET /orgs/{org}/settings/billing/advanced-security","GET /orgs/{org}/team-sync/groups","GET /orgs/{org}/teams","GET /orgs/{org}/teams/{team_slug}/discussions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions","GET /orgs/{org}/teams/{team_slug}/invitations","GET /orgs/{org}/teams/{team_slug}/members","GET /orgs/{org}/teams/{team_slug}/projects","GET /orgs/{org}/teams/{team_slug}/repos","GET /orgs/{org}/teams/{team_slug}/teams","GET /projects/columns/{column_id}/cards","GET /projects/{project_id}/collaborators","GET /projects/{project_id}/columns","GET /repos/{owner}/{repo}/actions/artifacts","GET /repos/{owner}/{repo}/actions/caches","GET /repos/{owner}/{repo}/actions/runners","GET /repos/{owner}/{repo}/actions/runs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts","GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs","GET /repos/{owner}/{repo}/actions/secrets","GET /repos/{owner}/{repo}/actions/workflows","GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs","GET /repos/{owner}/{repo}/assignees","GET /repos/{owner}/{repo}/branches","GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations","GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs","GET /repos/{owner}/{repo}/code-scanning/alerts","GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances","GET /repos/{owner}/{repo}/code-scanning/analyses","GET /repos/{owner}/{repo}/codespaces","GET /repos/{owner}/{repo}/codespaces/devcontainers","GET /repos/{owner}/{repo}/codespaces/secrets","GET /repos/{owner}/{repo}/collaborators","GET /repos/{owner}/{repo}/comments","GET /repos/{owner}/{repo}/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/commits","GET /repos/{owner}/{repo}/commits/{commit_sha}/comments","GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls","GET /repos/{owner}/{repo}/commits/{ref}/check-runs","GET /repos/{owner}/{repo}/commits/{ref}/check-suites","GET /repos/{owner}/{repo}/commits/{ref}/status","GET /repos/{owner}/{repo}/commits/{ref}/statuses","GET /repos/{owner}/{repo}/contributors","GET /repos/{owner}/{repo}/dependabot/secrets","GET /repos/{owner}/{repo}/deployments","GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses","GET /repos/{owner}/{repo}/environments","GET /repos/{owner}/{repo}/events","GET /repos/{owner}/{repo}/forks","GET /repos/{owner}/{repo}/git/matching-refs/{ref}","GET /repos/{owner}/{repo}/hooks","GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries","GET /repos/{owner}/{repo}/invitations","GET /repos/{owner}/{repo}/issues","GET /repos/{owner}/{repo}/issues/comments","GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/issues/events","GET /repos/{owner}/{repo}/issues/{issue_number}/comments","GET /repos/{owner}/{repo}/issues/{issue_number}/events","GET /repos/{owner}/{repo}/issues/{issue_number}/labels","GET /repos/{owner}/{repo}/issues/{issue_number}/reactions","GET /repos/{owner}/{repo}/issues/{issue_number}/timeline","GET /repos/{owner}/{repo}/keys","GET /repos/{owner}/{repo}/labels","GET /repos/{owner}/{repo}/milestones","GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels","GET /repos/{owner}/{repo}/notifications","GET /repos/{owner}/{repo}/pages/builds","GET /repos/{owner}/{repo}/projects","GET /repos/{owner}/{repo}/pulls","GET /repos/{owner}/{repo}/pulls/comments","GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/pulls/{pull_number}/comments","GET /repos/{owner}/{repo}/pulls/{pull_number}/commits","GET /repos/{owner}/{repo}/pulls/{pull_number}/files","GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments","GET /repos/{owner}/{repo}/releases","GET /repos/{owner}/{repo}/releases/{release_id}/assets","GET /repos/{owner}/{repo}/releases/{release_id}/reactions","GET /repos/{owner}/{repo}/secret-scanning/alerts","GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations","GET /repos/{owner}/{repo}/stargazers","GET /repos/{owner}/{repo}/subscribers","GET /repos/{owner}/{repo}/tags","GET /repos/{owner}/{repo}/teams","GET /repos/{owner}/{repo}/topics","GET /repositories","GET /repositories/{repository_id}/environments/{environment_name}/secrets","GET /search/code","GET /search/commits","GET /search/issues","GET /search/labels","GET /search/repositories","GET /search/topics","GET /search/users","GET /teams/{team_id}/discussions","GET /teams/{team_id}/discussions/{discussion_number}/comments","GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /teams/{team_id}/discussions/{discussion_number}/reactions","GET /teams/{team_id}/invitations","GET /teams/{team_id}/members","GET /teams/{team_id}/projects","GET /teams/{team_id}/repos","GET /teams/{team_id}/teams","GET /user/blocks","GET /user/codespaces","GET /user/codespaces/secrets","GET /user/emails","GET /user/followers","GET /user/following","GET /user/gpg_keys","GET /user/installations","GET /user/installations/{installation_id}/repositories","GET /user/issues","GET /user/keys","GET /user/marketplace_purchases","GET /user/marketplace_purchases/stubbed","GET /user/memberships/orgs","GET /user/migrations","GET /user/migrations/{migration_id}/repositories","GET /user/orgs","GET /user/packages","GET /user/packages/{package_type}/{package_name}/versions","GET /user/public_emails","GET /user/repos","GET /user/repository_invitations","GET /user/starred","GET /user/subscriptions","GET /user/teams","GET /users","GET /users/{username}/events","GET /users/{username}/events/orgs/{org}","GET /users/{username}/events/public","GET /users/{username}/followers","GET /users/{username}/following","GET /users/{username}/gists","GET /users/{username}/gpg_keys","GET /users/{username}/keys","GET /users/{username}/orgs","GET /users/{username}/packages","GET /users/{username}/projects","GET /users/{username}/received_events","GET /users/{username}/received_events/public","GET /users/{username}/repos","GET /users/{username}/starred","GET /users/{username}/subscriptions"];function isPaginatingEndpoint(e){if(typeof e==="string"){return d.includes(e)}else{return false}}function paginateRest(e){return{paginate:Object.assign(paginate.bind(null,e),{iterator:iterator.bind(null,e)})}}paginateRest.VERSION=p;a.composePaginateRest=t;a.isPaginatingEndpoint=isPaginatingEndpoint;a.paginateRest=paginateRest;a.paginatingEndpoints=d},4698:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function ownKeys(e,a){var p=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);if(a){t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))}p.push.apply(p,t)}return p}function _objectSpread2(e){for(var a=1;a{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=p(3383);var d=_interopDefault(p(8995));const r=d((e=>console.warn(e)));const s=d((e=>console.warn(e)));class RequestError extends Error{constructor(e,a,p){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="HttpError";this.status=a;let d;if("headers"in p&&typeof p.headers!=="undefined"){d=p.headers}if("response"in p){this.response=p.response;d=p.response.headers}const i=Object.assign({},p.request);if(p.request.headers.authorization){i.headers=Object.assign({},p.request.headers,{authorization:p.request.headers.authorization.replace(/ .*$/," [REDACTED]")})}i.url=i.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]");this.request=i;Object.defineProperty(this,"code",{get(){r(new t.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));return a}});Object.defineProperty(this,"headers",{get(){s(new t.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));return d||{}}})}}a.RequestError=RequestError},125:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=p(8969);var d=p(5581);var r=p(1363);var s=_interopDefault(p(8885));var i=p(1280);const o="5.6.3";function getBufferResponse(e){return e.arrayBuffer()}function fetchWrapper(e){const a=e.request&&e.request.log?e.request.log:console;if(r.isPlainObject(e.body)||Array.isArray(e.body)){e.body=JSON.stringify(e.body)}let p={};let t;let d;const o=e.request&&e.request.fetch||s;return o(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then((async r=>{d=r.url;t=r.status;for(const e of r.headers){p[e[0]]=e[1]}if("deprecation"in p){const t=p.link&&p.link.match(/<([^>]+)>; rel="deprecation"/);const d=t&&t.pop();a.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${p.sunset}${d?`. See ${d}`:""}`)}if(t===204||t===205){return}if(e.method==="HEAD"){if(t<400){return}throw new i.RequestError(r.statusText,t,{response:{url:d,status:t,headers:p,data:undefined},request:e})}if(t===304){throw new i.RequestError("Not modified",t,{response:{url:d,status:t,headers:p,data:await getResponseData(r)},request:e})}if(t>=400){const a=await getResponseData(r);const s=new i.RequestError(toErrorMessage(a),t,{response:{url:d,status:t,headers:p,data:a},request:e});throw s}return getResponseData(r)})).then((e=>({status:t,url:d,headers:p,data:e}))).catch((a=>{if(a instanceof i.RequestError)throw a;throw new i.RequestError(a.message,500,{request:e})}))}async function getResponseData(e){const a=e.headers.get("content-type");if(/application\/json/.test(a)){return e.json()}if(!a||/^text\/|charset=utf-8$/.test(a)){return e.text()}return getBufferResponse(e)}function toErrorMessage(e){if(typeof e==="string")return e;if("message"in e){if(Array.isArray(e.errors)){return`${e.message}: ${e.errors.map(JSON.stringify).join(", ")}`}return e.message}return`Unknown error: ${JSON.stringify(e)}`}function withDefaults(e,a){const p=e.defaults(a);const newApi=function(e,a){const t=p.merge(e,a);if(!t.request||!t.request.hook){return fetchWrapper(p.parse(t))}const request=(e,a)=>fetchWrapper(p.parse(p.merge(e,a)));Object.assign(request,{endpoint:p,defaults:withDefaults.bind(null,p)});return t.request.hook(request,t)};return Object.assign(newApi,{endpoint:p,defaults:withDefaults.bind(null,p)})}const n=withDefaults(t.endpoint,{headers:{"user-agent":`octokit-request.js/${o} ${d.getUserAgent()}`}});a.request=n},4659:function(e,a){"use strict";var p=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.PersonalAccessTokenCredentialHandler=a.BearerCredentialHandler=a.BasicCredentialHandler=void 0;class BasicCredentialHandler{constructor(e,a){this.username=e;this.password=a}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.BasicCredentialHandler=BasicCredentialHandler;class BearerCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Bearer ${this.token}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.BearerCredentialHandler=BearerCredentialHandler;class PersonalAccessTokenCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return p(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}a.PersonalAccessTokenCredentialHandler=PersonalAccessTokenCredentialHandler},2712:function(e,a,p){"use strict";var t=this&&this.__createBinding||(Object.create?function(e,a,p,t){if(t===undefined)t=p;Object.defineProperty(e,t,{enumerable:true,get:function(){return a[p]}})}:function(e,a,p,t){if(t===undefined)t=p;e[t]=a[p]});var d=this&&this.__setModuleDefault||(Object.create?function(e,a){Object.defineProperty(e,"default",{enumerable:true,value:a})}:function(e,a){e["default"]=a});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var a={};if(e!=null)for(var p in e)if(p!=="default"&&Object.hasOwnProperty.call(e,p))t(a,e,p);d(a,e);return a};var s=this&&this.__awaiter||function(e,a,p,t){function adopt(e){return e instanceof p?e:new p((function(a){a(e)}))}return new(p||(p=Promise))((function(p,d){function fulfilled(e){try{step(t.next(e))}catch(e){d(e)}}function rejected(e){try{step(t["throw"](e))}catch(e){d(e)}}function step(e){e.done?p(e.value):adopt(e.value).then(fulfilled,rejected)}step((t=t.apply(e,a||[])).next())}))};Object.defineProperty(a,"__esModule",{value:true});a.HttpClient=a.isHttps=a.HttpClientResponse=a.HttpClientError=a.getProxyUrl=a.MediaTypes=a.Headers=a.HttpCodes=void 0;const i=r(p(3685));const o=r(p(5687));const n=r(p(2722));const l=r(p(391));var m;(function(e){e[e["OK"]=200]="OK";e[e["MultipleChoices"]=300]="MultipleChoices";e[e["MovedPermanently"]=301]="MovedPermanently";e[e["ResourceMoved"]=302]="ResourceMoved";e[e["SeeOther"]=303]="SeeOther";e[e["NotModified"]=304]="NotModified";e[e["UseProxy"]=305]="UseProxy";e[e["SwitchProxy"]=306]="SwitchProxy";e[e["TemporaryRedirect"]=307]="TemporaryRedirect";e[e["PermanentRedirect"]=308]="PermanentRedirect";e[e["BadRequest"]=400]="BadRequest";e[e["Unauthorized"]=401]="Unauthorized";e[e["PaymentRequired"]=402]="PaymentRequired";e[e["Forbidden"]=403]="Forbidden";e[e["NotFound"]=404]="NotFound";e[e["MethodNotAllowed"]=405]="MethodNotAllowed";e[e["NotAcceptable"]=406]="NotAcceptable";e[e["ProxyAuthenticationRequired"]=407]="ProxyAuthenticationRequired";e[e["RequestTimeout"]=408]="RequestTimeout";e[e["Conflict"]=409]="Conflict";e[e["Gone"]=410]="Gone";e[e["TooManyRequests"]=429]="TooManyRequests";e[e["InternalServerError"]=500]="InternalServerError";e[e["NotImplemented"]=501]="NotImplemented";e[e["BadGateway"]=502]="BadGateway";e[e["ServiceUnavailable"]=503]="ServiceUnavailable";e[e["GatewayTimeout"]=504]="GatewayTimeout"})(m=a.HttpCodes||(a.HttpCodes={}));var c;(function(e){e["Accept"]="accept";e["ContentType"]="content-type"})(c=a.Headers||(a.Headers={}));var u;(function(e){e["ApplicationJson"]="application/json"})(u=a.MediaTypes||(a.MediaTypes={}));function getProxyUrl(e){const a=n.getProxyUrl(new URL(e));return a?a.href:""}a.getProxyUrl=getProxyUrl;const h=[m.MovedPermanently,m.ResourceMoved,m.SeeOther,m.TemporaryRedirect,m.PermanentRedirect];const v=[m.BadGateway,m.ServiceUnavailable,m.GatewayTimeout];const g=["OPTIONS","GET","DELETE","HEAD"];const w=10;const b=5;class HttpClientError extends Error{constructor(e,a){super(e);this.name="HttpClientError";this.statusCode=a;Object.setPrototypeOf(this,HttpClientError.prototype)}}a.HttpClientError=HttpClientError;class HttpClientResponse{constructor(e){this.message=e}readBody(){return s(this,void 0,void 0,(function*(){return new Promise((e=>s(this,void 0,void 0,(function*(){let a=Buffer.alloc(0);this.message.on("data",(e=>{a=Buffer.concat([a,e])}));this.message.on("end",(()=>{e(a.toString())}))}))))}))}}a.HttpClientResponse=HttpClientResponse;function isHttps(e){const a=new URL(e);return a.protocol==="https:"}a.isHttps=isHttps;class HttpClient{constructor(e,a,p){this._ignoreSslError=false;this._allowRedirects=true;this._allowRedirectDowngrade=false;this._maxRedirects=50;this._allowRetries=false;this._maxRetries=1;this._keepAlive=false;this._disposed=false;this.userAgent=e;this.handlers=a||[];this.requestOptions=p;if(p){if(p.ignoreSslError!=null){this._ignoreSslError=p.ignoreSslError}this._socketTimeout=p.socketTimeout;if(p.allowRedirects!=null){this._allowRedirects=p.allowRedirects}if(p.allowRedirectDowngrade!=null){this._allowRedirectDowngrade=p.allowRedirectDowngrade}if(p.maxRedirects!=null){this._maxRedirects=Math.max(p.maxRedirects,0)}if(p.keepAlive!=null){this._keepAlive=p.keepAlive}if(p.allowRetries!=null){this._allowRetries=p.allowRetries}if(p.maxRetries!=null){this._maxRetries=p.maxRetries}}}options(e,a){return s(this,void 0,void 0,(function*(){return this.request("OPTIONS",e,null,a||{})}))}get(e,a){return s(this,void 0,void 0,(function*(){return this.request("GET",e,null,a||{})}))}del(e,a){return s(this,void 0,void 0,(function*(){return this.request("DELETE",e,null,a||{})}))}post(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("POST",e,a,p||{})}))}patch(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("PATCH",e,a,p||{})}))}put(e,a,p){return s(this,void 0,void 0,(function*(){return this.request("PUT",e,a,p||{})}))}head(e,a){return s(this,void 0,void 0,(function*(){return this.request("HEAD",e,null,a||{})}))}sendStream(e,a,p,t){return s(this,void 0,void 0,(function*(){return this.request(e,a,p,t)}))}getJson(e,a={}){return s(this,void 0,void 0,(function*(){a[c.Accept]=this._getExistingOrDefaultHeader(a,c.Accept,u.ApplicationJson);const p=yield this.get(e,a);return this._processResponse(p,this.requestOptions)}))}postJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.post(e,t,p);return this._processResponse(d,this.requestOptions)}))}putJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.put(e,t,p);return this._processResponse(d,this.requestOptions)}))}patchJson(e,a,p={}){return s(this,void 0,void 0,(function*(){const t=JSON.stringify(a,null,2);p[c.Accept]=this._getExistingOrDefaultHeader(p,c.Accept,u.ApplicationJson);p[c.ContentType]=this._getExistingOrDefaultHeader(p,c.ContentType,u.ApplicationJson);const d=yield this.patch(e,t,p);return this._processResponse(d,this.requestOptions)}))}request(e,a,p,t){return s(this,void 0,void 0,(function*(){if(this._disposed){throw new Error("Client has already been disposed.")}const d=new URL(a);let r=this._prepareRequest(e,d,t);const s=this._allowRetries&&g.includes(e)?this._maxRetries+1:1;let i=0;let o;do{o=yield this.requestRaw(r,p);if(o&&o.message&&o.message.statusCode===m.Unauthorized){let e;for(const a of this.handlers){if(a.canHandleAuthentication(o)){e=a;break}}if(e){return e.handleAuthentication(this,r,p)}else{return o}}let a=this._maxRedirects;while(o.message.statusCode&&h.includes(o.message.statusCode)&&this._allowRedirects&&a>0){const s=o.message.headers["location"];if(!s){break}const i=new URL(s);if(d.protocol==="https:"&&d.protocol!==i.protocol&&!this._allowRedirectDowngrade){throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.")}yield o.readBody();if(i.hostname!==d.hostname){for(const e in t){if(e.toLowerCase()==="authorization"){delete t[e]}}}r=this._prepareRequest(e,i,t);o=yield this.requestRaw(r,p);a--}if(!o.message.statusCode||!v.includes(o.message.statusCode)){return o}i+=1;if(i{function callbackForResult(e,a){if(e){t(e)}else if(!a){t(new Error("Unknown error"))}else{p(a)}}this.requestRawWithCallback(e,a,callbackForResult)}))}))}requestRawWithCallback(e,a,p){if(typeof a==="string"){if(!e.options.headers){e.options.headers={}}e.options.headers["Content-Length"]=Buffer.byteLength(a,"utf8")}let t=false;function handleResult(e,a){if(!t){t=true;p(e,a)}}const d=e.httpModule.request(e.options,(e=>{const a=new HttpClientResponse(e);handleResult(undefined,a)}));let r;d.on("socket",(e=>{r=e}));d.setTimeout(this._socketTimeout||3*6e4,(()=>{if(r){r.end()}handleResult(new Error(`Request timeout: ${e.options.path}`))}));d.on("error",(function(e){handleResult(e)}));if(a&&typeof a==="string"){d.write(a,"utf8")}if(a&&typeof a!=="string"){a.on("close",(function(){d.end()}));a.pipe(d)}else{d.end()}}getAgent(e){const a=new URL(e);return this._getAgent(a)}_prepareRequest(e,a,p){const t={};t.parsedUrl=a;const d=t.parsedUrl.protocol==="https:";t.httpModule=d?o:i;const r=d?443:80;t.options={};t.options.host=t.parsedUrl.hostname;t.options.port=t.parsedUrl.port?parseInt(t.parsedUrl.port):r;t.options.path=(t.parsedUrl.pathname||"")+(t.parsedUrl.search||"");t.options.method=e;t.options.headers=this._mergeHeaders(p);if(this.userAgent!=null){t.options.headers["user-agent"]=this.userAgent}t.options.agent=this._getAgent(t.parsedUrl);if(this.handlers){for(const e of this.handlers){e.prepareRequest(t.options)}}return t}_mergeHeaders(e){if(this.requestOptions&&this.requestOptions.headers){return Object.assign({},lowercaseKeys(this.requestOptions.headers),lowercaseKeys(e||{}))}return lowercaseKeys(e||{})}_getExistingOrDefaultHeader(e,a,p){let t;if(this.requestOptions&&this.requestOptions.headers){t=lowercaseKeys(this.requestOptions.headers)[a]}return e[a]||t||p}_getAgent(e){let a;const p=n.getProxyUrl(e);const t=p&&p.hostname;if(this._keepAlive&&t){a=this._proxyAgent}if(this._keepAlive&&!t){a=this._agent}if(a){return a}const d=e.protocol==="https:";let r=100;if(this.requestOptions){r=this.requestOptions.maxSockets||i.globalAgent.maxSockets}if(p&&p.hostname){const e={maxSockets:r,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(p.username||p.password)&&{proxyAuth:`${p.username}:${p.password}`}),{host:p.hostname,port:p.port})};let t;const s=p.protocol==="https:";if(d){t=s?l.httpsOverHttps:l.httpsOverHttp}else{t=s?l.httpOverHttps:l.httpOverHttp}a=t(e);this._proxyAgent=a}if(this._keepAlive&&!a){const e={keepAlive:this._keepAlive,maxSockets:r};a=d?new o.Agent(e):new i.Agent(e);this._agent=a}if(!a){a=d?o.globalAgent:i.globalAgent}if(d&&this._ignoreSslError){a.options=Object.assign(a.options||{},{rejectUnauthorized:false})}return a}_performExponentialBackoff(e){return s(this,void 0,void 0,(function*(){e=Math.min(w,e);const a=b*Math.pow(2,e);return new Promise((e=>setTimeout((()=>e()),a)))}))}_processResponse(e,a){return s(this,void 0,void 0,(function*(){return new Promise(((p,t)=>s(this,void 0,void 0,(function*(){const d=e.message.statusCode||0;const r={statusCode:d,result:null,headers:{}};if(d===m.NotFound){p(r)}function dateTimeDeserializer(e,a){if(typeof a==="string"){const e=new Date(a);if(!isNaN(e.valueOf())){return e}}return a}let s;let i;try{i=yield e.readBody();if(i&&i.length>0){if(a&&a.deserializeDates){s=JSON.parse(i,dateTimeDeserializer)}else{s=JSON.parse(i)}r.result=s}r.headers=e.message.headers}catch(e){}if(d>299){let e;if(s&&s.message){e=s.message}else if(i&&i.length>0){e=i}else{e=`Failed request: (${d})`}const a=new HttpClientError(e,d);a.result=r.result;t(a)}else{p(r)}}))))}))}}a.HttpClient=HttpClient;const lowercaseKeys=e=>Object.keys(e).reduce(((a,p)=>(a[p.toLowerCase()]=e[p],a)),{})},2722:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a.checkBypass=a.getProxyUrl=void 0;function getProxyUrl(e){const a=e.protocol==="https:";if(checkBypass(e)){return undefined}const p=(()=>{if(a){return process.env["https_proxy"]||process.env["HTTPS_PROXY"]}else{return process.env["http_proxy"]||process.env["HTTP_PROXY"]}})();if(p){return new URL(p)}else{return undefined}}a.getProxyUrl=getProxyUrl;function checkBypass(e){if(!e.hostname){return false}const a=process.env["no_proxy"]||process.env["NO_PROXY"]||"";if(!a){return false}let p;if(e.port){p=Number(e.port)}else if(e.protocol==="http:"){p=80}else if(e.protocol==="https:"){p=443}const t=[e.hostname.toUpperCase()];if(typeof p==="number"){t.push(`${t[0]}:${p}`)}for(const e of a.split(",").map((e=>e.trim().toUpperCase())).filter((e=>e))){if(t.some((a=>a===e))){return true}}return false}a.checkBypass=checkBypass},5546:(e,a,p)=>{var t=p(5109);var d=p(7614);var r=p(6538);var s=Function.bind;var i=s.bind(s);function bindApi(e,a,p){var t=i(r,null).apply(null,p?[a,p]:[a]);e.api={remove:t};e.remove=t;["before","error","after","wrap"].forEach((function(t){var r=p?[a,t,p]:[a,t];e[t]=e.api[t]=i(d,null).apply(null,r)}))}function HookSingular(){var e="h";var a={registry:{}};var p=t.bind(null,a,e);bindApi(p,a,e);return p}function HookCollection(){var e={registry:{}};var a=t.bind(null,e);bindApi(a,e);return a}var o=false;function Hook(){if(!o){console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4');o=true}return HookCollection()}Hook.Singular=HookSingular.bind();Hook.Collection=HookCollection.bind();e.exports=Hook;e.exports.Hook=Hook;e.exports.Singular=Hook.Singular;e.exports.Collection=Hook.Collection},7614:e=>{e.exports=addHook;function addHook(e,a,p,t){var d=t;if(!e.registry[p]){e.registry[p]=[]}if(a==="before"){t=function(e,a){return Promise.resolve().then(d.bind(null,a)).then(e.bind(null,a))}}if(a==="after"){t=function(e,a){var p;return Promise.resolve().then(e.bind(null,a)).then((function(e){p=e;return d(p,a)})).then((function(){return p}))}}if(a==="error"){t=function(e,a){return Promise.resolve().then(e.bind(null,a)).catch((function(e){return d(e,a)}))}}e.registry[p].push({hook:t,orig:d})}},5109:e=>{e.exports=register;function register(e,a,p,t){if(typeof p!=="function"){throw new Error("method for before hook must be a function")}if(!t){t={}}if(Array.isArray(a)){return a.reverse().reduce((function(a,p){return register.bind(null,e,p,a,t)}),p)()}return Promise.resolve().then((function(){if(!e.registry[a]){return p(t)}return e.registry[a].reduce((function(e,a){return a.hook.bind(null,e,t)}),p)()}))}},6538:e=>{e.exports=removeHook;function removeHook(e,a,p){if(!e.registry[a]){return}var t=e.registry[a].map((function(e){return e.orig})).indexOf(p);if(t===-1){return}e.registry[a].splice(t,1)}},3383:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});class Deprecation extends Error{constructor(e){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="Deprecation"}}a.Deprecation=Deprecation},5140:(e,a,p)=>{"use strict";var t=p(6262);e.exports.O=convert;function convert(e,a,p){p=checkEncoding(p||"UTF-8");a=checkEncoding(a||"UTF-8");e=e||"";var t;if(p!=="UTF-8"&&typeof e==="string"){e=Buffer.from(e,"binary")}if(p===a){if(typeof e==="string"){t=Buffer.from(e)}else{t=e}}else{try{t=convertIconvLite(e,a,p)}catch(a){console.error(a);t=e}}if(typeof t==="string"){t=Buffer.from(t,"utf-8")}return t}function convertIconvLite(e,a,p){if(a==="UTF-8"){return t.decode(e,p)}else if(p==="UTF-8"){return t.encode(e,a)}else{return t.encode(t.decode(e,p),a)}}function checkEncoding(e){return(e||"").toString().trim().replace(/^latin[\-_]?(\d+)$/i,"ISO-8859-$1").replace(/^win(?:dows)?[\-_]?(\d+)$/i,"WINDOWS-$1").replace(/^utf[\-_]?(\d+)$/i,"UTF-$1").replace(/^ks_c_5601\-1987$/i,"CP949").replace(/^us[\-_]?ascii$/i,"ASCII").toUpperCase()}},6637:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a._dbcs=DBCSCodec;var d=-1,r=-2,s=-10,i=-1e3,o=new Array(256),n=-1;for(var l=0;l<256;l++)o[l]=d;function DBCSCodec(e,a){this.encodingName=e.encodingName;if(!e)throw new Error("DBCS codec is called without the data.");if(!e.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var p=e.table();this.decodeTables=[];this.decodeTables[0]=o.slice(0);this.decodeTableSeq=[];for(var t=0;ti){throw new Error("gb18030 decode tables conflict at byte 2")}var u=this.decodeTables[i-m[c]];for(var h=129;h<=254;h++){if(u[h]===d){u[h]=i-n}else if(u[h]===i-n){continue}else if(u[h]>i){throw new Error("gb18030 decode tables conflict at byte 3")}var v=this.decodeTables[i-u[h]];for(var g=48;g<=57;g++){if(v[g]===d)v[g]=r}}}}}this.defaultCharUnicode=a.defaultCharUnicode;this.encodeTable=[];this.encodeTableSeq=[];var w={};if(e.encodeSkipVals)for(var t=0;t0;e>>>=8)a.push(e&255);if(a.length==0)a.push(0);var p=this.decodeTables[0];for(var t=a.length-1;t>0;t--){var r=p[a[t]];if(r==d){p[a[t]]=i-this.decodeTables.length;this.decodeTables.push(p=o.slice(0))}else if(r<=i){p=this.decodeTables[i-r]}else throw new Error("Overwrite byte in "+this.encodingName+", addr: "+e.toString(16))}return p};DBCSCodec.prototype._addDecodeChunk=function(e){var a=parseInt(e[0],16);var p=this._getDecodeTrieNode(a);a=a&255;for(var t=1;t255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+e[0]+": too long"+a)};DBCSCodec.prototype._getEncodeBucket=function(e){var a=e>>8;if(this.encodeTable[a]===undefined)this.encodeTable[a]=o.slice(0);return this.encodeTable[a]};DBCSCodec.prototype._setEncodeChar=function(e,a){var p=this._getEncodeBucket(e);var t=e&255;if(p[t]<=s)this.encodeTableSeq[s-p[t]][n]=a;else if(p[t]==d)p[t]=a};DBCSCodec.prototype._setEncodeSequence=function(e,a){var p=e[0];var t=this._getEncodeBucket(p);var r=p&255;var i;if(t[r]<=s){i=this.encodeTableSeq[s-t[r]]}else{i={};if(t[r]!==d)i[n]=t[r];t[r]=s-this.encodeTableSeq.length;this.encodeTableSeq.push(i)}for(var o=1;o=0){this._setEncodeChar(n,l);d=true}else if(n<=i){var m=i-n;if(!r[m]){var c=l<<8>>>0;if(this._fillEncodeTable(m,c,p))d=true;else r[m]=true}}else if(n<=s){this._setEncodeSequence(this.decodeTableSeq[s-n],l);d=true}}return d};function DBCSEncoder(e,a){this.leadSurrogate=-1;this.seqObj=undefined;this.encodeTable=a.encodeTable;this.encodeTableSeq=a.encodeTableSeq;this.defaultCharSingleByte=a.defCharSB;this.gb18030=a.gb18030}DBCSEncoder.prototype.write=function(e){var a=t.alloc(e.length*(this.gb18030?4:3)),p=this.leadSurrogate,r=this.seqObj,i=-1,o=0,l=0;while(true){if(i===-1){if(o==e.length)break;var m=e.charCodeAt(o++)}else{var m=i;i=-1}if(55296<=m&&m<57344){if(m<56320){if(p===-1){p=m;continue}else{p=m;m=d}}else{if(p!==-1){m=65536+(p-55296)*1024+(m-56320);p=-1}else{m=d}}}else if(p!==-1){i=m;m=d;p=-1}var c=d;if(r!==undefined&&m!=d){var u=r[m];if(typeof u==="object"){r=u;continue}else if(typeof u=="number"){c=u}else if(u==undefined){u=r[n];if(u!==undefined){c=u;i=m}else{}}r=undefined}else if(m>=0){var h=this.encodeTable[m>>8];if(h!==undefined)c=h[m&255];if(c<=s){r=this.encodeTableSeq[s-c];continue}if(c==d&&this.gb18030){var v=findIdx(this.gb18030.uChars,m);if(v!=-1){var c=this.gb18030.gbChars[v]+(m-this.gb18030.uChars[v]);a[l++]=129+Math.floor(c/12600);c=c%12600;a[l++]=48+Math.floor(c/1260);c=c%1260;a[l++]=129+Math.floor(c/10);c=c%10;a[l++]=48+c;continue}}}if(c===d)c=this.defaultCharSingleByte;if(c<256){a[l++]=c}else if(c<65536){a[l++]=c>>8;a[l++]=c&255}else if(c<16777216){a[l++]=c>>16;a[l++]=c>>8&255;a[l++]=c&255}else{a[l++]=c>>>24;a[l++]=c>>>16&255;a[l++]=c>>>8&255;a[l++]=c&255}}this.seqObj=r;this.leadSurrogate=p;return a.slice(0,l)};DBCSEncoder.prototype.end=function(){if(this.leadSurrogate===-1&&this.seqObj===undefined)return;var e=t.alloc(10),a=0;if(this.seqObj){var p=this.seqObj[n];if(p!==undefined){if(p<256){e[a++]=p}else{e[a++]=p>>8;e[a++]=p&255}}else{}this.seqObj=undefined}if(this.leadSurrogate!==-1){e[a++]=this.defaultCharSingleByte;this.leadSurrogate=-1}return e.slice(0,a)};DBCSEncoder.prototype.findIdx=findIdx;function DBCSDecoder(e,a){this.nodeIdx=0;this.prevBytes=[];this.decodeTables=a.decodeTables;this.decodeTableSeq=a.decodeTableSeq;this.defaultCharUnicode=a.defaultCharUnicode;this.gb18030=a.gb18030}DBCSDecoder.prototype.write=function(e){var a=t.alloc(e.length*2),p=this.nodeIdx,o=this.prevBytes,n=this.prevBytes.length,l=-this.prevBytes.length,m;for(var c=0,u=0;c=0?e[c]:o[c+n];var m=this.decodeTables[p][h];if(m>=0){}else if(m===d){m=this.defaultCharUnicode.charCodeAt(0);c=l}else if(m===r){if(c>=3){var v=(e[c-3]-129)*12600+(e[c-2]-48)*1260+(e[c-1]-129)*10+(h-48)}else{var v=(o[c-3+n]-129)*12600+((c-2>=0?e[c-2]:o[c-2+n])-48)*1260+((c-1>=0?e[c-1]:o[c-1+n])-129)*10+(h-48)}var g=findIdx(this.gb18030.gbChars,v);m=this.gb18030.uChars[g]+v-this.gb18030.gbChars[g]}else if(m<=i){p=i-m;continue}else if(m<=s){var w=this.decodeTableSeq[s-m];for(var b=0;b>8}m=w[w.length-1]}else throw new Error("iconv-lite internal error: invalid decoding table value "+m+" at "+p+"/"+h);if(m>=65536){m-=65536;var _=55296|m>>10;a[u++]=_&255;a[u++]=_>>8;m=56320|m&1023}a[u++]=m&255;a[u++]=m>>8;p=0;l=c+1}this.nodeIdx=p;this.prevBytes=l>=0?Array.prototype.slice.call(e,l):o.slice(l+n).concat(Array.prototype.slice.call(e));return a.slice(0,u).toString("ucs2")};DBCSDecoder.prototype.end=function(){var e="";while(this.prevBytes.length>0){e+=this.defaultCharUnicode;var a=this.prevBytes.slice(1);this.prevBytes=[];this.nodeIdx=0;if(a.length>0)e+=this.write(a)}this.prevBytes=[];this.nodeIdx=0;return e};function findIdx(e,a){if(e[0]>a)return-1;var p=0,t=e.length;while(p>1);if(e[d]<=a)p=d;else t=d}return p}},3508:(e,a,p)=>{"use strict";e.exports={shiftjis:{type:"_dbcs",table:function(){return p(1537)},encodeAdd:{"¥":92,"‾":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return p(8601)},encodeAdd:{"¥":92,"‾":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return p(2029)}},gbk:{type:"_dbcs",table:function(){return p(2029).concat(p(9349))}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return p(2029).concat(p(9349))},gb18030:function(){return p(4705)},encodeSkipVals:[128],encodeAdd:{"€":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return p(920)}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return p(1154)}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return p(1154).concat(p(3870))},encodeSkipVals:[36457,36463,36478,36523,36532,36557,36560,36695,36713,36718,36811,36862,36973,36986,37060,37084,37105,37311,37551,37552,37553,37554,37585,37959,38090,38361,38652,39285,39798,39800,39803,39878,39902,39916,39926,40002,40019,40034,40040,40043,40055,40124,40125,40144,40279,40282,40388,40431,40443,40617,40687,40701,40800,40907,41079,41180,41183,36812,37576,38468,38637,41636,41637,41639,41638,41676,41678]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}},7731:(e,a,p)=>{"use strict";var t=[p(4781),p(5819),p(1762),p(6525),p(5034),p(672),p(9210),p(6637),p(3508)];for(var d=0;d{"use strict";var t=p(9761).Buffer;e.exports={utf8:{type:"_internal",bomAware:true},cesu8:{type:"_internal",bomAware:true},unicode11utf8:"utf8",ucs2:{type:"_internal",bomAware:true},utf16le:"ucs2",binary:{type:"_internal"},base64:{type:"_internal"},hex:{type:"_internal"},_internal:InternalCodec};function InternalCodec(e,a){this.enc=e.encodingName;this.bomAware=e.bomAware;if(this.enc==="base64")this.encoder=InternalEncoderBase64;else if(this.enc==="cesu8"){this.enc="utf8";this.encoder=InternalEncoderCesu8;if(t.from("eda0bdedb2a9","hex").toString()!=="💩"){this.decoder=InternalDecoderCesu8;this.defaultCharUnicode=a.defaultCharUnicode}}}InternalCodec.prototype.encoder=InternalEncoder;InternalCodec.prototype.decoder=InternalDecoder;var d=p(1576).StringDecoder;if(!d.prototype.end)d.prototype.end=function(){};function InternalDecoder(e,a){this.decoder=new d(a.enc)}InternalDecoder.prototype.write=function(e){if(!t.isBuffer(e)){e=t.from(e)}return this.decoder.write(e)};InternalDecoder.prototype.end=function(){return this.decoder.end()};function InternalEncoder(e,a){this.enc=a.enc}InternalEncoder.prototype.write=function(e){return t.from(e,this.enc)};InternalEncoder.prototype.end=function(){};function InternalEncoderBase64(e,a){this.prevStr=""}InternalEncoderBase64.prototype.write=function(e){e=this.prevStr+e;var a=e.length-e.length%4;this.prevStr=e.slice(a);e=e.slice(0,a);return t.from(e,"base64")};InternalEncoderBase64.prototype.end=function(){return t.from(this.prevStr,"base64")};function InternalEncoderCesu8(e,a){}InternalEncoderCesu8.prototype.write=function(e){var a=t.alloc(e.length*3),p=0;for(var d=0;d>>6);a[p++]=128+(r&63)}else{a[p++]=224+(r>>>12);a[p++]=128+(r>>>6&63);a[p++]=128+(r&63)}}return a.slice(0,p)};InternalEncoderCesu8.prototype.end=function(){};function InternalDecoderCesu8(e,a){this.acc=0;this.contBytes=0;this.accBytes=0;this.defaultCharUnicode=a.defaultCharUnicode}InternalDecoderCesu8.prototype.write=function(e){var a=this.acc,p=this.contBytes,t=this.accBytes,d="";for(var r=0;r0){d+=this.defaultCharUnicode;p=0}if(s<128){d+=String.fromCharCode(s)}else if(s<224){a=s&31;p=1;t=1}else if(s<240){a=s&15;p=2;t=1}else{d+=this.defaultCharUnicode}}else{if(p>0){a=a<<6|s&63;p--;t++;if(p===0){if(t===2&&a<128&&a>0)d+=this.defaultCharUnicode;else if(t===3&&a<2048)d+=this.defaultCharUnicode;else d+=String.fromCharCode(a)}}else{d+=this.defaultCharUnicode}}}this.acc=a;this.contBytes=p;this.accBytes=t;return d};InternalDecoderCesu8.prototype.end=function(){var e=0;if(this.contBytes>0)e+=this.defaultCharUnicode;return e}},5034:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a._sbcs=SBCSCodec;function SBCSCodec(e,a){if(!e)throw new Error("SBCS codec is called without the data.");if(!e.chars||e.chars.length!==128&&e.chars.length!==256)throw new Error("Encoding '"+e.type+"' has incorrect 'chars' (must be of len 128 or 256)");if(e.chars.length===128){var p="";for(var d=0;d<128;d++)p+=String.fromCharCode(d);e.chars=p+e.chars}this.decodeBuf=t.from(e.chars,"ucs2");var r=t.alloc(65536,a.defaultCharSingleByte.charCodeAt(0));for(var d=0;d{"use strict";e.exports={437:"cp437",737:"cp737",775:"cp775",850:"cp850",852:"cp852",855:"cp855",856:"cp856",857:"cp857",858:"cp858",860:"cp860",861:"cp861",862:"cp862",863:"cp863",864:"cp864",865:"cp865",866:"cp866",869:"cp869",874:"windows874",922:"cp922",1046:"cp1046",1124:"cp1124",1125:"cp1125",1129:"cp1129",1133:"cp1133",1161:"cp1161",1162:"cp1162",1163:"cp1163",1250:"windows1250",1251:"windows1251",1252:"windows1252",1253:"windows1253",1254:"windows1254",1255:"windows1255",1256:"windows1256",1257:"windows1257",1258:"windows1258",28591:"iso88591",28592:"iso88592",28593:"iso88593",28594:"iso88594",28595:"iso88595",28596:"iso88596",28597:"iso88597",28598:"iso88598",28599:"iso88599",28600:"iso885910",28601:"iso885911",28603:"iso885913",28604:"iso885914",28605:"iso885915",28606:"iso885916",windows874:{type:"_sbcs",chars:"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},win874:"windows874",cp874:"windows874",windows1250:{type:"_sbcs",chars:"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"},win1250:"windows1250",cp1250:"windows1250",windows1251:{type:"_sbcs",chars:"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},win1251:"windows1251",cp1251:"windows1251",windows1252:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},win1252:"windows1252",cp1252:"windows1252",windows1253:{type:"_sbcs",chars:"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"},win1253:"windows1253",cp1253:"windows1253",windows1254:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"},win1254:"windows1254",cp1254:"windows1254",windows1255:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"},win1255:"windows1255",cp1255:"windows1255",windows1256:{type:"_sbcs",chars:"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"},win1256:"windows1256",cp1256:"windows1256",windows1257:{type:"_sbcs",chars:"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"},win1257:"windows1257",cp1257:"windows1257",windows1258:{type:"_sbcs",chars:"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},win1258:"windows1258",cp1258:"windows1258",iso88591:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},cp28591:"iso88591",iso88592:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"},cp28592:"iso88592",iso88593:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"},cp28593:"iso88593",iso88594:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"},cp28594:"iso88594",iso88595:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"},cp28595:"iso88595",iso88596:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"},cp28596:"iso88596",iso88597:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"},cp28597:"iso88597",iso88598:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"},cp28598:"iso88598",iso88599:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"},cp28599:"iso88599",iso885910:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"},cp28600:"iso885910",iso885911:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},cp28601:"iso885911",iso885913:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"},cp28603:"iso885913",iso885914:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ"},cp28604:"iso885914",iso885915:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},cp28605:"iso885915",iso885916:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"},cp28606:"iso885916",cp437:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm437:"cp437",csibm437:"cp437",cp737:{type:"_sbcs",chars:"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ "},ibm737:"cp737",csibm737:"cp737",cp775:{type:"_sbcs",chars:"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ "},ibm775:"cp775",csibm775:"cp775",cp850:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "},ibm850:"cp850",csibm850:"cp850",cp852:{type:"_sbcs",chars:"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ "},ibm852:"cp852",csibm852:"cp852",cp855:{type:"_sbcs",chars:"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ "},ibm855:"cp855",csibm855:"cp855",cp856:{type:"_sbcs",chars:"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ "},ibm856:"cp856",csibm856:"cp856",cp857:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ "},ibm857:"cp857",csibm857:"cp857",cp858:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ "},ibm858:"cp858",csibm858:"cp858",cp860:{type:"_sbcs",chars:"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm860:"cp860",csibm860:"cp860",cp861:{type:"_sbcs",chars:"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm861:"cp861",csibm861:"cp861",cp862:{type:"_sbcs",chars:"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm862:"cp862",csibm862:"cp862",cp863:{type:"_sbcs",chars:"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm863:"cp863",csibm863:"cp863",cp864:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"},ibm864:"cp864",csibm864:"cp864",cp865:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm865:"cp865",csibm865:"cp865",cp866:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "},ibm866:"cp866",csibm866:"cp866",cp869:{type:"_sbcs",chars:"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ "},ibm869:"cp869",csibm869:"cp869",cp922:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ"},ibm922:"cp922",csibm922:"cp922",cp1046:{type:"_sbcs",chars:"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"},ibm1046:"cp1046",csibm1046:"cp1046",cp1124:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"},ibm1124:"cp1124",csibm1124:"cp1124",cp1125:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ "},ibm1125:"cp1125",csibm1125:"cp1125",cp1129:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1129:"cp1129",csibm1129:"cp1129",cp1133:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"},ibm1133:"cp1133",csibm1133:"cp1133",cp1161:{type:"_sbcs",chars:"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ "},ibm1161:"cp1161",csibm1161:"cp1161",cp1162:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},ibm1162:"cp1162",csibm1162:"cp1162",cp1163:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1163:"cp1163",csibm1163:"cp1163",maccroatian:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"},maccyrillic:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},macgreek:{type:"_sbcs",chars:"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"},maciceland:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macroman:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macromania:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macthai:{type:"_sbcs",chars:"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\ufeff​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"},macturkish:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"},macukraine:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},koi8r:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8u:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8ru:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8t:{type:"_sbcs",chars:"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},armscii8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"},rk1048:{type:"_sbcs",chars:"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},tcvn:{type:"_sbcs",chars:"\0ÚỤỪỬỮ\b\t\n\v\f\rỨỰỲỶỸÝỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"},georgianacademy:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},georgianps:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},pt154:{type:"_sbcs",chars:"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},viscii:{type:"_sbcs",chars:"\0ẲẴẪ\b\t\n\v\f\rỶỸỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"},iso646cn:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},iso646jp:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},hproman8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"},macintosh:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},ascii:{type:"_sbcs",chars:"��������������������������������������������������������������������������������������������������������������������������������"},tis620:{type:"_sbcs",chars:"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"}}},672:e=>{"use strict";e.exports={10029:"maccenteuro",maccenteuro:{type:"_sbcs",chars:"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"},808:"cp808",ibm808:"cp808",cp808:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ "},mik:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},cp720:{type:"_sbcs",chars:"€éâ„à†çêëèïّْô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡ًٌٍَُِ≈°∙·√ⁿ²■ "},ascii8bit:"ascii",usascii:"ascii",ansix34:"ascii",ansix341968:"ascii",ansix341986:"ascii",csascii:"ascii",cp367:"ascii",ibm367:"ascii",isoir6:"ascii",iso646us:"ascii",iso646irv:"ascii",us:"ascii",latin1:"iso88591",latin2:"iso88592",latin3:"iso88593",latin4:"iso88594",latin5:"iso88599",latin6:"iso885910",latin7:"iso885913",latin8:"iso885914",latin9:"iso885915",latin10:"iso885916",csisolatin1:"iso88591",csisolatin2:"iso88592",csisolatin3:"iso88593",csisolatin4:"iso88594",csisolatincyrillic:"iso88595",csisolatinarabic:"iso88596",csisolatingreek:"iso88597",csisolatinhebrew:"iso88598",csisolatin5:"iso88599",csisolatin6:"iso885910",l1:"iso88591",l2:"iso88592",l3:"iso88593",l4:"iso88594",l5:"iso88599",l6:"iso885910",l7:"iso885913",l8:"iso885914",l9:"iso885915",l10:"iso885916",isoir14:"iso646jp",isoir57:"iso646cn",isoir100:"iso88591",isoir101:"iso88592",isoir109:"iso88593",isoir110:"iso88594",isoir144:"iso88595",isoir127:"iso88596",isoir126:"iso88597",isoir138:"iso88598",isoir148:"iso88599",isoir157:"iso885910",isoir166:"tis620",isoir179:"iso885913",isoir199:"iso885914",isoir203:"iso885915",isoir226:"iso885916",cp819:"iso88591",ibm819:"iso88591",cyrillic:"iso88595",arabic:"iso88596",arabic8:"iso88596",ecma114:"iso88596",asmo708:"iso88596",greek:"iso88597",greek8:"iso88597",ecma118:"iso88597",elot928:"iso88597",hebrew:"iso88598",hebrew8:"iso88598",turkish:"iso88599",turkish8:"iso88599",thai:"iso885911",thai8:"iso885911",celtic:"iso885914",celtic8:"iso885914",isoceltic:"iso885914",tis6200:"tis620",tis62025291:"tis620",tis62025330:"tis620",1e4:"macroman",10006:"macgreek",10007:"maccyrillic",10079:"maciceland",10081:"macturkish",cspc8codepage437:"cp437",cspc775baltic:"cp775",cspc850multilingual:"cp850",cspcp852:"cp852",cspc862latinhebrew:"cp862",cpgr:"cp869",msee:"cp1250",mscyrl:"cp1251",msansi:"cp1252",msgreek:"cp1253",msturk:"cp1254",mshebr:"cp1255",msarab:"cp1256",winbaltrim:"cp1257",cp20866:"koi8r",20866:"koi8r",ibm878:"koi8r",cskoi8r:"koi8r",cp21866:"koi8u",21866:"koi8u",ibm1168:"koi8u",strk10482002:"rk1048",tcvn5712:"tcvn",tcvn57121:"tcvn",gb198880:"iso646cn",cn:"iso646cn",csiso14jisc6220ro:"iso646jp",jisc62201969ro:"iso646jp",jp:"iso646jp",cshproman8:"hproman8",r8:"hproman8",roman8:"hproman8",xroman8:"hproman8",ibm1051:"hproman8",mac:"macintosh",csmacintosh:"macintosh"}},1762:(e,a,p)=>{"use strict";var t=p(9761).Buffer;a.utf16be=Utf16BECodec;function Utf16BECodec(){}Utf16BECodec.prototype.encoder=Utf16BEEncoder;Utf16BECodec.prototype.decoder=Utf16BEDecoder;Utf16BECodec.prototype.bomAware=true;function Utf16BEEncoder(){}Utf16BEEncoder.prototype.write=function(e){var a=t.from(e,"ucs2");for(var p=0;p=100){break e}}}}if(r>d)return"utf-16be";if(r{"use strict";var t=p(9761).Buffer;a._utf32=Utf32Codec;function Utf32Codec(e,a){this.iconv=a;this.bomAware=true;this.isLE=e.isLE}a.utf32le={type:"_utf32",isLE:true};a.utf32be={type:"_utf32",isLE:false};a.ucs4le="utf32le";a.ucs4be="utf32be";Utf32Codec.prototype.encoder=Utf32Encoder;Utf32Codec.prototype.decoder=Utf32Decoder;function Utf32Encoder(e,a){this.isLE=a.isLE;this.highSurrogate=0}Utf32Encoder.prototype.write=function(e){var a=t.from(e,"ucs2");var p=t.alloc(a.length*2);var d=this.isLE?p.writeUInt32LE:p.writeUInt32BE;var r=0;for(var s=0;s0){for(;a1114111){p=t}if(p>=65536){p-=65536;var d=55296|p>>10;e[a++]=d&255;e[a++]=d>>8;var p=56320|p&1023}e[a++]=p&255;e[a++]=p>>8;return a}Utf32Decoder.prototype.end=function(){this.overflow.length=0};a.utf32=Utf32AutoCodec;a.ucs4="utf32";function Utf32AutoCodec(e,a){this.iconv=a}Utf32AutoCodec.prototype.encoder=Utf32AutoEncoder;Utf32AutoCodec.prototype.decoder=Utf32AutoDecoder;function Utf32AutoEncoder(e,a){e=e||{};if(e.addBOM===undefined)e.addBOM=true;this.encoder=a.iconv.getEncoder(e.defaultEncoding||"utf-32le",e)}Utf32AutoEncoder.prototype.write=function(e){return this.encoder.write(e)};Utf32AutoEncoder.prototype.end=function(){return this.encoder.end()};function Utf32AutoDecoder(e,a){this.decoder=null;this.initialBufs=[];this.initialBufsLen=0;this.options=e||{};this.iconv=a.iconv}Utf32AutoDecoder.prototype.write=function(e){if(!this.decoder){this.initialBufs.push(e);this.initialBufsLen+=e.length;if(this.initialBufsLen<32)return"";var a=detectEncoding(this.initialBufs,this.options.defaultEncoding);this.decoder=this.iconv.getDecoder(a,this.options);var p="";for(var t=0;t16)r++;if(p[3]!==0||p[2]>16)d++;if(p[0]===0&&p[1]===0&&(p[2]!==0||p[3]!==0))i++;if((p[0]!==0||p[1]!==0)&&p[2]===0&&p[3]===0)s++;p.length=0;t++;if(t>=100){break e}}}}if(i-r>s-d)return"utf-32be";if(i-r{"use strict";var t=p(9761).Buffer;a.utf7=Utf7Codec;a.unicode11utf7="utf7";function Utf7Codec(e,a){this.iconv=a}Utf7Codec.prototype.encoder=Utf7Encoder;Utf7Codec.prototype.decoder=Utf7Decoder;Utf7Codec.prototype.bomAware=true;var d=/[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;function Utf7Encoder(e,a){this.iconv=a.iconv}Utf7Encoder.prototype.write=function(e){return t.from(e.replace(d,function(e){return"+"+(e==="+"?"":this.iconv.encode(e,"utf16-be").toString("base64").replace(/=+$/,""))+"-"}.bind(this)))};Utf7Encoder.prototype.end=function(){};function Utf7Decoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=""}var r=/[A-Za-z0-9\/+]/;var s=[];for(var i=0;i<256;i++)s[i]=r.test(String.fromCharCode(i));var o="+".charCodeAt(0),n="-".charCodeAt(0),l="&".charCodeAt(0);Utf7Decoder.prototype.write=function(e){var a="",p=0,d=this.inBase64,r=this.base64Accum;for(var i=0;i0)e=this.iconv.decode(t.from(this.base64Accum,"base64"),"utf16-be");this.inBase64=false;this.base64Accum="";return e};a.utf7imap=Utf7IMAPCodec;function Utf7IMAPCodec(e,a){this.iconv=a}Utf7IMAPCodec.prototype.encoder=Utf7IMAPEncoder;Utf7IMAPCodec.prototype.decoder=Utf7IMAPDecoder;Utf7IMAPCodec.prototype.bomAware=true;function Utf7IMAPEncoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=t.alloc(6);this.base64AccumIdx=0}Utf7IMAPEncoder.prototype.write=function(e){var a=this.inBase64,p=this.base64Accum,d=this.base64AccumIdx,r=t.alloc(e.length*5+10),s=0;for(var i=0;i0){s+=r.write(p.slice(0,d).toString("base64").replace(/\//g,",").replace(/=+$/,""),s);d=0}r[s++]=n;a=false}if(!a){r[s++]=o;if(o===l)r[s++]=n}}else{if(!a){r[s++]=l;a=true}if(a){p[d++]=o>>8;p[d++]=o&255;if(d==p.length){s+=r.write(p.toString("base64").replace(/\//g,","),s);d=0}}}}this.inBase64=a;this.base64AccumIdx=d;return r.slice(0,s)};Utf7IMAPEncoder.prototype.end=function(){var e=t.alloc(10),a=0;if(this.inBase64){if(this.base64AccumIdx>0){a+=e.write(this.base64Accum.slice(0,this.base64AccumIdx).toString("base64").replace(/\//g,",").replace(/=+$/,""),a);this.base64AccumIdx=0}e[a++]=n;this.inBase64=false}return e.slice(0,a)};function Utf7IMAPDecoder(e,a){this.iconv=a.iconv;this.inBase64=false;this.base64Accum=""}var m=s.slice();m[",".charCodeAt(0)]=true;Utf7IMAPDecoder.prototype.write=function(e){var a="",p=0,d=this.inBase64,r=this.base64Accum;for(var s=0;s0)e=this.iconv.decode(t.from(this.base64Accum,"base64"),"utf16-be");this.inBase64=false;this.base64Accum="";return e}},816:(e,a)=>{"use strict";var p="\ufeff";a.PrependBOM=PrependBOMWrapper;function PrependBOMWrapper(e,a){this.encoder=e;this.addBOM=true}PrependBOMWrapper.prototype.write=function(e){if(this.addBOM){e=p+e;this.addBOM=false}return this.encoder.write(e)};PrependBOMWrapper.prototype.end=function(){return this.encoder.end()};a.StripBOM=StripBOMWrapper;function StripBOMWrapper(e,a){this.decoder=e;this.pass=false;this.options=a||{}}StripBOMWrapper.prototype.write=function(e){var a=this.decoder.write(e);if(this.pass||!a)return a;if(a[0]===p){a=a.slice(1);if(typeof this.options.stripBOM==="function")this.options.stripBOM()}this.pass=true;return a};StripBOMWrapper.prototype.end=function(){return this.decoder.end()}},6262:(e,a,p)=>{"use strict";var t=p(9761).Buffer;var d=p(816),r=e.exports;r.encodings=null;r.defaultCharUnicode="�";r.defaultCharSingleByte="?";r.encode=function encode(e,a,p){e=""+(e||"");var d=r.getEncoder(a,p);var s=d.write(e);var i=d.end();return i&&i.length>0?t.concat([s,i]):s};r.decode=function decode(e,a,p){if(typeof e==="string"){if(!r.skipDecodeWarning){console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");r.skipDecodeWarning=true}e=t.from(""+(e||""),"binary")}var d=r.getDecoder(a,p);var s=d.write(e);var i=d.end();return i?s+i:s};r.encodingExists=function encodingExists(e){try{r.getCodec(e);return true}catch(e){return false}};r.toEncoding=r.encode;r.fromEncoding=r.decode;r._codecDataCache={};r.getCodec=function getCodec(e){if(!r.encodings)r.encodings=p(7731);var a=r._canonicalizeEncoding(e);var t={};while(true){var d=r._codecDataCache[a];if(d)return d;var s=r.encodings[a];switch(typeof s){case"string":a=s;break;case"object":for(var i in s)t[i]=s[i];if(!t.encodingName)t.encodingName=a;a=s.type;break;case"function":if(!t.encodingName)t.encodingName=a;d=new s(t,r);r._codecDataCache[t.encodingName]=d;return d;default:throw new Error("Encoding not recognized: '"+e+"' (searched as: '"+a+"')")}}};r._canonicalizeEncoding=function(e){return(""+e).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")};r.getEncoder=function getEncoder(e,a){var p=r.getCodec(e),t=new p.encoder(a,p);if(p.bomAware&&a&&a.addBOM)t=new d.PrependBOM(t,a);return t};r.getDecoder=function getDecoder(e,a){var p=r.getCodec(e),t=new p.decoder(a,p);if(p.bomAware&&!(a&&a.stripBOM===false))t=new d.StripBOM(t,a);return t};r.enableStreamingAPI=function enableStreamingAPI(e){if(r.supportsStreams)return;var a=p(117)(e);r.IconvLiteEncoderStream=a.IconvLiteEncoderStream;r.IconvLiteDecoderStream=a.IconvLiteDecoderStream;r.encodeStream=function encodeStream(e,a){return new r.IconvLiteEncoderStream(r.getEncoder(e,a),a)};r.decodeStream=function decodeStream(e,a){return new r.IconvLiteDecoderStream(r.getDecoder(e,a),a)};r.supportsStreams=true};var s;try{s=p(2781)}catch(e){}if(s&&s.Transform){r.enableStreamingAPI(s)}else{r.encodeStream=r.decodeStream=function(){throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.")}}if(false){}},117:(e,a,p)=>{"use strict";var t=p(9761).Buffer;e.exports=function(e){var a=e.Transform;function IconvLiteEncoderStream(e,p){this.conv=e;p=p||{};p.decodeStrings=false;a.call(this,p)}IconvLiteEncoderStream.prototype=Object.create(a.prototype,{constructor:{value:IconvLiteEncoderStream}});IconvLiteEncoderStream.prototype._transform=function(e,a,p){if(typeof e!="string")return p(new Error("Iconv encoding stream needs strings as its input."));try{var t=this.conv.write(e);if(t&&t.length)this.push(t);p()}catch(e){p(e)}};IconvLiteEncoderStream.prototype._flush=function(e){try{var a=this.conv.end();if(a&&a.length)this.push(a);e()}catch(a){e(a)}};IconvLiteEncoderStream.prototype.collect=function(e){var a=[];this.on("error",e);this.on("data",(function(e){a.push(e)}));this.on("end",(function(){e(null,t.concat(a))}));return this};function IconvLiteDecoderStream(e,p){this.conv=e;p=p||{};p.encoding=this.encoding="utf8";a.call(this,p)}IconvLiteDecoderStream.prototype=Object.create(a.prototype,{constructor:{value:IconvLiteDecoderStream}});IconvLiteDecoderStream.prototype._transform=function(e,a,p){if(!t.isBuffer(e)&&!(e instanceof Uint8Array))return p(new Error("Iconv decoding stream needs buffers as its input."));try{var d=this.conv.write(e);if(d&&d.length)this.push(d,this.encoding);p()}catch(e){p(e)}};IconvLiteDecoderStream.prototype._flush=function(e){try{var a=this.conv.end();if(a&&a.length)this.push(a,this.encoding);e()}catch(a){e(a)}};IconvLiteDecoderStream.prototype.collect=function(e){var a="";this.on("error",e);this.on("data",(function(e){a+=e}));this.on("end",(function(){e(null,a)}));return this};return{IconvLiteEncoderStream:IconvLiteEncoderStream,IconvLiteDecoderStream:IconvLiteDecoderStream}}},1363:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true}); /*! * is-plain-object * * Copyright (c) 2014-2017, Jon Schlinkert. * Released under the MIT License. - */function isObject(e){return Object.prototype.toString.call(e)==="[object Object]"}function isPlainObject(e){var a,p;if(isObject(e)===false)return false;a=e.constructor;if(a===undefined)return true;p=a.prototype;if(isObject(p)===false)return false;if(p.hasOwnProperty("isPrototypeOf")===false){return false}return true}a.isPlainObject=isPlainObject},8885:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=_interopDefault(p(2781));var d=_interopDefault(p(3685));var r=_interopDefault(p(7310));var s=_interopDefault(p(9207));var i=_interopDefault(p(5687));var o=_interopDefault(p(9796));const n=t.Readable;const l=Symbol("buffer");const m=Symbol("type");class Blob{constructor(){this[m]="";const e=arguments[0];const a=arguments[1];const p=[];let t=0;if(e){const a=e;const d=Number(a.length);for(let e=0;e1&&arguments[1]!==undefined?arguments[1]:{},d=p.size;let r=d===undefined?0:d;var s=p.timeout;let i=s===undefined?0:s;if(e==null){e=null}else if(isURLSearchParams(e)){e=Buffer.from(e.toString())}else if(isBlob(e));else if(Buffer.isBuffer(e));else if(Object.prototype.toString.call(e)==="[object ArrayBuffer]"){e=Buffer.from(e)}else if(ArrayBuffer.isView(e)){e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)}else if(e instanceof t);else{e=Buffer.from(String(e))}this[u]={body:e,disturbed:false,error:null};this.size=r;this.timeout=i;if(e instanceof t){e.on("error",(function(e){const p=e.name==="AbortError"?e:new FetchError(`Invalid response body while trying to fetch ${a.url}: ${e.message}`,"system",e);a[u].error=p}))}}Body.prototype={get body(){return this[u].body},get bodyUsed(){return this[u].disturbed},arrayBuffer(){return consumeBody.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return consumeBody.call(this).then((function(a){return Object.assign(new Blob([],{type:e.toLowerCase()}),{[l]:a})}))},json(){var e=this;return consumeBody.call(this).then((function(a){try{return JSON.parse(a.toString())}catch(a){return Body.Promise.reject(new FetchError(`invalid json response body at ${e.url} reason: ${a.message}`,"invalid-json"))}}))},text(){return consumeBody.call(this).then((function(e){return e.toString()}))},buffer(){return consumeBody.call(this)},textConverted(){var e=this;return consumeBody.call(this).then((function(a){return convertBody(a,e.headers)}))}};Object.defineProperties(Body.prototype,{body:{enumerable:true},bodyUsed:{enumerable:true},arrayBuffer:{enumerable:true},blob:{enumerable:true},json:{enumerable:true},text:{enumerable:true}});Body.mixIn=function(e){for(const a of Object.getOwnPropertyNames(Body.prototype)){if(!(a in e)){const p=Object.getOwnPropertyDescriptor(Body.prototype,a);Object.defineProperty(e,a,p)}}};function consumeBody(){var e=this;if(this[u].disturbed){return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`))}this[u].disturbed=true;if(this[u].error){return Body.Promise.reject(this[u].error)}let a=this.body;if(a===null){return Body.Promise.resolve(Buffer.alloc(0))}if(isBlob(a)){a=a.stream()}if(Buffer.isBuffer(a)){return Body.Promise.resolve(a)}if(!(a instanceof t)){return Body.Promise.resolve(Buffer.alloc(0))}let p=[];let d=0;let r=false;return new Body.Promise((function(t,s){let i;if(e.timeout){i=setTimeout((function(){r=true;s(new FetchError(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)}a.on("error",(function(a){if(a.name==="AbortError"){r=true;s(a)}else{s(new FetchError(`Invalid response body while trying to fetch ${e.url}: ${a.message}`,"system",a))}}));a.on("data",(function(a){if(r||a===null){return}if(e.size&&d+a.length>e.size){r=true;s(new FetchError(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}d+=a.length;p.push(a)}));a.on("end",(function(){if(r){return}clearTimeout(i);try{t(Buffer.concat(p,d))}catch(a){s(new FetchError(`Could not create Buffer from response body for ${e.url}: ${a.message}`,"system",a))}}))}))}function convertBody(e,a){if(typeof c!=="function"){throw new Error("The package `encoding` must be installed to use the textConverted() function")}const p=a.get("content-type");let t="utf-8";let d,r;if(p){d=/charset=([^;]*)/i.exec(p)}r=e.slice(0,1024).toString();if(!d&&r){d=/0&&arguments[0]!==undefined?arguments[0]:undefined;this[w]=Object.create(null);if(e instanceof Headers){const a=e.raw();const p=Object.keys(a);for(const e of p){for(const p of a[e]){this.append(e,p)}}return}if(e==null);else if(typeof e==="object"){const a=e[Symbol.iterator];if(a!=null){if(typeof a!=="function"){throw new TypeError("Header pairs must be iterable")}const p=[];for(const a of e){if(typeof a!=="object"||typeof a[Symbol.iterator]!=="function"){throw new TypeError("Each header pair must be iterable")}p.push(Array.from(a))}for(const e of p){if(e.length!==2){throw new TypeError("Each header pair must be a name/value tuple")}this.append(e[0],e[1])}}else{for(const a of Object.keys(e)){const p=e[a];this.append(a,p)}}}else{throw new TypeError("Provided initializer must be an object")}}get(e){e=`${e}`;validateName(e);const a=find(this[w],e);if(a===undefined){return null}return this[w][a].join(", ")}forEach(e){let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;let p=getHeaders(this);let t=0;while(t1&&arguments[1]!==undefined?arguments[1]:"key+value";const p=Object.keys(e[w]).sort();return p.map(a==="key"?function(e){return e.toLowerCase()}:a==="value"?function(a){return e[w][a].join(", ")}:function(a){return[a.toLowerCase(),e[w][a].join(", ")]})}const b=Symbol("internal");function createHeadersIterator(e,a){const p=Object.create(_);p[b]={target:e,kind:a,index:0};return p}const _=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==_){throw new TypeError("Value of `this` is not a HeadersIterator")}var e=this[b];const a=e.target,p=e.kind,t=e.index;const d=getHeaders(a,p);const r=d.length;if(t>=r){return{value:undefined,done:true}}this[b].index=t+1;return{value:d[t],done:false}}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(_,Symbol.toStringTag,{value:"HeadersIterator",writable:false,enumerable:false,configurable:true});function exportNodeCompatibleHeaders(e){const a=Object.assign({__proto__:null},e[w]);const p=find(e[w],"Host");if(p!==undefined){a[p]=a[p][0]}return a}function createHeadersLenient(e){const a=new Headers;for(const p of Object.keys(e)){if(v.test(p)){continue}if(Array.isArray(e[p])){for(const t of e[p]){if(g.test(t)){continue}if(a[w][p]===undefined){a[w][p]=[t]}else{a[w][p].push(t)}}}else if(!g.test(e[p])){a[w][p]=[e[p]]}}return a}const T=Symbol("Response internals");const E=d.STATUS_CODES;class Response{constructor(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};Body.call(this,e,a);const p=a.status||200;const t=new Headers(a.headers);if(e!=null&&!t.has("Content-Type")){const a=extractContentType(e);if(a){t.append("Content-Type",a)}}this[T]={url:a.url,status:p,statusText:a.statusText||E[p],headers:t,counter:a.counter}}get url(){return this[T].url||""}get status(){return this[T].status}get ok(){return this[T].status>=200&&this[T].status<300}get redirected(){return this[T].counter>0}get statusText(){return this[T].statusText}get headers(){return this[T].headers}clone(){return new Response(clone(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}Body.mixIn(Response.prototype);Object.defineProperties(Response.prototype,{url:{enumerable:true},status:{enumerable:true},ok:{enumerable:true},redirected:{enumerable:true},statusText:{enumerable:true},headers:{enumerable:true},clone:{enumerable:true}});Object.defineProperty(Response.prototype,Symbol.toStringTag,{value:"Response",writable:false,enumerable:false,configurable:true});const y=Symbol("Request internals");const S=r.URL||s.URL;const D=r.parse;const A=r.format;function parseURL(e){if(/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(e)){e=new S(e).toString()}return D(e)}const P="destroy"in t.Readable.prototype;function isRequest(e){return typeof e==="object"&&typeof e[y]==="object"}function isAbortSignal(e){const a=e&&typeof e==="object"&&Object.getPrototypeOf(e);return!!(a&&a.constructor.name==="AbortSignal")}class Request{constructor(e){let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let p;if(!isRequest(e)){if(e&&e.href){p=parseURL(e.href)}else{p=parseURL(`${e}`)}e={}}else{p=parseURL(e.url)}let t=a.method||e.method||"GET";t=t.toUpperCase();if((a.body!=null||isRequest(e)&&e.body!==null)&&(t==="GET"||t==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body")}let d=a.body!=null?a.body:isRequest(e)&&e.body!==null?clone(e):null;Body.call(this,d,{timeout:a.timeout||e.timeout||0,size:a.size||e.size||0});const r=new Headers(a.headers||e.headers||{});if(d!=null&&!r.has("Content-Type")){const e=extractContentType(d);if(e){r.append("Content-Type",e)}}let s=isRequest(e)?e.signal:null;if("signal"in a)s=a.signal;if(s!=null&&!isAbortSignal(s)){throw new TypeError("Expected signal to be an instanceof AbortSignal")}this[y]={method:t,redirect:a.redirect||e.redirect||"follow",headers:r,parsedURL:p,signal:s};this.follow=a.follow!==undefined?a.follow:e.follow!==undefined?e.follow:20;this.compress=a.compress!==undefined?a.compress:e.compress!==undefined?e.compress:true;this.counter=a.counter||e.counter||0;this.agent=a.agent||e.agent}get method(){return this[y].method}get url(){return A(this[y].parsedURL)}get headers(){return this[y].headers}get redirect(){return this[y].redirect}get signal(){return this[y].signal}clone(){return new Request(this)}}Body.mixIn(Request.prototype);Object.defineProperty(Request.prototype,Symbol.toStringTag,{value:"Request",writable:false,enumerable:false,configurable:true});Object.defineProperties(Request.prototype,{method:{enumerable:true},url:{enumerable:true},headers:{enumerable:true},redirect:{enumerable:true},clone:{enumerable:true},signal:{enumerable:true}});function getNodeRequestOptions(e){const a=e[y].parsedURL;const p=new Headers(e[y].headers);if(!p.has("Accept")){p.set("Accept","*/*")}if(!a.protocol||!a.hostname){throw new TypeError("Only absolute URLs are supported")}if(!/^https?:$/.test(a.protocol)){throw new TypeError("Only HTTP(S) protocols are supported")}if(e.signal&&e.body instanceof t.Readable&&!P){throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8")}let d=null;if(e.body==null&&/^(POST|PUT)$/i.test(e.method)){d="0"}if(e.body!=null){const a=getTotalBytes(e);if(typeof a==="number"){d=String(a)}}if(d){p.set("Content-Length",d)}if(!p.has("User-Agent")){p.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)")}if(e.compress&&!p.has("Accept-Encoding")){p.set("Accept-Encoding","gzip,deflate")}let r=e.agent;if(typeof r==="function"){r=r(a)}if(!p.has("Connection")&&!r){p.set("Connection","close")}return Object.assign({},a,{method:e.method,headers:exportNodeCompatibleHeaders(p),agent:r})}function AbortError(e){Error.call(this,e);this.type="aborted";this.message=e;Error.captureStackTrace(this,this.constructor)}AbortError.prototype=Object.create(Error.prototype);AbortError.prototype.constructor=AbortError;AbortError.prototype.name="AbortError";const O=r.URL||s.URL;const k=t.PassThrough;const C=function isDomainOrSubdomain(e,a){const p=new O(a).hostname;const t=new O(e).hostname;return p===t||p[p.length-t.length-1]==="."&&p.endsWith(t)};const N=function isSameProtocol(e,a){const p=new O(a).protocol;const t=new O(e).protocol;return p===t};function fetch(e,a){if(!fetch.Promise){throw new Error("native promise missing, set fetch.Promise to your favorite alternative")}Body.Promise=fetch.Promise;return new fetch.Promise((function(p,r){const s=new Request(e,a);const n=getNodeRequestOptions(s);const l=(n.protocol==="https:"?i:d).request;const m=s.signal;let c=null;const u=function abort(){let e=new AbortError("The user aborted a request.");r(e);if(s.body&&s.body instanceof t.Readable){destroyStream(s.body,e)}if(!c||!c.body)return;c.body.emit("error",e)};if(m&&m.aborted){u();return}const h=function abortAndFinalize(){u();finalize()};const v=l(n);let g;if(m){m.addEventListener("abort",h)}function finalize(){v.abort();if(m)m.removeEventListener("abort",h);clearTimeout(g)}if(s.timeout){v.once("socket",(function(e){g=setTimeout((function(){r(new FetchError(`network timeout at: ${s.url}`,"request-timeout"));finalize()}),s.timeout)}))}v.on("error",(function(e){r(new FetchError(`request to ${s.url} failed, reason: ${e.message}`,"system",e));if(c&&c.body){destroyStream(c.body,e)}finalize()}));fixResponseChunkedTransferBadEnding(v,(function(e){if(m&&m.aborted){return}if(c&&c.body){destroyStream(c.body,e)}}));if(parseInt(process.version.substring(1))<14){v.on("socket",(function(e){e.addListener("close",(function(a){const p=e.listenerCount("data")>0;if(c&&p&&!a&&!(m&&m.aborted)){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";c.body.emit("error",e)}}))}))}v.on("response",(function(e){clearTimeout(g);const a=createHeadersLenient(e.headers);if(fetch.isRedirect(e.statusCode)){const t=a.get("Location");let d=null;try{d=t===null?null:new O(t,s.url).toString()}catch(e){if(s.redirect!=="manual"){r(new FetchError(`uri requested responds with an invalid redirect URL: ${t}`,"invalid-redirect"));finalize();return}}switch(s.redirect){case"error":r(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${s.url}`,"no-redirect"));finalize();return;case"manual":if(d!==null){try{a.set("Location",d)}catch(e){r(e)}}break;case"follow":if(d===null){break}if(s.counter>=s.follow){r(new FetchError(`maximum redirect reached at: ${s.url}`,"max-redirect"));finalize();return}const t={headers:new Headers(s.headers),follow:s.follow,counter:s.counter+1,agent:s.agent,compress:s.compress,method:s.method,body:s.body,signal:s.signal,timeout:s.timeout,size:s.size};if(!C(s.url,d)||!N(s.url,d)){for(const e of["authorization","www-authenticate","cookie","cookie2"]){t.headers.delete(e)}}if(e.statusCode!==303&&s.body&&getTotalBytes(s)===null){r(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect"));finalize();return}if(e.statusCode===303||(e.statusCode===301||e.statusCode===302)&&s.method==="POST"){t.method="GET";t.body=undefined;t.headers.delete("content-length")}p(fetch(new Request(d,t)));finalize();return}}e.once("end",(function(){if(m)m.removeEventListener("abort",h)}));let t=e.pipe(new k);const d={url:s.url,status:e.statusCode,statusText:e.statusMessage,headers:a,size:s.size,timeout:s.timeout,counter:s.counter};const i=a.get("Content-Encoding");if(!s.compress||s.method==="HEAD"||i===null||e.statusCode===204||e.statusCode===304){c=new Response(t,d);p(c);return}const n={flush:o.Z_SYNC_FLUSH,finishFlush:o.Z_SYNC_FLUSH};if(i=="gzip"||i=="x-gzip"){t=t.pipe(o.createGunzip(n));c=new Response(t,d);p(c);return}if(i=="deflate"||i=="x-deflate"){const a=e.pipe(new k);a.once("data",(function(e){if((e[0]&15)===8){t=t.pipe(o.createInflate())}else{t=t.pipe(o.createInflateRaw())}c=new Response(t,d);p(c)}));a.on("end",(function(){if(!c){c=new Response(t,d);p(c)}}));return}if(i=="br"&&typeof o.createBrotliDecompress==="function"){t=t.pipe(o.createBrotliDecompress());c=new Response(t,d);p(c);return}c=new Response(t,d);p(c)}));writeToStream(v,s)}))}function fixResponseChunkedTransferBadEnding(e,a){let p;e.on("socket",(function(e){p=e}));e.on("response",(function(e){const t=e.headers;if(t["transfer-encoding"]==="chunked"&&!t["content-length"]){e.once("close",(function(e){const t=p.listenerCount("data")>0;if(t&&!e){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";a(e)}}))}}))}function destroyStream(e,a){if(e.destroy){e.destroy(a)}else{e.emit("error",a);e.end()}}fetch.isRedirect=function(e){return e===301||e===302||e===303||e===307||e===308};fetch.Promise=global.Promise;e.exports=a=fetch;Object.defineProperty(a,"__esModule",{value:true});a["default"]=a;a.Headers=Headers;a.Request=Request;a.Response=Response;a.FetchError=FetchError},180:(e,a,p)=>{"use strict";var t=p(5477);var d=p(2813);var r={TRANSITIONAL:0,NONTRANSITIONAL:1};function normalize(e){return e.split("\0").map((function(e){return e.normalize("NFC")})).join("\0")}function findStatus(e){var a=0;var p=d.length-1;while(a<=p){var t=Math.floor((a+p)/2);var r=d[t];if(r[0][0]<=e&&r[0][1]>=e){return r}else if(r[0][0]>e){p=t-1}else{a=t+1}}return null}var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function countSymbols(e){return e.replace(s,"_").length}function mapChars(e,a,p){var t=false;var d="";var s=countSymbols(e);for(var i=0;i253||i.length===0){r.error=true}for(var o=0;o63||s.length===0){r.error=true;break}}}if(r.error)return null;return s.join(".")};e.exports.toUnicode=function(e,a){var p=processing(e,a,r.NONTRANSITIONAL);return{domain:p.string,error:p.error}};e.exports.PROCESSING_OPTIONS=r},2358:e=>{"use strict";var a={};e.exports=a;function sign(e){return e<0?-1:1}function evenRound(e){if(e%1===.5&&(e&1)===0){return Math.floor(e)}else{return Math.round(e)}}function createNumberConversion(e,a){if(!a.unsigned){--e}const p=a.unsigned?0:-Math.pow(2,e);const t=Math.pow(2,e)-1;const d=a.moduloBitLength?Math.pow(2,a.moduloBitLength):Math.pow(2,e);const r=a.moduloBitLength?Math.pow(2,a.moduloBitLength-1):Math.pow(2,e-1);return function(e,s){if(!s)s={};let i=+e;if(s.enforceRange){if(!Number.isFinite(i)){throw new TypeError("Argument is not a finite number")}i=sign(i)*Math.floor(Math.abs(i));if(it){throw new TypeError("Argument is not in byte range")}return i}if(!isNaN(i)&&s.clamp){i=evenRound(i);if(it)i=t;return i}if(!Number.isFinite(i)||i===0){return 0}i=sign(i)*Math.floor(Math.abs(i));i=i%d;if(!a.unsigned&&i>=r){return i-d}else if(a.unsigned){if(i<0){i+=d}else if(i===-0){return 0}}return i}}a["void"]=function(){return undefined};a["boolean"]=function(e){return!!e};a["byte"]=createNumberConversion(8,{unsigned:false});a["octet"]=createNumberConversion(8,{unsigned:true});a["short"]=createNumberConversion(16,{unsigned:false});a["unsigned short"]=createNumberConversion(16,{unsigned:true});a["long"]=createNumberConversion(32,{unsigned:false});a["unsigned long"]=createNumberConversion(32,{unsigned:true});a["long long"]=createNumberConversion(32,{unsigned:false,moduloBitLength:64});a["unsigned long long"]=createNumberConversion(32,{unsigned:true,moduloBitLength:64});a["double"]=function(e){const a=+e;if(!Number.isFinite(a)){throw new TypeError("Argument is not a finite floating-point value")}return a};a["unrestricted double"]=function(e){const a=+e;if(isNaN(a)){throw new TypeError("Argument is NaN")}return a};a["float"]=a["double"];a["unrestricted float"]=a["unrestricted double"];a["DOMString"]=function(e,a){if(!a)a={};if(a.treatNullAsEmptyString&&e===null){return""}return String(e)};a["ByteString"]=function(e,a){const p=String(e);let t=undefined;for(let e=0;(t=p.codePointAt(e))!==undefined;++e){if(t>255){throw new TypeError("Argument is not a valid bytestring")}}return p};a["USVString"]=function(e){const a=String(e);const p=a.length;const t=[];for(let e=0;e57343){t.push(String.fromCodePoint(d))}else if(56320<=d&&d<=57343){t.push(String.fromCodePoint(65533))}else{if(e===p-1){t.push(String.fromCodePoint(65533))}else{const p=a.charCodeAt(e+1);if(56320<=p&&p<=57343){const a=d&1023;const r=p&1023;t.push(String.fromCodePoint((2<<15)+(2<<9)*a+r));++e}else{t.push(String.fromCodePoint(65533))}}}}return t.join("")};a["Date"]=function(e,a){if(!(e instanceof Date)){throw new TypeError("Argument is not a Date object")}if(isNaN(e)){return undefined}return e};a["RegExp"]=function(e,a){if(!(e instanceof RegExp)){e=new RegExp(e)}return e}},5059:(e,a,p)=>{"use strict";const t=p(3713);a.implementation=class URLImpl{constructor(e){const a=e[0];const p=e[1];let d=null;if(p!==undefined){d=t.basicURLParse(p);if(d==="failure"){throw new TypeError("Invalid base URL")}}const r=t.basicURLParse(a,{baseURL:d});if(r==="failure"){throw new TypeError("Invalid URL")}this._url=r}get href(){return t.serializeURL(this._url)}set href(e){const a=t.basicURLParse(e);if(a==="failure"){throw new TypeError("Invalid URL")}this._url=a}get origin(){return t.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(e){t.basicURLParse(e+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}t.setTheUsername(this._url,e)}get password(){return this._url.password}set password(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}t.setThePassword(this._url,e)}get host(){const e=this._url;if(e.host===null){return""}if(e.port===null){return t.serializeHost(e.host)}return t.serializeHost(e.host)+":"+t.serializeInteger(e.port)}set host(e){if(this._url.cannotBeABaseURL){return}t.basicURLParse(e,{url:this._url,stateOverride:"host"})}get hostname(){if(this._url.host===null){return""}return t.serializeHost(this._url.host)}set hostname(e){if(this._url.cannotBeABaseURL){return}t.basicURLParse(e,{url:this._url,stateOverride:"hostname"})}get port(){if(this._url.port===null){return""}return t.serializeInteger(this._url.port)}set port(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}if(e===""){this._url.port=null}else{t.basicURLParse(e,{url:this._url,stateOverride:"port"})}}get pathname(){if(this._url.cannotBeABaseURL){return this._url.path[0]}if(this._url.path.length===0){return""}return"/"+this._url.path.join("/")}set pathname(e){if(this._url.cannotBeABaseURL){return}this._url.path=[];t.basicURLParse(e,{url:this._url,stateOverride:"path start"})}get search(){if(this._url.query===null||this._url.query===""){return""}return"?"+this._url.query}set search(e){const a=this._url;if(e===""){a.query=null;return}const p=e[0]==="?"?e.substring(1):e;a.query="";t.basicURLParse(p,{url:a,stateOverride:"query"})}get hash(){if(this._url.fragment===null||this._url.fragment===""){return""}return"#"+this._url.fragment}set hash(e){if(e===""){this._url.fragment=null;return}const a=e[0]==="#"?e.substring(1):e;this._url.fragment="";t.basicURLParse(a,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}}},8347:(e,a,p)=>{"use strict";const t=p(2358);const d=p(9267);const r=p(5059);const s=d.implSymbol;function URL(a){if(!this||this[s]||!(this instanceof URL)){throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.")}if(arguments.length<1){throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.")}const p=[];for(let e=0;e{"use strict";a.URL=p(8347)["interface"];a.serializeURL=p(3713).serializeURL;a.serializeURLOrigin=p(3713).serializeURLOrigin;a.basicURLParse=p(3713).basicURLParse;a.setTheUsername=p(3713).setTheUsername;a.setThePassword=p(3713).setThePassword;a.serializeHost=p(3713).serializeHost;a.serializeInteger=p(3713).serializeInteger;a.parseURL=p(3713).parseURL},3713:(e,a,p)=>{"use strict";const t=p(5477);const d=p(180);const r={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443};const s=Symbol("failure");function countSymbols(e){return t.ucs2.decode(e).length}function at(e,a){const p=e[a];return isNaN(p)?undefined:String.fromCodePoint(p)}function isASCIIDigit(e){return e>=48&&e<=57}function isASCIIAlpha(e){return e>=65&&e<=90||e>=97&&e<=122}function isASCIIAlphanumeric(e){return isASCIIAlpha(e)||isASCIIDigit(e)}function isASCIIHex(e){return isASCIIDigit(e)||e>=65&&e<=70||e>=97&&e<=102}function isSingleDot(e){return e==="."||e.toLowerCase()==="%2e"}function isDoubleDot(e){e=e.toLowerCase();return e===".."||e==="%2e."||e===".%2e"||e==="%2e%2e"}function isWindowsDriveLetterCodePoints(e,a){return isASCIIAlpha(e)&&(a===58||a===124)}function isWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&(e[1]===":"||e[1]==="|")}function isNormalizedWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&e[1]===":"}function containsForbiddenHostCodePoint(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}function containsForbiddenHostCodePointExcludingPercent(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}function isSpecialScheme(e){return r[e]!==undefined}function isSpecial(e){return isSpecialScheme(e.scheme)}function defaultPort(e){return r[e]}function percentEncode(e){let a=e.toString(16).toUpperCase();if(a.length===1){a="0"+a}return"%"+a}function utf8PercentEncode(e){const a=new Buffer(e);let p="";for(let e=0;e126}const i=new Set([32,34,35,60,62,63,96,123,125]);function isPathPercentEncode(e){return isC0ControlPercentEncode(e)||i.has(e)}const o=new Set([47,58,59,61,64,91,92,93,94,124]);function isUserinfoPercentEncode(e){return isPathPercentEncode(e)||o.has(e)}function percentEncodeChar(e,a){const p=String.fromCodePoint(e);if(a(e)){return utf8PercentEncode(p)}return p}function parseIPv4Number(e){let a=10;if(e.length>=2&&e.charAt(0)==="0"&&e.charAt(1).toLowerCase()==="x"){e=e.substring(2);a=16}else if(e.length>=2&&e.charAt(0)==="0"){e=e.substring(1);a=8}if(e===""){return 0}const p=a===10?/[^0-9]/:a===16?/[^0-9A-Fa-f]/:/[^0-7]/;if(p.test(e)){return s}return parseInt(e,a)}function parseIPv4(e){const a=e.split(".");if(a[a.length-1]===""){if(a.length>1){a.pop()}}if(a.length>4){return e}const p=[];for(const t of a){if(t===""){return e}const a=parseIPv4Number(t);if(a===s){return e}p.push(a)}for(let e=0;e255){return s}}if(p[p.length-1]>=Math.pow(256,5-p.length)){return s}let t=p.pop();let d=0;for(const e of p){t+=e*Math.pow(256,3-d);++d}return t}function serializeIPv4(e){let a="";let p=e;for(let e=1;e<=4;++e){a=String(p%256)+a;if(e!==4){a="."+a}p=Math.floor(p/256)}return a}function parseIPv6(e){const a=[0,0,0,0,0,0,0,0];let p=0;let d=null;let r=0;e=t.ucs2.decode(e);if(e[r]===58){if(e[r+1]!==58){return s}r+=2;++p;d=p}while(r6){return s}let t=0;while(e[r]!==undefined){let d=null;if(t>0){if(e[r]===46&&t<4){++r}else{return s}}if(!isASCIIDigit(e[r])){return s}while(isASCIIDigit(e[r])){const a=parseInt(at(e,r));if(d===null){d=a}else if(d===0){return s}else{d=d*10+a}if(d>255){return s}++r}a[p]=a[p]*256+d;++t;if(t===2||t===4){++p}}if(t!==4){return s}break}else if(e[r]===58){++r;if(e[r]===undefined){return s}}else if(e[r]!==undefined){return s}a[p]=t;++p}if(d!==null){let e=p-d;p=7;while(p!==0&&e>0){const t=a[d+e-1];a[d+e-1]=a[p];a[p]=t;--p;--e}}else if(d===null&&p!==8){return s}return a}function serializeIPv6(e){let a="";const p=findLongestZeroSequence(e);const t=p.idx;let d=false;for(let p=0;p<=7;++p){if(d&&e[p]===0){continue}else if(d){d=false}if(t===p){const e=p===0?"::":":";a+=e;d=true;continue}a+=e[p].toString(16);if(p!==7){a+=":"}}return a}function parseHost(e,a){if(e[0]==="["){if(e[e.length-1]!=="]"){return s}return parseIPv6(e.substring(1,e.length-1))}if(!a){return parseOpaqueHost(e)}const p=utf8PercentDecode(e);const t=d.toASCII(p,false,d.PROCESSING_OPTIONS.NONTRANSITIONAL,false);if(t===null){return s}if(containsForbiddenHostCodePoint(t)){return s}const r=parseIPv4(t);if(typeof r==="number"||r===s){return r}return t}function parseOpaqueHost(e){if(containsForbiddenHostCodePointExcludingPercent(e)){return s}let a="";const p=t.ucs2.decode(e);for(let e=0;ep){a=t;p=d}t=null;d=0}else{if(t===null){t=r}++d}}if(d>p){a=t;p=d}return{idx:a,len:p}}function serializeHost(e){if(typeof e==="number"){return serializeIPv4(e)}if(e instanceof Array){return"["+serializeIPv6(e)+"]"}return e}function trimControlChars(e){return e.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}function trimTabAndNewline(e){return e.replace(/\u0009|\u000A|\u000D/g,"")}function shortenPath(e){const a=e.path;if(a.length===0){return}if(e.scheme==="file"&&a.length===1&&isNormalizedWindowsDriveLetter(a[0])){return}a.pop()}function includesCredentials(e){return e.username!==""||e.password!==""}function cannotHaveAUsernamePasswordPort(e){return e.host===null||e.host===""||e.cannotBeABaseURL||e.scheme==="file"}function isNormalizedWindowsDriveLetter(e){return/^[A-Za-z]:$/.test(e)}function URLStateMachine(e,a,p,d,r){this.pointer=0;this.input=e;this.base=a||null;this.encodingOverride=p||"utf-8";this.stateOverride=r;this.url=d;this.failure=false;this.parseError=false;if(!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:false};const e=trimControlChars(this.input);if(e!==this.input){this.parseError=true}this.input=e}const i=trimTabAndNewline(this.input);if(i!==this.input){this.parseError=true}this.input=i;this.state=r||"scheme start";this.buffer="";this.atFlag=false;this.arrFlag=false;this.passwordTokenSeenFlag=false;this.input=t.ucs2.decode(this.input);for(;this.pointer<=this.input.length;++this.pointer){const e=this.input[this.pointer];const a=isNaN(e)?undefined:String.fromCodePoint(e);const p=this["parse "+this.state](e,a);if(!p){break}else if(p===s){this.failure=true;break}}}URLStateMachine.prototype["parse scheme start"]=function parseSchemeStart(e,a){if(isASCIIAlpha(e)){this.buffer+=a.toLowerCase();this.state="scheme"}else if(!this.stateOverride){this.state="no scheme";--this.pointer}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse scheme"]=function parseScheme(e,a){if(isASCIIAlphanumeric(e)||e===43||e===45||e===46){this.buffer+=a.toLowerCase()}else if(e===58){if(this.stateOverride){if(isSpecial(this.url)&&!isSpecialScheme(this.buffer)){return false}if(!isSpecial(this.url)&&isSpecialScheme(this.buffer)){return false}if((includesCredentials(this.url)||this.url.port!==null)&&this.buffer==="file"){return false}if(this.url.scheme==="file"&&(this.url.host===""||this.url.host===null)){return false}}this.url.scheme=this.buffer;this.buffer="";if(this.stateOverride){return false}if(this.url.scheme==="file"){if(this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47){this.parseError=true}this.state="file"}else if(isSpecial(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme){this.state="special relative or authority"}else if(isSpecial(this.url)){this.state="special authority slashes"}else if(this.input[this.pointer+1]===47){this.state="path or authority";++this.pointer}else{this.url.cannotBeABaseURL=true;this.url.path.push("");this.state="cannot-be-a-base-URL path"}}else if(!this.stateOverride){this.buffer="";this.state="no scheme";this.pointer=-1}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse no scheme"]=function parseNoScheme(e){if(this.base===null||this.base.cannotBeABaseURL&&e!==35){return s}else if(this.base.cannotBeABaseURL&&e===35){this.url.scheme=this.base.scheme;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.url.cannotBeABaseURL=true;this.state="fragment"}else if(this.base.scheme==="file"){this.state="file";--this.pointer}else{this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse special relative or authority"]=function parseSpecialRelativeOrAuthority(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse path or authority"]=function parsePathOrAuthority(e){if(e===47){this.state="authority"}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative"]=function parseRelative(e){this.url.scheme=this.base.scheme;if(isNaN(e)){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===47){this.state="relative slash"}else if(e===63){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else if(isSpecial(this.url)&&e===92){this.parseError=true;this.state="relative slash"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice(0,this.base.path.length-1);this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative slash"]=function parseRelativeSlash(e){if(isSpecial(this.url)&&(e===47||e===92)){if(e===92){this.parseError=true}this.state="special authority ignore slashes"}else if(e===47){this.state="authority"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse special authority slashes"]=function parseSpecialAuthoritySlashes(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="special authority ignore slashes";--this.pointer}return true};URLStateMachine.prototype["parse special authority ignore slashes"]=function parseSpecialAuthorityIgnoreSlashes(e){if(e!==47&&e!==92){this.state="authority";--this.pointer}else{this.parseError=true}return true};URLStateMachine.prototype["parse authority"]=function parseAuthority(e,a){if(e===64){this.parseError=true;if(this.atFlag){this.buffer="%40"+this.buffer}this.atFlag=true;const e=countSymbols(this.buffer);for(let a=0;aMath.pow(2,16)-1){this.parseError=true;return s}this.url.port=e===defaultPort(this.url.scheme)?null:e;this.buffer=""}if(this.stateOverride){return false}this.state="path start";--this.pointer}else{this.parseError=true;return s}return true};const n=new Set([47,92,63,35]);URLStateMachine.prototype["parse file"]=function parseFile(e){this.url.scheme="file";if(e===47||e===92){if(e===92){this.parseError=true}this.state="file slash"}else if(this.base!==null&&this.base.scheme==="file"){if(isNaN(e)){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===63){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else{if(this.input.length-this.pointer-1===0||!isWindowsDriveLetterCodePoints(e,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!n.has(this.input[this.pointer+2])){this.url.host=this.base.host;this.url.path=this.base.path.slice();shortenPath(this.url)}else{this.parseError=true}this.state="path";--this.pointer}}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file slash"]=function parseFileSlash(e){if(e===47||e===92){if(e===92){this.parseError=true}this.state="file host"}else{if(this.base!==null&&this.base.scheme==="file"){if(isNormalizedWindowsDriveLetterString(this.base.path[0])){this.url.path.push(this.base.path[0])}else{this.url.host=this.base.host}}this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file host"]=function parseFileHost(e,a){if(isNaN(e)||e===47||e===92||e===63||e===35){--this.pointer;if(!this.stateOverride&&isWindowsDriveLetterString(this.buffer)){this.parseError=true;this.state="path"}else if(this.buffer===""){this.url.host="";if(this.stateOverride){return false}this.state="path start"}else{let e=parseHost(this.buffer,isSpecial(this.url));if(e===s){return s}if(e==="localhost"){e=""}this.url.host=e;if(this.stateOverride){return false}this.buffer="";this.state="path start"}}else{this.buffer+=a}return true};URLStateMachine.prototype["parse path start"]=function parsePathStart(e){if(isSpecial(this.url)){if(e===92){this.parseError=true}this.state="path";if(e!==47&&e!==92){--this.pointer}}else if(!this.stateOverride&&e===63){this.url.query="";this.state="query"}else if(!this.stateOverride&&e===35){this.url.fragment="";this.state="fragment"}else if(e!==undefined){this.state="path";if(e!==47){--this.pointer}}return true};URLStateMachine.prototype["parse path"]=function parsePath(e){if(isNaN(e)||e===47||isSpecial(this.url)&&e===92||!this.stateOverride&&(e===63||e===35)){if(isSpecial(this.url)&&e===92){this.parseError=true}if(isDoubleDot(this.buffer)){shortenPath(this.url);if(e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}}else if(isSingleDot(this.buffer)&&e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}else if(!isSingleDot(this.buffer)){if(this.url.scheme==="file"&&this.url.path.length===0&&isWindowsDriveLetterString(this.buffer)){if(this.url.host!==""&&this.url.host!==null){this.parseError=true;this.url.host=""}this.buffer=this.buffer[0]+":"}this.url.path.push(this.buffer)}this.buffer="";if(this.url.scheme==="file"&&(e===undefined||e===63||e===35)){while(this.url.path.length>1&&this.url.path[0]===""){this.parseError=true;this.url.path.shift()}}if(e===63){this.url.query="";this.state="query"}if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=percentEncodeChar(e,isPathPercentEncode)}return true};URLStateMachine.prototype["parse cannot-be-a-base-URL path"]=function parseCannotBeABaseURLPath(e){if(e===63){this.url.query="";this.state="query"}else if(e===35){this.url.fragment="";this.state="fragment"}else{if(!isNaN(e)&&e!==37){this.parseError=true}if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}if(!isNaN(e)){this.url.path[0]=this.url.path[0]+percentEncodeChar(e,isC0ControlPercentEncode)}}return true};URLStateMachine.prototype["parse query"]=function parseQuery(e,a){if(isNaN(e)||!this.stateOverride&&e===35){if(!isSpecial(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss"){this.encodingOverride="utf-8"}const a=new Buffer(this.buffer);for(let e=0;e126||a[e]===34||a[e]===35||a[e]===60||a[e]===62){this.url.query+=percentEncode(a[e])}else{this.url.query+=String.fromCodePoint(a[e])}}this.buffer="";if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=a}return true};URLStateMachine.prototype["parse fragment"]=function parseFragment(e){if(isNaN(e)){}else if(e===0){this.parseError=true}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.url.fragment+=percentEncodeChar(e,isC0ControlPercentEncode)}return true};function serializeURL(e,a){let p=e.scheme+":";if(e.host!==null){p+="//";if(e.username!==""||e.password!==""){p+=e.username;if(e.password!==""){p+=":"+e.password}p+="@"}p+=serializeHost(e.host);if(e.port!==null){p+=":"+e.port}}else if(e.host===null&&e.scheme==="file"){p+="//"}if(e.cannotBeABaseURL){p+=e.path[0]}else{for(const a of e.path){p+="/"+a}}if(e.query!==null){p+="?"+e.query}if(!a&&e.fragment!==null){p+="#"+e.fragment}return p}function serializeOrigin(e){let a=e.scheme+"://";a+=serializeHost(e.host);if(e.port!==null){a+=":"+e.port}return a}e.exports.serializeURL=serializeURL;e.exports.serializeURLOrigin=function(a){switch(a.scheme){case"blob":try{return e.exports.serializeURLOrigin(e.exports.parseURL(a.path[0]))}catch(e){return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return serializeOrigin({scheme:a.scheme,host:a.host,port:a.port});case"file":return"file://";default:return"null"}};e.exports.basicURLParse=function(e,a){if(a===undefined){a={}}const p=new URLStateMachine(e,a.baseURL,a.encodingOverride,a.url,a.stateOverride);if(p.failure){return"failure"}return p.url};e.exports.setTheUsername=function(e,a){e.username="";const p=t.ucs2.decode(a);for(let a=0;a{"use strict";e.exports.mixin=function mixin(e,a){const p=Object.getOwnPropertyNames(a);for(let t=0;t{var t=p(5788);e.exports=t(once);e.exports.strict=t(onceStrict);once.proto=once((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return once(this)},configurable:true});Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return onceStrict(this)},configurable:true})}));function once(e){var f=function(){if(f.called)return f.value;f.called=true;return f.value=e.apply(this,arguments)};f.called=false;return f}function onceStrict(e){var f=function(){if(f.called)throw new Error(f.onceError);f.called=true;return f.value=e.apply(this,arguments)};var a=e.name||"Function wrapped with `once`";f.onceError=a+" shouldn't be called more than once";f.called=false;return f}},9761:(e,a,p)=>{"use strict";var t=p(4300);var d=t.Buffer;var r={};var s;for(s in t){if(!t.hasOwnProperty(s))continue;if(s==="SlowBuffer"||s==="Buffer")continue;r[s]=t[s]}var i=r.Buffer={};for(s in d){if(!d.hasOwnProperty(s))continue;if(s==="allocUnsafe"||s==="allocUnsafeSlow")continue;i[s]=d[s]}r.Buffer.prototype=d.prototype;if(!i.from||i.from===Uint8Array.from){i.from=function(e,a,p){if(typeof e==="number"){throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e)}if(e&&typeof e.length==="undefined"){throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}return d(e,a,p)}}if(!i.alloc){i.alloc=function(e,a,p){if(typeof e!=="number"){throw new TypeError('The "size" argument must be of type number. Received type '+typeof e)}if(e<0||e>=2*(1<<30)){throw new RangeError('The value "'+e+'" is invalid for option "size"')}var t=d(e);if(!a||a.length===0){t.fill(0)}else if(typeof p==="string"){t.fill(a,p)}else{t.fill(a)}return t}}if(!r.kStringMaxLength){try{r.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch(e){}}if(!r.constants){r.constants={MAX_LENGTH:r.kMaxLength};if(r.kStringMaxLength){r.constants.MAX_STRING_LENGTH=r.kStringMaxLength}}e.exports=r},391:(e,a,p)=>{e.exports=p(7832)},7832:(e,a,p)=>{"use strict";var t=p(1808);var d=p(4404);var r=p(3685);var s=p(5687);var i=p(2361);var o=p(9491);var n=p(3837);a.httpOverHttp=httpOverHttp;a.httpsOverHttp=httpsOverHttp;a.httpOverHttps=httpOverHttps;a.httpsOverHttps=httpsOverHttps;function httpOverHttp(e){var a=new TunnelingAgent(e);a.request=r.request;return a}function httpsOverHttp(e){var a=new TunnelingAgent(e);a.request=r.request;a.createSocket=createSecureSocket;a.defaultPort=443;return a}function httpOverHttps(e){var a=new TunnelingAgent(e);a.request=s.request;return a}function httpsOverHttps(e){var a=new TunnelingAgent(e);a.request=s.request;a.createSocket=createSecureSocket;a.defaultPort=443;return a}function TunnelingAgent(e){var a=this;a.options=e||{};a.proxyOptions=a.options.proxy||{};a.maxSockets=a.options.maxSockets||r.Agent.defaultMaxSockets;a.requests=[];a.sockets=[];a.on("free",(function onFree(e,p,t,d){var r=toOptions(p,t,d);for(var s=0,i=a.requests.length;s=this.maxSockets){d.requests.push(r);return}d.createSocket(r,(function(a){a.on("free",onFree);a.on("close",onCloseOrRemove);a.on("agentRemove",onCloseOrRemove);e.onSocket(a);function onFree(){d.emit("free",a,r)}function onCloseOrRemove(e){d.removeSocket(a);a.removeListener("free",onFree);a.removeListener("close",onCloseOrRemove);a.removeListener("agentRemove",onCloseOrRemove)}}))};TunnelingAgent.prototype.createSocket=function createSocket(e,a){var p=this;var t={};p.sockets.push(t);var d=mergeOptions({},p.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:false,headers:{host:e.host+":"+e.port}});if(e.localAddress){d.localAddress=e.localAddress}if(d.proxyAuth){d.headers=d.headers||{};d.headers["Proxy-Authorization"]="Basic "+new Buffer(d.proxyAuth).toString("base64")}l("making CONNECT request");var r=p.request(d);r.useChunkedEncodingByDefault=false;r.once("response",onResponse);r.once("upgrade",onUpgrade);r.once("connect",onConnect);r.once("error",onError);r.end();function onResponse(e){e.upgrade=true}function onUpgrade(e,a,p){process.nextTick((function(){onConnect(e,a,p)}))}function onConnect(d,s,i){r.removeAllListeners();s.removeAllListeners();if(d.statusCode!==200){l("tunneling socket could not be established, statusCode=%d",d.statusCode);s.destroy();var o=new Error("tunneling socket could not be established, "+"statusCode="+d.statusCode);o.code="ECONNRESET";e.request.emit("error",o);p.removeSocket(t);return}if(i.length>0){l("got illegal response body from proxy");s.destroy();var o=new Error("got illegal response body from proxy");o.code="ECONNRESET";e.request.emit("error",o);p.removeSocket(t);return}l("tunneling connection has established");p.sockets[p.sockets.indexOf(t)]=s;return a(s)}function onError(a){r.removeAllListeners();l("tunneling socket could not be established, cause=%s\n",a.message,a.stack);var d=new Error("tunneling socket could not be established, "+"cause="+a.message);d.code="ECONNRESET";e.request.emit("error",d);p.removeSocket(t)}};TunnelingAgent.prototype.removeSocket=function removeSocket(e){var a=this.sockets.indexOf(e);if(a===-1){return}this.sockets.splice(a,1);var p=this.requests.shift();if(p){this.createSocket(p,(function(e){p.request.onSocket(e)}))}};function createSecureSocket(e,a){var p=this;TunnelingAgent.prototype.createSocket.call(p,e,(function(t){var r=e.request.getHeader("host");var s=mergeOptions({},p.options,{socket:t,servername:r?r.replace(/:.*$/,""):e.host});var i=d.connect(0,s);p.sockets[p.sockets.indexOf(t)]=i;a(i)}))}function toOptions(e,a,p){if(typeof e==="string"){return{host:e,port:a,localAddress:p}}return e}function mergeOptions(e){for(var a=1,p=arguments.length;a{"use strict";Object.defineProperty(a,"__esModule",{value:true});function getUserAgent(){if(typeof navigator==="object"&&"userAgent"in navigator){return navigator.userAgent}if(typeof process==="object"&&"version"in process){return`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`}return""}a.getUserAgent=getUserAgent},757:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});Object.defineProperty(a,"v1",{enumerable:true,get:function(){return t.default}});Object.defineProperty(a,"v3",{enumerable:true,get:function(){return d.default}});Object.defineProperty(a,"v4",{enumerable:true,get:function(){return r.default}});Object.defineProperty(a,"v5",{enumerable:true,get:function(){return s.default}});Object.defineProperty(a,"NIL",{enumerable:true,get:function(){return i.default}});Object.defineProperty(a,"version",{enumerable:true,get:function(){return o.default}});Object.defineProperty(a,"validate",{enumerable:true,get:function(){return n.default}});Object.defineProperty(a,"stringify",{enumerable:true,get:function(){return l.default}});Object.defineProperty(a,"parse",{enumerable:true,get:function(){return m.default}});var t=_interopRequireDefault(p(6098));var d=_interopRequireDefault(p(1400));var r=_interopRequireDefault(p(5949));var s=_interopRequireDefault(p(135));var i=_interopRequireDefault(p(4953));var o=_interopRequireDefault(p(9449));var n=_interopRequireDefault(p(266));var l=_interopRequireDefault(p(8525));var m=_interopRequireDefault(p(2281));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},3855:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return t.default.createHash("md5").update(e).digest()}var d=md5;a["default"]=d},4953:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var p="00000000-0000-0000-0000-000000000000";a["default"]=p},2281:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,t.default)(e)){throw TypeError("Invalid UUID")}let a;const p=new Uint8Array(16);p[0]=(a=parseInt(e.slice(0,8),16))>>>24;p[1]=a>>>16&255;p[2]=a>>>8&255;p[3]=a&255;p[4]=(a=parseInt(e.slice(9,13),16))>>>8;p[5]=a&255;p[6]=(a=parseInt(e.slice(14,18),16))>>>8;p[7]=a&255;p[8]=(a=parseInt(e.slice(19,23),16))>>>8;p[9]=a&255;p[10]=(a=parseInt(e.slice(24,36),16))/1099511627776&255;p[11]=a/4294967296&255;p[12]=a>>>24&255;p[13]=a>>>16&255;p[14]=a>>>8&255;p[15]=a&255;return p}var d=parse;a["default"]=d},9741:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var p=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;a["default"]=p},9937:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=rng;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const d=new Uint8Array(256);let r=d.length;function rng(){if(r>d.length-16){t.default.randomFillSync(d);r=0}return d.slice(r,r+=16)}},197:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return t.default.createHash("sha1").update(e).digest()}var d=sha1;a["default"]=d},8525:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const d=[];for(let e=0;e<256;++e){d.push((e+256).toString(16).substr(1))}function stringify(e,a=0){const p=(d[e[a+0]]+d[e[a+1]]+d[e[a+2]]+d[e[a+3]]+"-"+d[e[a+4]]+d[e[a+5]]+"-"+d[e[a+6]]+d[e[a+7]]+"-"+d[e[a+8]]+d[e[a+9]]+"-"+d[e[a+10]]+d[e[a+11]]+d[e[a+12]]+d[e[a+13]]+d[e[a+14]]+d[e[a+15]]).toLowerCase();if(!(0,t.default)(p)){throw TypeError("Stringified UUID is invalid")}return p}var r=stringify;a["default"]=r},6098:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9937));var d=_interopRequireDefault(p(8525));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let r;let s;let i=0;let o=0;function v1(e,a,p){let n=a&&p||0;const l=a||new Array(16);e=e||{};let m=e.node||r;let c=e.clockseq!==undefined?e.clockseq:s;if(m==null||c==null){const a=e.random||(e.rng||t.default)();if(m==null){m=r=[a[0]|1,a[1],a[2],a[3],a[4],a[5]]}if(c==null){c=s=(a[6]<<8|a[7])&16383}}let u=e.msecs!==undefined?e.msecs:Date.now();let h=e.nsecs!==undefined?e.nsecs:o+1;const v=u-i+(h-o)/1e4;if(v<0&&e.clockseq===undefined){c=c+1&16383}if((v<0||u>i)&&e.nsecs===undefined){h=0}if(h>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}i=u;o=h;s=c;u+=122192928e5;const g=((u&268435455)*1e4+h)%4294967296;l[n++]=g>>>24&255;l[n++]=g>>>16&255;l[n++]=g>>>8&255;l[n++]=g&255;const w=u/4294967296*1e4&268435455;l[n++]=w>>>8&255;l[n++]=w&255;l[n++]=w>>>24&15|16;l[n++]=w>>>16&255;l[n++]=c>>>8|128;l[n++]=c&255;for(let e=0;e<6;++e){l[n+e]=m[e]}return a||(0,d.default)(l)}var n=v1;a["default"]=n},1400:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6230));var d=_interopRequireDefault(p(3855));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,t.default)("v3",48,d.default);var s=r;a["default"]=s},6230:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=_default;a.URL=a.DNS=void 0;var t=_interopRequireDefault(p(8525));var d=_interopRequireDefault(p(2281));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const a=[];for(let p=0;p{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9937));var d=_interopRequireDefault(p(8525));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,a,p){e=e||{};const r=e.random||(e.rng||t.default)();r[6]=r[6]&15|64;r[8]=r[8]&63|128;if(a){p=p||0;for(let e=0;e<16;++e){a[p+e]=r[e]}return a}return(0,d.default)(r)}var r=v4;a["default"]=r},135:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6230));var d=_interopRequireDefault(p(197));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,t.default)("v5",80,d.default);var s=r;a["default"]=s},266:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9741));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&t.default.test(e)}var d=validate;a["default"]=d},9449:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,t.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.substr(14,1),16)}var d=version;a["default"]=d},5788:e=>{e.exports=wrappy;function wrappy(e,a){if(e&&a)return wrappy(e)(a);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach((function(a){wrapper[a]=e[a]}));return wrapper;function wrapper(){var a=new Array(arguments.length);for(var p=0;p{"use strict";e.exports=require("assert")},4300:e=>{"use strict";e.exports=require("buffer")},6113:e=>{"use strict";e.exports=require("crypto")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},1808:e=>{"use strict";e.exports=require("net")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},5477:e=>{"use strict";e.exports=require("punycode")},2781:e=>{"use strict";e.exports=require("stream")},1576:e=>{"use strict";e.exports=require("string_decoder")},4404:e=>{"use strict";e.exports=require("tls")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},2375:e=>{"use strict";e.exports=JSON.parse('[["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],["88a1","ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],["8940","𪎩𡅅"],["8943","攊"],["8946","丽滝鵎釟"],["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],["89a1","琑糼緍楆竉刧"],["89ab","醌碸酞肼"],["89b0","贋胶𠧧"],["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],["89c1","溚舾甙"],["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],["8a40","𧶄唥"],["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],["8aac","䠋𠆩㿺塳𢶍"],["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],["8ac9","𪘁𠸉𢫏𢳉"],["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],["8ca1","𣏹椙橃𣱣泿"],["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],["8cc9","顨杫䉶圽"],["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],["8d40","𠮟"],["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],["9fae","酙隁酜"],["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],["9fc1","𤤙盖鮝个𠳔莾衂"],["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"],["9fe7","毺蠘罸"],["9feb","嘠𪙊蹷齓"],["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],["a055","𡠻𦸅"],["a058","詾𢔛"],["a05b","惽癧髗鵄鍮鮏蟵"],["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],["a0a1","嵗𨯂迚𨸹"],["a0a6","僙𡵆礆匲阸𠼻䁥"],["a0ae","矾"],["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],["a3c0","␀",31,"␡"],["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23],["c740","す",58,"ァアィイ"],["c7a1","ゥ",81,"А",5,"ЁЖ",4],["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"],["c8a1","龰冈龱𧘇"],["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],["c8f5","ʃɐɛɔɵœøŋʊɪ"],["f9fe","■"],["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]]')},1893:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127,"€"],["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"],["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],["8240","侤侫侭侰",4,"侶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"],["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"],["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5],["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"],["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"],["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"],["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"],["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4],["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6],["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"堫",4,"報堲堳場堶",7],["8940","堾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"塭",16,"塿墂墄墆墇墈墊墋墌"],["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"],["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6],["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"屰屲",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"峼",4],["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"崵",7,"崿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"],["8e40","嶡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"],["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6],["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"],["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"],["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"],["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"],["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"],["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8],["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"],["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"],["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"],["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"],["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"栫",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5],["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"],["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"],["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5],["9980","檧檨檪檭",114,"欥欦欨",6],["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"],["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"],["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"],["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"],["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"],["9e40","濦",7,"濰",32,"瀒",7,"瀜",6,"瀤",6],["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"],["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"],["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4],["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19],["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],["a2a1","ⅰ",9],["a2b1","⒈",19,"⑴",19,"①",9],["a2e5","㈠",9],["a2f1","Ⅰ",11],["a3a1","!"#¥%",88," ̄"],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6],["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],["a8bd","ńň"],["a8c0","ɡ"],["a8c5","ㄅ",36],["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"],["a959","℡㈱"],["a95c","‐"],["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8],["a980","﹢",4,"﹨﹩﹪﹫"],["a996","〇"],["a9a4","─",75],["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8],["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"],["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4],["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4],["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11],["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"],["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12],["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"],["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],["ae80","畝",7,"畧畨畩畫",6,"畳畵當畷畺",4,"疀疁疂疄疅疇"],["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"],["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4],["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9],["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"],["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16],["b780","穩",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"],["b880","竴",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"],["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"],["ba80","簚",4,"簠",5,"簨簩簫",12,"簹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],["bb40","籃",9,"籎",36,"籵",5,"籾",9],["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"糰",7,"糹糺糼",13,"紋",5],["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],["bd40","紷",54,"絯",7],["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],["be40","継",12,"綧",6,"綯",42],["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],["bf40","緻",62],["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],["c040","繞",35,"纃",23,"纜纝纞"],["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"羱"],["c180","羳",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"],["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"],["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"],["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"],["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10],["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"],["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"],["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"],["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9],["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],["d040","蠤",13,"蠳",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"],["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5],["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"],["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6],["d380","觻",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],["d440","訞",31,"訿",8,"詉",21],["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],["d540","誁",7,"誋",7,"誔",46],["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],["d640","諤",34,"謈",27],["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],["d740","譆",31,"譧",4,"譭",25],["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],["d840","谸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"豣",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"],["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],["d940","貮",62],["d980","賭",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"],["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"],["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7],["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],["dd40","軥",62],["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"],["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"],["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"],["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],["e240","釦",62],["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],["e340","鉆",45,"鉵",16],["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],["e440","銨",5,"銯",24,"鋉",31],["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],["e540","錊",51,"錿",10],["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],["e640","鍬",34,"鎐",27],["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],["e740","鏎",7,"鏗",54],["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"],["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42],["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"],["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7],["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46],["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],["ee40","頏",62],["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4],["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],["f040","餈",4,"餎餏餑",28,"餯",26],["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],["f140","馌馎馚",10,"馦馧馩",47],["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],["f240","駺",62],["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"],["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5],["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],["f540","魼",62],["f580","鮻",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],["f640","鯜",62],["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"鲥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],["f740","鰼",62],["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],["f840","鳣",62],["f880","鴢",32],["f940","鵃",62],["f980","鶂",32],["fa40","鶣",62],["fa80","鷢",32],["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"],["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6],["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"],["fd40","鼲",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38],["fd80","齹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"],["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]]')},2882:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"],["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"],["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"],["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18],["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7],["8361","긝",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"],["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4],["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"],["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"],["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"],["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10],["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"],["8741","놞",9,"놩",15],["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"],["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4],["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4],["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"],["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"],["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"],["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15],["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"],["8a61","둧",4,"둭",18,"뒁뒂"],["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"],["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"],["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8],["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18],["8c41","똀",15,"똒똓똕똖똗똙",4],["8c61","똞",6,"똦",5,"똭",6,"똵",5],["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16],["8d41","뛃",16,"뛕",8],["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"],["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"],["8e41","랟랡",6,"랪랮",5,"랶랷랹",8],["8e61","럂",4,"럈럊",19],["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","뢅",7,"뢎",17],["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5],["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"릆릈릋릌릏",15],["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"],["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5],["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"],["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4],["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"],["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8],["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"],["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8],["9461","봞",5,"봥",6,"봭",12],["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24],["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"],["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"],["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14],["9641","뺸",23,"뻒뻓"],["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8],["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44],["9741","뾃",16,"뾕",8],["9761","뾞",17,"뾱",7],["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"],["9841","쁀",16,"쁒",5,"쁙쁚쁛"],["9861","쁝쁞쁟쁡",6,"쁪",15],["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"],["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"],["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"],["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"],["9a41","숤숥숦숧숪숬숮숰숳숵",16],["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"],["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"],["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8],["9b61","쌳",17,"썆",7],["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"],["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5],["9c61","쏿",8,"쐉",6,"쐑",9],["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12],["9d41","쒪",13,"쒹쒺쒻쒽",8],["9d61","쓆",25],["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"],["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"],["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"],["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"],["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"],["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"],["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"],["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13],["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"],["a141","좥좦좧좩",18,"좾좿죀죁"],["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"],["a241","줐줒",5,"줙",18],["a261","줭",6,"줵",18],["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"],["a361","즑",6,"즚즜즞",16],["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"],["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"],["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12],["a481","쨦쨧쨨쨪",28,"ㄱ",93],["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"],["a561","쩫",17,"쩾",5,"쪅쪆"],["a581","쪇",16,"쪙",14,"ⅰ",9],["a5b0","Ⅰ",9],["a5c1","Α",16,"Σ",6],["a5e1","α",16,"σ",6],["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"],["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6],["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7],["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7],["a761","쬪",22,"쭂쭃쭄"],["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],["a841","쭭",10,"쭺",14],["a861","쮉",18,"쮝",6],["a881","쮤",19,"쮹",11,"ÆÐªĦ"],["a8a6","IJ"],["a8a8","ĿŁØŒºÞŦŊ"],["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"],["a941","쯅",14,"쯕",10],["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18],["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"],["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"],["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ぁ",82],["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"],["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5],["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85],["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"],["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4],["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25],["acd1","а",5,"ёж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7],["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"],["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"],["ae41","췆",5,"췍췎췏췑",16],["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4],["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"],["af41","츬츭츮츯츲츴츶",19],["af61","칊",13,"칚칛칝칞칢",5,"칪칬"],["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"],["b041","캚",5,"캢캦",5,"캮",12],["b061","캻",5,"컂",19],["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"],["b161","켥",6,"켮켲",5,"켹",11],["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"],["b261","쾎",18,"쾢",5,"쾩"],["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5],["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5],["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"],["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],["b541","킕",14,"킦킧킩킪킫킭",5],["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4],["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],["b641","턅",7,"턎",17],["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"],["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],["b741","텮",13,"텽",6,"톅톆톇톉톊"],["b761","톋",20,"톢톣톥톦톧"],["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],["b841","퇐",7,"퇙",17],["b861","퇫",8,"퇵퇶퇷퇹",13],["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"],["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"],["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"],["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5],["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"],["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"],["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"],["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"],["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"],["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13],["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],["be41","퐸",7,"푁푂푃푅",14],["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"],["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"],["bf41","풞",10,"풪",14],["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"],["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5],["c061","픞",25],["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"],["c161","햌햍햎햏햑",19,"햦햧"],["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"],["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"],["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4],["c361","홢",4,"홨홪",5,"홲홳홵",11],["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"],["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4],["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"],["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4],["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],["c641","힍힎힏힑",6,"힚힜힞",5],["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"],["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]]')},1987:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"],["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21],["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10],["a3a1","ㄐ",25,"˙ˉˊˇˋ"],["a3e1","€"],["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]]')},4983:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["8ea1","。",62],["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"],["a2a1","◆□■△▲▽▼※〒→←↑↓〓"],["a2ba","∈∋⊆⊇⊂⊃∪∩"],["a2ca","∧∨¬⇒⇔∀∃"],["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["a2f2","ʼn♯♭♪†‡¶"],["a2fe","◯"],["a3b0","0",9],["a3c1","A",25],["a3e1","a",25],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["ada1","①",19,"Ⅰ",9],["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],["f4a1","堯槇遙瑤凜熙"],["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["fcf1","ⅰ",9,"¬¦'""],["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®™¤№"],["8fa6e1","ΆΈΉΊΪ"],["8fa6e7","Ό"],["8fa6e9","ΎΫ"],["8fa6ec","Ώ"],["8fa6f1","άέήίϊΐόςύϋΰώ"],["8fa7c2","Ђ",10,"ЎЏ"],["8fa7f2","ђ",10,"ўџ"],["8fa9a1","ÆĐ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ŁĿ"],["8fa9ab","ŊØŒ"],["8fa9af","ŦÞ"],["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"],["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],["8fabbd","ġĥíìïîǐ"],["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"],["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5],["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"],["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]]')},3982:e=>{"use strict";e.exports=JSON.parse('{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}')},233:e=>{"use strict";e.exports=JSON.parse('[["a140","",62],["a180","",32],["a240","",62],["a280","",32],["a2ab","",5],["a2e3","€"],["a2ef",""],["a2fd",""],["a340","",62],["a380","",31," "],["a440","",62],["a480","",32],["a4f4","",10],["a540","",62],["a580","",32],["a5f7","",7],["a640","",62],["a680","",32],["a6b9","",7],["a6d9","",6],["a6ec",""],["a6f3",""],["a6f6","",8],["a740","",62],["a780","",32],["a7c2","",14],["a7f2","",12],["a896","",10],["a8bc","ḿ"],["a8bf","ǹ"],["a8c1",""],["a8ea","",20],["a958",""],["a95b",""],["a95d",""],["a989","〾⿰",11],["a997","",12],["a9f0","",14],["aaa1","",93],["aba1","",93],["aca1","",93],["ada1","",93],["aea1","",93],["afa1","",93],["d7fa","",4],["f8a1","",93],["f9a1","",93],["faa1","",93],["fba1","",93],["fca1","",93],["fda1","",93],["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93],["8135f437",""]]')},7109:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",128],["a1","。",62],["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"],["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],["81b8","∈∋⊆⊇⊂⊃∪∩"],["81c8","∧∨¬⇒⇔∀∃"],["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["81f0","ʼn♯♭♪†‡¶"],["81fc","◯"],["824f","0",9],["8260","A",25],["8281","a",25],["829f","ぁ",82],["8340","ァ",62],["8380","ム",22],["839f","Α",16,"Σ",6],["83bf","α",16,"σ",6],["8440","А",5,"ЁЖ",25],["8470","а",5,"ёж",7],["8480","о",17],["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["8740","①",19,"Ⅰ",9],["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["877e","㍻"],["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["eeef","ⅰ",9,"¬¦'""],["f040","",62],["f080","",124],["f140","",62],["f180","",124],["f240","",62],["f280","",124],["f340","",62],["f380","",124],["f440","",62],["f480","",124],["f540","",62],["f580","",124],["f640","",62],["f680","",124],["f740","",62],["f780","",124],["f840","",62],["f880","",124],["f940",""],["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]]')},2813:e=>{"use strict";e.exports=JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var a=__webpack_module_cache__[e];if(a!==undefined){return a.exports}var p=__webpack_module_cache__[e]={exports:{}};var t=true;try{__webpack_modules__[e].call(p.exports,p,p.exports,__nccwpck_require__);t=false}finally{if(t)delete __webpack_module_cache__[e]}return p.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(2079);module.exports=__webpack_exports__})(); \ No newline at end of file + */function isObject(e){return Object.prototype.toString.call(e)==="[object Object]"}function isPlainObject(e){var a,p;if(isObject(e)===false)return false;a=e.constructor;if(a===undefined)return true;p=a.prototype;if(isObject(p)===false)return false;if(p.hasOwnProperty("isPrototypeOf")===false){return false}return true}a.isPlainObject=isPlainObject},8885:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var t=_interopDefault(p(2781));var d=_interopDefault(p(3685));var r=_interopDefault(p(7310));var s=_interopDefault(p(9207));var i=_interopDefault(p(5687));var o=_interopDefault(p(9796));const n=t.Readable;const l=Symbol("buffer");const m=Symbol("type");class Blob{constructor(){this[m]="";const e=arguments[0];const a=arguments[1];const p=[];let t=0;if(e){const a=e;const d=Number(a.length);for(let e=0;e1&&arguments[1]!==undefined?arguments[1]:{},d=p.size;let r=d===undefined?0:d;var s=p.timeout;let i=s===undefined?0:s;if(e==null){e=null}else if(isURLSearchParams(e)){e=Buffer.from(e.toString())}else if(isBlob(e));else if(Buffer.isBuffer(e));else if(Object.prototype.toString.call(e)==="[object ArrayBuffer]"){e=Buffer.from(e)}else if(ArrayBuffer.isView(e)){e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)}else if(e instanceof t);else{e=Buffer.from(String(e))}this[u]={body:e,disturbed:false,error:null};this.size=r;this.timeout=i;if(e instanceof t){e.on("error",(function(e){const p=e.name==="AbortError"?e:new FetchError(`Invalid response body while trying to fetch ${a.url}: ${e.message}`,"system",e);a[u].error=p}))}}Body.prototype={get body(){return this[u].body},get bodyUsed(){return this[u].disturbed},arrayBuffer(){return consumeBody.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return consumeBody.call(this).then((function(a){return Object.assign(new Blob([],{type:e.toLowerCase()}),{[l]:a})}))},json(){var e=this;return consumeBody.call(this).then((function(a){try{return JSON.parse(a.toString())}catch(a){return Body.Promise.reject(new FetchError(`invalid json response body at ${e.url} reason: ${a.message}`,"invalid-json"))}}))},text(){return consumeBody.call(this).then((function(e){return e.toString()}))},buffer(){return consumeBody.call(this)},textConverted(){var e=this;return consumeBody.call(this).then((function(a){return convertBody(a,e.headers)}))}};Object.defineProperties(Body.prototype,{body:{enumerable:true},bodyUsed:{enumerable:true},arrayBuffer:{enumerable:true},blob:{enumerable:true},json:{enumerable:true},text:{enumerable:true}});Body.mixIn=function(e){for(const a of Object.getOwnPropertyNames(Body.prototype)){if(!(a in e)){const p=Object.getOwnPropertyDescriptor(Body.prototype,a);Object.defineProperty(e,a,p)}}};function consumeBody(){var e=this;if(this[u].disturbed){return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`))}this[u].disturbed=true;if(this[u].error){return Body.Promise.reject(this[u].error)}let a=this.body;if(a===null){return Body.Promise.resolve(Buffer.alloc(0))}if(isBlob(a)){a=a.stream()}if(Buffer.isBuffer(a)){return Body.Promise.resolve(a)}if(!(a instanceof t)){return Body.Promise.resolve(Buffer.alloc(0))}let p=[];let d=0;let r=false;return new Body.Promise((function(t,s){let i;if(e.timeout){i=setTimeout((function(){r=true;s(new FetchError(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)}a.on("error",(function(a){if(a.name==="AbortError"){r=true;s(a)}else{s(new FetchError(`Invalid response body while trying to fetch ${e.url}: ${a.message}`,"system",a))}}));a.on("data",(function(a){if(r||a===null){return}if(e.size&&d+a.length>e.size){r=true;s(new FetchError(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}d+=a.length;p.push(a)}));a.on("end",(function(){if(r){return}clearTimeout(i);try{t(Buffer.concat(p,d))}catch(a){s(new FetchError(`Could not create Buffer from response body for ${e.url}: ${a.message}`,"system",a))}}))}))}function convertBody(e,a){if(typeof c!=="function"){throw new Error("The package `encoding` must be installed to use the textConverted() function")}const p=a.get("content-type");let t="utf-8";let d,r;if(p){d=/charset=([^;]*)/i.exec(p)}r=e.slice(0,1024).toString();if(!d&&r){d=/0&&arguments[0]!==undefined?arguments[0]:undefined;this[w]=Object.create(null);if(e instanceof Headers){const a=e.raw();const p=Object.keys(a);for(const e of p){for(const p of a[e]){this.append(e,p)}}return}if(e==null);else if(typeof e==="object"){const a=e[Symbol.iterator];if(a!=null){if(typeof a!=="function"){throw new TypeError("Header pairs must be iterable")}const p=[];for(const a of e){if(typeof a!=="object"||typeof a[Symbol.iterator]!=="function"){throw new TypeError("Each header pair must be iterable")}p.push(Array.from(a))}for(const e of p){if(e.length!==2){throw new TypeError("Each header pair must be a name/value tuple")}this.append(e[0],e[1])}}else{for(const a of Object.keys(e)){const p=e[a];this.append(a,p)}}}else{throw new TypeError("Provided initializer must be an object")}}get(e){e=`${e}`;validateName(e);const a=find(this[w],e);if(a===undefined){return null}return this[w][a].join(", ")}forEach(e){let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;let p=getHeaders(this);let t=0;while(t1&&arguments[1]!==undefined?arguments[1]:"key+value";const p=Object.keys(e[w]).sort();return p.map(a==="key"?function(e){return e.toLowerCase()}:a==="value"?function(a){return e[w][a].join(", ")}:function(a){return[a.toLowerCase(),e[w][a].join(", ")]})}const b=Symbol("internal");function createHeadersIterator(e,a){const p=Object.create(_);p[b]={target:e,kind:a,index:0};return p}const _=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==_){throw new TypeError("Value of `this` is not a HeadersIterator")}var e=this[b];const a=e.target,p=e.kind,t=e.index;const d=getHeaders(a,p);const r=d.length;if(t>=r){return{value:undefined,done:true}}this[b].index=t+1;return{value:d[t],done:false}}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(_,Symbol.toStringTag,{value:"HeadersIterator",writable:false,enumerable:false,configurable:true});function exportNodeCompatibleHeaders(e){const a=Object.assign({__proto__:null},e[w]);const p=find(e[w],"Host");if(p!==undefined){a[p]=a[p][0]}return a}function createHeadersLenient(e){const a=new Headers;for(const p of Object.keys(e)){if(v.test(p)){continue}if(Array.isArray(e[p])){for(const t of e[p]){if(g.test(t)){continue}if(a[w][p]===undefined){a[w][p]=[t]}else{a[w][p].push(t)}}}else if(!g.test(e[p])){a[w][p]=[e[p]]}}return a}const T=Symbol("Response internals");const E=d.STATUS_CODES;class Response{constructor(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};Body.call(this,e,a);const p=a.status||200;const t=new Headers(a.headers);if(e!=null&&!t.has("Content-Type")){const a=extractContentType(e);if(a){t.append("Content-Type",a)}}this[T]={url:a.url,status:p,statusText:a.statusText||E[p],headers:t,counter:a.counter}}get url(){return this[T].url||""}get status(){return this[T].status}get ok(){return this[T].status>=200&&this[T].status<300}get redirected(){return this[T].counter>0}get statusText(){return this[T].statusText}get headers(){return this[T].headers}clone(){return new Response(clone(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}Body.mixIn(Response.prototype);Object.defineProperties(Response.prototype,{url:{enumerable:true},status:{enumerable:true},ok:{enumerable:true},redirected:{enumerable:true},statusText:{enumerable:true},headers:{enumerable:true},clone:{enumerable:true}});Object.defineProperty(Response.prototype,Symbol.toStringTag,{value:"Response",writable:false,enumerable:false,configurable:true});const y=Symbol("Request internals");const S=r.URL||s.URL;const D=r.parse;const A=r.format;function parseURL(e){if(/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(e)){e=new S(e).toString()}return D(e)}const P="destroy"in t.Readable.prototype;function isRequest(e){return typeof e==="object"&&typeof e[y]==="object"}function isAbortSignal(e){const a=e&&typeof e==="object"&&Object.getPrototypeOf(e);return!!(a&&a.constructor.name==="AbortSignal")}class Request{constructor(e){let a=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let p;if(!isRequest(e)){if(e&&e.href){p=parseURL(e.href)}else{p=parseURL(`${e}`)}e={}}else{p=parseURL(e.url)}let t=a.method||e.method||"GET";t=t.toUpperCase();if((a.body!=null||isRequest(e)&&e.body!==null)&&(t==="GET"||t==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body")}let d=a.body!=null?a.body:isRequest(e)&&e.body!==null?clone(e):null;Body.call(this,d,{timeout:a.timeout||e.timeout||0,size:a.size||e.size||0});const r=new Headers(a.headers||e.headers||{});if(d!=null&&!r.has("Content-Type")){const e=extractContentType(d);if(e){r.append("Content-Type",e)}}let s=isRequest(e)?e.signal:null;if("signal"in a)s=a.signal;if(s!=null&&!isAbortSignal(s)){throw new TypeError("Expected signal to be an instanceof AbortSignal")}this[y]={method:t,redirect:a.redirect||e.redirect||"follow",headers:r,parsedURL:p,signal:s};this.follow=a.follow!==undefined?a.follow:e.follow!==undefined?e.follow:20;this.compress=a.compress!==undefined?a.compress:e.compress!==undefined?e.compress:true;this.counter=a.counter||e.counter||0;this.agent=a.agent||e.agent}get method(){return this[y].method}get url(){return A(this[y].parsedURL)}get headers(){return this[y].headers}get redirect(){return this[y].redirect}get signal(){return this[y].signal}clone(){return new Request(this)}}Body.mixIn(Request.prototype);Object.defineProperty(Request.prototype,Symbol.toStringTag,{value:"Request",writable:false,enumerable:false,configurable:true});Object.defineProperties(Request.prototype,{method:{enumerable:true},url:{enumerable:true},headers:{enumerable:true},redirect:{enumerable:true},clone:{enumerable:true},signal:{enumerable:true}});function getNodeRequestOptions(e){const a=e[y].parsedURL;const p=new Headers(e[y].headers);if(!p.has("Accept")){p.set("Accept","*/*")}if(!a.protocol||!a.hostname){throw new TypeError("Only absolute URLs are supported")}if(!/^https?:$/.test(a.protocol)){throw new TypeError("Only HTTP(S) protocols are supported")}if(e.signal&&e.body instanceof t.Readable&&!P){throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8")}let d=null;if(e.body==null&&/^(POST|PUT)$/i.test(e.method)){d="0"}if(e.body!=null){const a=getTotalBytes(e);if(typeof a==="number"){d=String(a)}}if(d){p.set("Content-Length",d)}if(!p.has("User-Agent")){p.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)")}if(e.compress&&!p.has("Accept-Encoding")){p.set("Accept-Encoding","gzip,deflate")}let r=e.agent;if(typeof r==="function"){r=r(a)}if(!p.has("Connection")&&!r){p.set("Connection","close")}return Object.assign({},a,{method:e.method,headers:exportNodeCompatibleHeaders(p),agent:r})}function AbortError(e){Error.call(this,e);this.type="aborted";this.message=e;Error.captureStackTrace(this,this.constructor)}AbortError.prototype=Object.create(Error.prototype);AbortError.prototype.constructor=AbortError;AbortError.prototype.name="AbortError";const O=r.URL||s.URL;const k=t.PassThrough;const C=function isDomainOrSubdomain(e,a){const p=new O(a).hostname;const t=new O(e).hostname;return p===t||p[p.length-t.length-1]==="."&&p.endsWith(t)};const N=function isSameProtocol(e,a){const p=new O(a).protocol;const t=new O(e).protocol;return p===t};function fetch(e,a){if(!fetch.Promise){throw new Error("native promise missing, set fetch.Promise to your favorite alternative")}Body.Promise=fetch.Promise;return new fetch.Promise((function(p,r){const s=new Request(e,a);const n=getNodeRequestOptions(s);const l=(n.protocol==="https:"?i:d).request;const m=s.signal;let c=null;const u=function abort(){let e=new AbortError("The user aborted a request.");r(e);if(s.body&&s.body instanceof t.Readable){destroyStream(s.body,e)}if(!c||!c.body)return;c.body.emit("error",e)};if(m&&m.aborted){u();return}const h=function abortAndFinalize(){u();finalize()};const v=l(n);let g;if(m){m.addEventListener("abort",h)}function finalize(){v.abort();if(m)m.removeEventListener("abort",h);clearTimeout(g)}if(s.timeout){v.once("socket",(function(e){g=setTimeout((function(){r(new FetchError(`network timeout at: ${s.url}`,"request-timeout"));finalize()}),s.timeout)}))}v.on("error",(function(e){r(new FetchError(`request to ${s.url} failed, reason: ${e.message}`,"system",e));if(c&&c.body){destroyStream(c.body,e)}finalize()}));fixResponseChunkedTransferBadEnding(v,(function(e){if(m&&m.aborted){return}if(c&&c.body){destroyStream(c.body,e)}}));if(parseInt(process.version.substring(1))<14){v.on("socket",(function(e){e.addListener("close",(function(a){const p=e.listenerCount("data")>0;if(c&&p&&!a&&!(m&&m.aborted)){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";c.body.emit("error",e)}}))}))}v.on("response",(function(e){clearTimeout(g);const a=createHeadersLenient(e.headers);if(fetch.isRedirect(e.statusCode)){const t=a.get("Location");let d=null;try{d=t===null?null:new O(t,s.url).toString()}catch(e){if(s.redirect!=="manual"){r(new FetchError(`uri requested responds with an invalid redirect URL: ${t}`,"invalid-redirect"));finalize();return}}switch(s.redirect){case"error":r(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${s.url}`,"no-redirect"));finalize();return;case"manual":if(d!==null){try{a.set("Location",d)}catch(e){r(e)}}break;case"follow":if(d===null){break}if(s.counter>=s.follow){r(new FetchError(`maximum redirect reached at: ${s.url}`,"max-redirect"));finalize();return}const t={headers:new Headers(s.headers),follow:s.follow,counter:s.counter+1,agent:s.agent,compress:s.compress,method:s.method,body:s.body,signal:s.signal,timeout:s.timeout,size:s.size};if(!C(s.url,d)||!N(s.url,d)){for(const e of["authorization","www-authenticate","cookie","cookie2"]){t.headers.delete(e)}}if(e.statusCode!==303&&s.body&&getTotalBytes(s)===null){r(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect"));finalize();return}if(e.statusCode===303||(e.statusCode===301||e.statusCode===302)&&s.method==="POST"){t.method="GET";t.body=undefined;t.headers.delete("content-length")}p(fetch(new Request(d,t)));finalize();return}}e.once("end",(function(){if(m)m.removeEventListener("abort",h)}));let t=e.pipe(new k);const d={url:s.url,status:e.statusCode,statusText:e.statusMessage,headers:a,size:s.size,timeout:s.timeout,counter:s.counter};const i=a.get("Content-Encoding");if(!s.compress||s.method==="HEAD"||i===null||e.statusCode===204||e.statusCode===304){c=new Response(t,d);p(c);return}const n={flush:o.Z_SYNC_FLUSH,finishFlush:o.Z_SYNC_FLUSH};if(i=="gzip"||i=="x-gzip"){t=t.pipe(o.createGunzip(n));c=new Response(t,d);p(c);return}if(i=="deflate"||i=="x-deflate"){const a=e.pipe(new k);a.once("data",(function(e){if((e[0]&15)===8){t=t.pipe(o.createInflate())}else{t=t.pipe(o.createInflateRaw())}c=new Response(t,d);p(c)}));a.on("end",(function(){if(!c){c=new Response(t,d);p(c)}}));return}if(i=="br"&&typeof o.createBrotliDecompress==="function"){t=t.pipe(o.createBrotliDecompress());c=new Response(t,d);p(c);return}c=new Response(t,d);p(c)}));writeToStream(v,s)}))}function fixResponseChunkedTransferBadEnding(e,a){let p;e.on("socket",(function(e){p=e}));e.on("response",(function(e){const t=e.headers;if(t["transfer-encoding"]==="chunked"&&!t["content-length"]){e.once("close",(function(e){const t=p.listenerCount("data")>0;if(t&&!e){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";a(e)}}))}}))}function destroyStream(e,a){if(e.destroy){e.destroy(a)}else{e.emit("error",a);e.end()}}fetch.isRedirect=function(e){return e===301||e===302||e===303||e===307||e===308};fetch.Promise=global.Promise;e.exports=a=fetch;Object.defineProperty(a,"__esModule",{value:true});a["default"]=a;a.Headers=Headers;a.Request=Request;a.Response=Response;a.FetchError=FetchError},180:(e,a,p)=>{"use strict";var t=p(5477);var d=p(2813);var r={TRANSITIONAL:0,NONTRANSITIONAL:1};function normalize(e){return e.split("\0").map((function(e){return e.normalize("NFC")})).join("\0")}function findStatus(e){var a=0;var p=d.length-1;while(a<=p){var t=Math.floor((a+p)/2);var r=d[t];if(r[0][0]<=e&&r[0][1]>=e){return r}else if(r[0][0]>e){p=t-1}else{a=t+1}}return null}var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function countSymbols(e){return e.replace(s,"_").length}function mapChars(e,a,p){var t=false;var d="";var s=countSymbols(e);for(var i=0;i253||i.length===0){r.error=true}for(var o=0;o63||s.length===0){r.error=true;break}}}if(r.error)return null;return s.join(".")};e.exports.toUnicode=function(e,a){var p=processing(e,a,r.NONTRANSITIONAL);return{domain:p.string,error:p.error}};e.exports.PROCESSING_OPTIONS=r},2358:e=>{"use strict";var a={};e.exports=a;function sign(e){return e<0?-1:1}function evenRound(e){if(e%1===.5&&(e&1)===0){return Math.floor(e)}else{return Math.round(e)}}function createNumberConversion(e,a){if(!a.unsigned){--e}const p=a.unsigned?0:-Math.pow(2,e);const t=Math.pow(2,e)-1;const d=a.moduloBitLength?Math.pow(2,a.moduloBitLength):Math.pow(2,e);const r=a.moduloBitLength?Math.pow(2,a.moduloBitLength-1):Math.pow(2,e-1);return function(e,s){if(!s)s={};let i=+e;if(s.enforceRange){if(!Number.isFinite(i)){throw new TypeError("Argument is not a finite number")}i=sign(i)*Math.floor(Math.abs(i));if(it){throw new TypeError("Argument is not in byte range")}return i}if(!isNaN(i)&&s.clamp){i=evenRound(i);if(it)i=t;return i}if(!Number.isFinite(i)||i===0){return 0}i=sign(i)*Math.floor(Math.abs(i));i=i%d;if(!a.unsigned&&i>=r){return i-d}else if(a.unsigned){if(i<0){i+=d}else if(i===-0){return 0}}return i}}a["void"]=function(){return undefined};a["boolean"]=function(e){return!!e};a["byte"]=createNumberConversion(8,{unsigned:false});a["octet"]=createNumberConversion(8,{unsigned:true});a["short"]=createNumberConversion(16,{unsigned:false});a["unsigned short"]=createNumberConversion(16,{unsigned:true});a["long"]=createNumberConversion(32,{unsigned:false});a["unsigned long"]=createNumberConversion(32,{unsigned:true});a["long long"]=createNumberConversion(32,{unsigned:false,moduloBitLength:64});a["unsigned long long"]=createNumberConversion(32,{unsigned:true,moduloBitLength:64});a["double"]=function(e){const a=+e;if(!Number.isFinite(a)){throw new TypeError("Argument is not a finite floating-point value")}return a};a["unrestricted double"]=function(e){const a=+e;if(isNaN(a)){throw new TypeError("Argument is NaN")}return a};a["float"]=a["double"];a["unrestricted float"]=a["unrestricted double"];a["DOMString"]=function(e,a){if(!a)a={};if(a.treatNullAsEmptyString&&e===null){return""}return String(e)};a["ByteString"]=function(e,a){const p=String(e);let t=undefined;for(let e=0;(t=p.codePointAt(e))!==undefined;++e){if(t>255){throw new TypeError("Argument is not a valid bytestring")}}return p};a["USVString"]=function(e){const a=String(e);const p=a.length;const t=[];for(let e=0;e57343){t.push(String.fromCodePoint(d))}else if(56320<=d&&d<=57343){t.push(String.fromCodePoint(65533))}else{if(e===p-1){t.push(String.fromCodePoint(65533))}else{const p=a.charCodeAt(e+1);if(56320<=p&&p<=57343){const a=d&1023;const r=p&1023;t.push(String.fromCodePoint((2<<15)+(2<<9)*a+r));++e}else{t.push(String.fromCodePoint(65533))}}}}return t.join("")};a["Date"]=function(e,a){if(!(e instanceof Date)){throw new TypeError("Argument is not a Date object")}if(isNaN(e)){return undefined}return e};a["RegExp"]=function(e,a){if(!(e instanceof RegExp)){e=new RegExp(e)}return e}},5059:(e,a,p)=>{"use strict";const t=p(3713);a.implementation=class URLImpl{constructor(e){const a=e[0];const p=e[1];let d=null;if(p!==undefined){d=t.basicURLParse(p);if(d==="failure"){throw new TypeError("Invalid base URL")}}const r=t.basicURLParse(a,{baseURL:d});if(r==="failure"){throw new TypeError("Invalid URL")}this._url=r}get href(){return t.serializeURL(this._url)}set href(e){const a=t.basicURLParse(e);if(a==="failure"){throw new TypeError("Invalid URL")}this._url=a}get origin(){return t.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(e){t.basicURLParse(e+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}t.setTheUsername(this._url,e)}get password(){return this._url.password}set password(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}t.setThePassword(this._url,e)}get host(){const e=this._url;if(e.host===null){return""}if(e.port===null){return t.serializeHost(e.host)}return t.serializeHost(e.host)+":"+t.serializeInteger(e.port)}set host(e){if(this._url.cannotBeABaseURL){return}t.basicURLParse(e,{url:this._url,stateOverride:"host"})}get hostname(){if(this._url.host===null){return""}return t.serializeHost(this._url.host)}set hostname(e){if(this._url.cannotBeABaseURL){return}t.basicURLParse(e,{url:this._url,stateOverride:"hostname"})}get port(){if(this._url.port===null){return""}return t.serializeInteger(this._url.port)}set port(e){if(t.cannotHaveAUsernamePasswordPort(this._url)){return}if(e===""){this._url.port=null}else{t.basicURLParse(e,{url:this._url,stateOverride:"port"})}}get pathname(){if(this._url.cannotBeABaseURL){return this._url.path[0]}if(this._url.path.length===0){return""}return"/"+this._url.path.join("/")}set pathname(e){if(this._url.cannotBeABaseURL){return}this._url.path=[];t.basicURLParse(e,{url:this._url,stateOverride:"path start"})}get search(){if(this._url.query===null||this._url.query===""){return""}return"?"+this._url.query}set search(e){const a=this._url;if(e===""){a.query=null;return}const p=e[0]==="?"?e.substring(1):e;a.query="";t.basicURLParse(p,{url:a,stateOverride:"query"})}get hash(){if(this._url.fragment===null||this._url.fragment===""){return""}return"#"+this._url.fragment}set hash(e){if(e===""){this._url.fragment=null;return}const a=e[0]==="#"?e.substring(1):e;this._url.fragment="";t.basicURLParse(a,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}}},8347:(e,a,p)=>{"use strict";const t=p(2358);const d=p(9267);const r=p(5059);const s=d.implSymbol;function URL(a){if(!this||this[s]||!(this instanceof URL)){throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.")}if(arguments.length<1){throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.")}const p=[];for(let e=0;e{"use strict";a.URL=p(8347)["interface"];a.serializeURL=p(3713).serializeURL;a.serializeURLOrigin=p(3713).serializeURLOrigin;a.basicURLParse=p(3713).basicURLParse;a.setTheUsername=p(3713).setTheUsername;a.setThePassword=p(3713).setThePassword;a.serializeHost=p(3713).serializeHost;a.serializeInteger=p(3713).serializeInteger;a.parseURL=p(3713).parseURL},3713:(e,a,p)=>{"use strict";const t=p(5477);const d=p(180);const r={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443};const s=Symbol("failure");function countSymbols(e){return t.ucs2.decode(e).length}function at(e,a){const p=e[a];return isNaN(p)?undefined:String.fromCodePoint(p)}function isASCIIDigit(e){return e>=48&&e<=57}function isASCIIAlpha(e){return e>=65&&e<=90||e>=97&&e<=122}function isASCIIAlphanumeric(e){return isASCIIAlpha(e)||isASCIIDigit(e)}function isASCIIHex(e){return isASCIIDigit(e)||e>=65&&e<=70||e>=97&&e<=102}function isSingleDot(e){return e==="."||e.toLowerCase()==="%2e"}function isDoubleDot(e){e=e.toLowerCase();return e===".."||e==="%2e."||e===".%2e"||e==="%2e%2e"}function isWindowsDriveLetterCodePoints(e,a){return isASCIIAlpha(e)&&(a===58||a===124)}function isWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&(e[1]===":"||e[1]==="|")}function isNormalizedWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&e[1]===":"}function containsForbiddenHostCodePoint(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}function containsForbiddenHostCodePointExcludingPercent(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}function isSpecialScheme(e){return r[e]!==undefined}function isSpecial(e){return isSpecialScheme(e.scheme)}function defaultPort(e){return r[e]}function percentEncode(e){let a=e.toString(16).toUpperCase();if(a.length===1){a="0"+a}return"%"+a}function utf8PercentEncode(e){const a=new Buffer(e);let p="";for(let e=0;e126}const i=new Set([32,34,35,60,62,63,96,123,125]);function isPathPercentEncode(e){return isC0ControlPercentEncode(e)||i.has(e)}const o=new Set([47,58,59,61,64,91,92,93,94,124]);function isUserinfoPercentEncode(e){return isPathPercentEncode(e)||o.has(e)}function percentEncodeChar(e,a){const p=String.fromCodePoint(e);if(a(e)){return utf8PercentEncode(p)}return p}function parseIPv4Number(e){let a=10;if(e.length>=2&&e.charAt(0)==="0"&&e.charAt(1).toLowerCase()==="x"){e=e.substring(2);a=16}else if(e.length>=2&&e.charAt(0)==="0"){e=e.substring(1);a=8}if(e===""){return 0}const p=a===10?/[^0-9]/:a===16?/[^0-9A-Fa-f]/:/[^0-7]/;if(p.test(e)){return s}return parseInt(e,a)}function parseIPv4(e){const a=e.split(".");if(a[a.length-1]===""){if(a.length>1){a.pop()}}if(a.length>4){return e}const p=[];for(const t of a){if(t===""){return e}const a=parseIPv4Number(t);if(a===s){return e}p.push(a)}for(let e=0;e255){return s}}if(p[p.length-1]>=Math.pow(256,5-p.length)){return s}let t=p.pop();let d=0;for(const e of p){t+=e*Math.pow(256,3-d);++d}return t}function serializeIPv4(e){let a="";let p=e;for(let e=1;e<=4;++e){a=String(p%256)+a;if(e!==4){a="."+a}p=Math.floor(p/256)}return a}function parseIPv6(e){const a=[0,0,0,0,0,0,0,0];let p=0;let d=null;let r=0;e=t.ucs2.decode(e);if(e[r]===58){if(e[r+1]!==58){return s}r+=2;++p;d=p}while(r6){return s}let t=0;while(e[r]!==undefined){let d=null;if(t>0){if(e[r]===46&&t<4){++r}else{return s}}if(!isASCIIDigit(e[r])){return s}while(isASCIIDigit(e[r])){const a=parseInt(at(e,r));if(d===null){d=a}else if(d===0){return s}else{d=d*10+a}if(d>255){return s}++r}a[p]=a[p]*256+d;++t;if(t===2||t===4){++p}}if(t!==4){return s}break}else if(e[r]===58){++r;if(e[r]===undefined){return s}}else if(e[r]!==undefined){return s}a[p]=t;++p}if(d!==null){let e=p-d;p=7;while(p!==0&&e>0){const t=a[d+e-1];a[d+e-1]=a[p];a[p]=t;--p;--e}}else if(d===null&&p!==8){return s}return a}function serializeIPv6(e){let a="";const p=findLongestZeroSequence(e);const t=p.idx;let d=false;for(let p=0;p<=7;++p){if(d&&e[p]===0){continue}else if(d){d=false}if(t===p){const e=p===0?"::":":";a+=e;d=true;continue}a+=e[p].toString(16);if(p!==7){a+=":"}}return a}function parseHost(e,a){if(e[0]==="["){if(e[e.length-1]!=="]"){return s}return parseIPv6(e.substring(1,e.length-1))}if(!a){return parseOpaqueHost(e)}const p=utf8PercentDecode(e);const t=d.toASCII(p,false,d.PROCESSING_OPTIONS.NONTRANSITIONAL,false);if(t===null){return s}if(containsForbiddenHostCodePoint(t)){return s}const r=parseIPv4(t);if(typeof r==="number"||r===s){return r}return t}function parseOpaqueHost(e){if(containsForbiddenHostCodePointExcludingPercent(e)){return s}let a="";const p=t.ucs2.decode(e);for(let e=0;ep){a=t;p=d}t=null;d=0}else{if(t===null){t=r}++d}}if(d>p){a=t;p=d}return{idx:a,len:p}}function serializeHost(e){if(typeof e==="number"){return serializeIPv4(e)}if(e instanceof Array){return"["+serializeIPv6(e)+"]"}return e}function trimControlChars(e){return e.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}function trimTabAndNewline(e){return e.replace(/\u0009|\u000A|\u000D/g,"")}function shortenPath(e){const a=e.path;if(a.length===0){return}if(e.scheme==="file"&&a.length===1&&isNormalizedWindowsDriveLetter(a[0])){return}a.pop()}function includesCredentials(e){return e.username!==""||e.password!==""}function cannotHaveAUsernamePasswordPort(e){return e.host===null||e.host===""||e.cannotBeABaseURL||e.scheme==="file"}function isNormalizedWindowsDriveLetter(e){return/^[A-Za-z]:$/.test(e)}function URLStateMachine(e,a,p,d,r){this.pointer=0;this.input=e;this.base=a||null;this.encodingOverride=p||"utf-8";this.stateOverride=r;this.url=d;this.failure=false;this.parseError=false;if(!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:false};const e=trimControlChars(this.input);if(e!==this.input){this.parseError=true}this.input=e}const i=trimTabAndNewline(this.input);if(i!==this.input){this.parseError=true}this.input=i;this.state=r||"scheme start";this.buffer="";this.atFlag=false;this.arrFlag=false;this.passwordTokenSeenFlag=false;this.input=t.ucs2.decode(this.input);for(;this.pointer<=this.input.length;++this.pointer){const e=this.input[this.pointer];const a=isNaN(e)?undefined:String.fromCodePoint(e);const p=this["parse "+this.state](e,a);if(!p){break}else if(p===s){this.failure=true;break}}}URLStateMachine.prototype["parse scheme start"]=function parseSchemeStart(e,a){if(isASCIIAlpha(e)){this.buffer+=a.toLowerCase();this.state="scheme"}else if(!this.stateOverride){this.state="no scheme";--this.pointer}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse scheme"]=function parseScheme(e,a){if(isASCIIAlphanumeric(e)||e===43||e===45||e===46){this.buffer+=a.toLowerCase()}else if(e===58){if(this.stateOverride){if(isSpecial(this.url)&&!isSpecialScheme(this.buffer)){return false}if(!isSpecial(this.url)&&isSpecialScheme(this.buffer)){return false}if((includesCredentials(this.url)||this.url.port!==null)&&this.buffer==="file"){return false}if(this.url.scheme==="file"&&(this.url.host===""||this.url.host===null)){return false}}this.url.scheme=this.buffer;this.buffer="";if(this.stateOverride){return false}if(this.url.scheme==="file"){if(this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47){this.parseError=true}this.state="file"}else if(isSpecial(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme){this.state="special relative or authority"}else if(isSpecial(this.url)){this.state="special authority slashes"}else if(this.input[this.pointer+1]===47){this.state="path or authority";++this.pointer}else{this.url.cannotBeABaseURL=true;this.url.path.push("");this.state="cannot-be-a-base-URL path"}}else if(!this.stateOverride){this.buffer="";this.state="no scheme";this.pointer=-1}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse no scheme"]=function parseNoScheme(e){if(this.base===null||this.base.cannotBeABaseURL&&e!==35){return s}else if(this.base.cannotBeABaseURL&&e===35){this.url.scheme=this.base.scheme;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.url.cannotBeABaseURL=true;this.state="fragment"}else if(this.base.scheme==="file"){this.state="file";--this.pointer}else{this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse special relative or authority"]=function parseSpecialRelativeOrAuthority(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse path or authority"]=function parsePathOrAuthority(e){if(e===47){this.state="authority"}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative"]=function parseRelative(e){this.url.scheme=this.base.scheme;if(isNaN(e)){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===47){this.state="relative slash"}else if(e===63){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else if(isSpecial(this.url)&&e===92){this.parseError=true;this.state="relative slash"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice(0,this.base.path.length-1);this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative slash"]=function parseRelativeSlash(e){if(isSpecial(this.url)&&(e===47||e===92)){if(e===92){this.parseError=true}this.state="special authority ignore slashes"}else if(e===47){this.state="authority"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse special authority slashes"]=function parseSpecialAuthoritySlashes(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="special authority ignore slashes";--this.pointer}return true};URLStateMachine.prototype["parse special authority ignore slashes"]=function parseSpecialAuthorityIgnoreSlashes(e){if(e!==47&&e!==92){this.state="authority";--this.pointer}else{this.parseError=true}return true};URLStateMachine.prototype["parse authority"]=function parseAuthority(e,a){if(e===64){this.parseError=true;if(this.atFlag){this.buffer="%40"+this.buffer}this.atFlag=true;const e=countSymbols(this.buffer);for(let a=0;aMath.pow(2,16)-1){this.parseError=true;return s}this.url.port=e===defaultPort(this.url.scheme)?null:e;this.buffer=""}if(this.stateOverride){return false}this.state="path start";--this.pointer}else{this.parseError=true;return s}return true};const n=new Set([47,92,63,35]);URLStateMachine.prototype["parse file"]=function parseFile(e){this.url.scheme="file";if(e===47||e===92){if(e===92){this.parseError=true}this.state="file slash"}else if(this.base!==null&&this.base.scheme==="file"){if(isNaN(e)){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===63){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else{if(this.input.length-this.pointer-1===0||!isWindowsDriveLetterCodePoints(e,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!n.has(this.input[this.pointer+2])){this.url.host=this.base.host;this.url.path=this.base.path.slice();shortenPath(this.url)}else{this.parseError=true}this.state="path";--this.pointer}}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file slash"]=function parseFileSlash(e){if(e===47||e===92){if(e===92){this.parseError=true}this.state="file host"}else{if(this.base!==null&&this.base.scheme==="file"){if(isNormalizedWindowsDriveLetterString(this.base.path[0])){this.url.path.push(this.base.path[0])}else{this.url.host=this.base.host}}this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file host"]=function parseFileHost(e,a){if(isNaN(e)||e===47||e===92||e===63||e===35){--this.pointer;if(!this.stateOverride&&isWindowsDriveLetterString(this.buffer)){this.parseError=true;this.state="path"}else if(this.buffer===""){this.url.host="";if(this.stateOverride){return false}this.state="path start"}else{let e=parseHost(this.buffer,isSpecial(this.url));if(e===s){return s}if(e==="localhost"){e=""}this.url.host=e;if(this.stateOverride){return false}this.buffer="";this.state="path start"}}else{this.buffer+=a}return true};URLStateMachine.prototype["parse path start"]=function parsePathStart(e){if(isSpecial(this.url)){if(e===92){this.parseError=true}this.state="path";if(e!==47&&e!==92){--this.pointer}}else if(!this.stateOverride&&e===63){this.url.query="";this.state="query"}else if(!this.stateOverride&&e===35){this.url.fragment="";this.state="fragment"}else if(e!==undefined){this.state="path";if(e!==47){--this.pointer}}return true};URLStateMachine.prototype["parse path"]=function parsePath(e){if(isNaN(e)||e===47||isSpecial(this.url)&&e===92||!this.stateOverride&&(e===63||e===35)){if(isSpecial(this.url)&&e===92){this.parseError=true}if(isDoubleDot(this.buffer)){shortenPath(this.url);if(e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}}else if(isSingleDot(this.buffer)&&e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}else if(!isSingleDot(this.buffer)){if(this.url.scheme==="file"&&this.url.path.length===0&&isWindowsDriveLetterString(this.buffer)){if(this.url.host!==""&&this.url.host!==null){this.parseError=true;this.url.host=""}this.buffer=this.buffer[0]+":"}this.url.path.push(this.buffer)}this.buffer="";if(this.url.scheme==="file"&&(e===undefined||e===63||e===35)){while(this.url.path.length>1&&this.url.path[0]===""){this.parseError=true;this.url.path.shift()}}if(e===63){this.url.query="";this.state="query"}if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=percentEncodeChar(e,isPathPercentEncode)}return true};URLStateMachine.prototype["parse cannot-be-a-base-URL path"]=function parseCannotBeABaseURLPath(e){if(e===63){this.url.query="";this.state="query"}else if(e===35){this.url.fragment="";this.state="fragment"}else{if(!isNaN(e)&&e!==37){this.parseError=true}if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}if(!isNaN(e)){this.url.path[0]=this.url.path[0]+percentEncodeChar(e,isC0ControlPercentEncode)}}return true};URLStateMachine.prototype["parse query"]=function parseQuery(e,a){if(isNaN(e)||!this.stateOverride&&e===35){if(!isSpecial(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss"){this.encodingOverride="utf-8"}const a=new Buffer(this.buffer);for(let e=0;e126||a[e]===34||a[e]===35||a[e]===60||a[e]===62){this.url.query+=percentEncode(a[e])}else{this.url.query+=String.fromCodePoint(a[e])}}this.buffer="";if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=a}return true};URLStateMachine.prototype["parse fragment"]=function parseFragment(e){if(isNaN(e)){}else if(e===0){this.parseError=true}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.url.fragment+=percentEncodeChar(e,isC0ControlPercentEncode)}return true};function serializeURL(e,a){let p=e.scheme+":";if(e.host!==null){p+="//";if(e.username!==""||e.password!==""){p+=e.username;if(e.password!==""){p+=":"+e.password}p+="@"}p+=serializeHost(e.host);if(e.port!==null){p+=":"+e.port}}else if(e.host===null&&e.scheme==="file"){p+="//"}if(e.cannotBeABaseURL){p+=e.path[0]}else{for(const a of e.path){p+="/"+a}}if(e.query!==null){p+="?"+e.query}if(!a&&e.fragment!==null){p+="#"+e.fragment}return p}function serializeOrigin(e){let a=e.scheme+"://";a+=serializeHost(e.host);if(e.port!==null){a+=":"+e.port}return a}e.exports.serializeURL=serializeURL;e.exports.serializeURLOrigin=function(a){switch(a.scheme){case"blob":try{return e.exports.serializeURLOrigin(e.exports.parseURL(a.path[0]))}catch(e){return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return serializeOrigin({scheme:a.scheme,host:a.host,port:a.port});case"file":return"file://";default:return"null"}};e.exports.basicURLParse=function(e,a){if(a===undefined){a={}}const p=new URLStateMachine(e,a.baseURL,a.encodingOverride,a.url,a.stateOverride);if(p.failure){return"failure"}return p.url};e.exports.setTheUsername=function(e,a){e.username="";const p=t.ucs2.decode(a);for(let a=0;a{"use strict";e.exports.mixin=function mixin(e,a){const p=Object.getOwnPropertyNames(a);for(let t=0;t{var t=p(5788);e.exports=t(once);e.exports.strict=t(onceStrict);once.proto=once((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return once(this)},configurable:true});Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return onceStrict(this)},configurable:true})}));function once(e){var f=function(){if(f.called)return f.value;f.called=true;return f.value=e.apply(this,arguments)};f.called=false;return f}function onceStrict(e){var f=function(){if(f.called)throw new Error(f.onceError);f.called=true;return f.value=e.apply(this,arguments)};var a=e.name||"Function wrapped with `once`";f.onceError=a+" shouldn't be called more than once";f.called=false;return f}},9761:(e,a,p)=>{"use strict";var t=p(4300);var d=t.Buffer;var r={};var s;for(s in t){if(!t.hasOwnProperty(s))continue;if(s==="SlowBuffer"||s==="Buffer")continue;r[s]=t[s]}var i=r.Buffer={};for(s in d){if(!d.hasOwnProperty(s))continue;if(s==="allocUnsafe"||s==="allocUnsafeSlow")continue;i[s]=d[s]}r.Buffer.prototype=d.prototype;if(!i.from||i.from===Uint8Array.from){i.from=function(e,a,p){if(typeof e==="number"){throw new TypeError('The "value" argument must not be of type number. Received type '+typeof e)}if(e&&typeof e.length==="undefined"){throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}return d(e,a,p)}}if(!i.alloc){i.alloc=function(e,a,p){if(typeof e!=="number"){throw new TypeError('The "size" argument must be of type number. Received type '+typeof e)}if(e<0||e>=2*(1<<30)){throw new RangeError('The value "'+e+'" is invalid for option "size"')}var t=d(e);if(!a||a.length===0){t.fill(0)}else if(typeof p==="string"){t.fill(a,p)}else{t.fill(a)}return t}}if(!r.kStringMaxLength){try{r.kStringMaxLength=process.binding("buffer").kStringMaxLength}catch(e){}}if(!r.constants){r.constants={MAX_LENGTH:r.kMaxLength};if(r.kStringMaxLength){r.constants.MAX_STRING_LENGTH=r.kStringMaxLength}}e.exports=r},391:(e,a,p)=>{e.exports=p(7832)},7832:(e,a,p)=>{"use strict";var t=p(1808);var d=p(4404);var r=p(3685);var s=p(5687);var i=p(2361);var o=p(9491);var n=p(3837);a.httpOverHttp=httpOverHttp;a.httpsOverHttp=httpsOverHttp;a.httpOverHttps=httpOverHttps;a.httpsOverHttps=httpsOverHttps;function httpOverHttp(e){var a=new TunnelingAgent(e);a.request=r.request;return a}function httpsOverHttp(e){var a=new TunnelingAgent(e);a.request=r.request;a.createSocket=createSecureSocket;a.defaultPort=443;return a}function httpOverHttps(e){var a=new TunnelingAgent(e);a.request=s.request;return a}function httpsOverHttps(e){var a=new TunnelingAgent(e);a.request=s.request;a.createSocket=createSecureSocket;a.defaultPort=443;return a}function TunnelingAgent(e){var a=this;a.options=e||{};a.proxyOptions=a.options.proxy||{};a.maxSockets=a.options.maxSockets||r.Agent.defaultMaxSockets;a.requests=[];a.sockets=[];a.on("free",(function onFree(e,p,t,d){var r=toOptions(p,t,d);for(var s=0,i=a.requests.length;s=this.maxSockets){d.requests.push(r);return}d.createSocket(r,(function(a){a.on("free",onFree);a.on("close",onCloseOrRemove);a.on("agentRemove",onCloseOrRemove);e.onSocket(a);function onFree(){d.emit("free",a,r)}function onCloseOrRemove(e){d.removeSocket(a);a.removeListener("free",onFree);a.removeListener("close",onCloseOrRemove);a.removeListener("agentRemove",onCloseOrRemove)}}))};TunnelingAgent.prototype.createSocket=function createSocket(e,a){var p=this;var t={};p.sockets.push(t);var d=mergeOptions({},p.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:false,headers:{host:e.host+":"+e.port}});if(e.localAddress){d.localAddress=e.localAddress}if(d.proxyAuth){d.headers=d.headers||{};d.headers["Proxy-Authorization"]="Basic "+new Buffer(d.proxyAuth).toString("base64")}l("making CONNECT request");var r=p.request(d);r.useChunkedEncodingByDefault=false;r.once("response",onResponse);r.once("upgrade",onUpgrade);r.once("connect",onConnect);r.once("error",onError);r.end();function onResponse(e){e.upgrade=true}function onUpgrade(e,a,p){process.nextTick((function(){onConnect(e,a,p)}))}function onConnect(d,s,i){r.removeAllListeners();s.removeAllListeners();if(d.statusCode!==200){l("tunneling socket could not be established, statusCode=%d",d.statusCode);s.destroy();var o=new Error("tunneling socket could not be established, "+"statusCode="+d.statusCode);o.code="ECONNRESET";e.request.emit("error",o);p.removeSocket(t);return}if(i.length>0){l("got illegal response body from proxy");s.destroy();var o=new Error("got illegal response body from proxy");o.code="ECONNRESET";e.request.emit("error",o);p.removeSocket(t);return}l("tunneling connection has established");p.sockets[p.sockets.indexOf(t)]=s;return a(s)}function onError(a){r.removeAllListeners();l("tunneling socket could not be established, cause=%s\n",a.message,a.stack);var d=new Error("tunneling socket could not be established, "+"cause="+a.message);d.code="ECONNRESET";e.request.emit("error",d);p.removeSocket(t)}};TunnelingAgent.prototype.removeSocket=function removeSocket(e){var a=this.sockets.indexOf(e);if(a===-1){return}this.sockets.splice(a,1);var p=this.requests.shift();if(p){this.createSocket(p,(function(e){p.request.onSocket(e)}))}};function createSecureSocket(e,a){var p=this;TunnelingAgent.prototype.createSocket.call(p,e,(function(t){var r=e.request.getHeader("host");var s=mergeOptions({},p.options,{socket:t,servername:r?r.replace(/:.*$/,""):e.host});var i=d.connect(0,s);p.sockets[p.sockets.indexOf(t)]=i;a(i)}))}function toOptions(e,a,p){if(typeof e==="string"){return{host:e,port:a,localAddress:p}}return e}function mergeOptions(e){for(var a=1,p=arguments.length;a{"use strict";Object.defineProperty(a,"__esModule",{value:true});function getUserAgent(){if(typeof navigator==="object"&&"userAgent"in navigator){return navigator.userAgent}if(typeof process==="object"&&"version"in process){return`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`}return""}a.getUserAgent=getUserAgent},757:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});Object.defineProperty(a,"v1",{enumerable:true,get:function(){return t.default}});Object.defineProperty(a,"v3",{enumerable:true,get:function(){return d.default}});Object.defineProperty(a,"v4",{enumerable:true,get:function(){return r.default}});Object.defineProperty(a,"v5",{enumerable:true,get:function(){return s.default}});Object.defineProperty(a,"NIL",{enumerable:true,get:function(){return i.default}});Object.defineProperty(a,"version",{enumerable:true,get:function(){return o.default}});Object.defineProperty(a,"validate",{enumerable:true,get:function(){return n.default}});Object.defineProperty(a,"stringify",{enumerable:true,get:function(){return l.default}});Object.defineProperty(a,"parse",{enumerable:true,get:function(){return m.default}});var t=_interopRequireDefault(p(6098));var d=_interopRequireDefault(p(1400));var r=_interopRequireDefault(p(5949));var s=_interopRequireDefault(p(135));var i=_interopRequireDefault(p(4953));var o=_interopRequireDefault(p(9449));var n=_interopRequireDefault(p(266));var l=_interopRequireDefault(p(8525));var m=_interopRequireDefault(p(2281));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},3855:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return t.default.createHash("md5").update(e).digest()}var d=md5;a["default"]=d},4953:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var p="00000000-0000-0000-0000-000000000000";a["default"]=p},2281:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,t.default)(e)){throw TypeError("Invalid UUID")}let a;const p=new Uint8Array(16);p[0]=(a=parseInt(e.slice(0,8),16))>>>24;p[1]=a>>>16&255;p[2]=a>>>8&255;p[3]=a&255;p[4]=(a=parseInt(e.slice(9,13),16))>>>8;p[5]=a&255;p[6]=(a=parseInt(e.slice(14,18),16))>>>8;p[7]=a&255;p[8]=(a=parseInt(e.slice(19,23),16))>>>8;p[9]=a&255;p[10]=(a=parseInt(e.slice(24,36),16))/1099511627776&255;p[11]=a/4294967296&255;p[12]=a>>>24&255;p[13]=a>>>16&255;p[14]=a>>>8&255;p[15]=a&255;return p}var d=parse;a["default"]=d},9741:(e,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var p=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;a["default"]=p},9937:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=rng;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const d=new Uint8Array(256);let r=d.length;function rng(){if(r>d.length-16){t.default.randomFillSync(d);r=0}return d.slice(r,r+=16)}},197:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return t.default.createHash("sha1").update(e).digest()}var d=sha1;a["default"]=d},8525:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const d=[];for(let e=0;e<256;++e){d.push((e+256).toString(16).substr(1))}function stringify(e,a=0){const p=(d[e[a+0]]+d[e[a+1]]+d[e[a+2]]+d[e[a+3]]+"-"+d[e[a+4]]+d[e[a+5]]+"-"+d[e[a+6]]+d[e[a+7]]+"-"+d[e[a+8]]+d[e[a+9]]+"-"+d[e[a+10]]+d[e[a+11]]+d[e[a+12]]+d[e[a+13]]+d[e[a+14]]+d[e[a+15]]).toLowerCase();if(!(0,t.default)(p)){throw TypeError("Stringified UUID is invalid")}return p}var r=stringify;a["default"]=r},6098:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9937));var d=_interopRequireDefault(p(8525));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let r;let s;let i=0;let o=0;function v1(e,a,p){let n=a&&p||0;const l=a||new Array(16);e=e||{};let m=e.node||r;let c=e.clockseq!==undefined?e.clockseq:s;if(m==null||c==null){const a=e.random||(e.rng||t.default)();if(m==null){m=r=[a[0]|1,a[1],a[2],a[3],a[4],a[5]]}if(c==null){c=s=(a[6]<<8|a[7])&16383}}let u=e.msecs!==undefined?e.msecs:Date.now();let h=e.nsecs!==undefined?e.nsecs:o+1;const v=u-i+(h-o)/1e4;if(v<0&&e.clockseq===undefined){c=c+1&16383}if((v<0||u>i)&&e.nsecs===undefined){h=0}if(h>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}i=u;o=h;s=c;u+=122192928e5;const g=((u&268435455)*1e4+h)%4294967296;l[n++]=g>>>24&255;l[n++]=g>>>16&255;l[n++]=g>>>8&255;l[n++]=g&255;const w=u/4294967296*1e4&268435455;l[n++]=w>>>8&255;l[n++]=w&255;l[n++]=w>>>24&15|16;l[n++]=w>>>16&255;l[n++]=c>>>8|128;l[n++]=c&255;for(let e=0;e<6;++e){l[n+e]=m[e]}return a||(0,d.default)(l)}var n=v1;a["default"]=n},1400:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6230));var d=_interopRequireDefault(p(3855));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,t.default)("v3",48,d.default);var s=r;a["default"]=s},6230:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=_default;a.URL=a.DNS=void 0;var t=_interopRequireDefault(p(8525));var d=_interopRequireDefault(p(2281));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const a=[];for(let p=0;p{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9937));var d=_interopRequireDefault(p(8525));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,a,p){e=e||{};const r=e.random||(e.rng||t.default)();r[6]=r[6]&15|64;r[8]=r[8]&63|128;if(a){p=p||0;for(let e=0;e<16;++e){a[p+e]=r[e]}return a}return(0,d.default)(r)}var r=v4;a["default"]=r},135:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(6230));var d=_interopRequireDefault(p(197));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,t.default)("v5",80,d.default);var s=r;a["default"]=s},266:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(9741));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&t.default.test(e)}var d=validate;a["default"]=d},9449:(e,a,p)=>{"use strict";Object.defineProperty(a,"__esModule",{value:true});a["default"]=void 0;var t=_interopRequireDefault(p(266));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,t.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.substr(14,1),16)}var d=version;a["default"]=d},5788:e=>{e.exports=wrappy;function wrappy(e,a){if(e&&a)return wrappy(e)(a);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach((function(a){wrapper[a]=e[a]}));return wrapper;function wrapper(){var a=new Array(arguments.length);for(var p=0;p{"use strict";e.exports=require("assert")},4300:e=>{"use strict";e.exports=require("buffer")},6113:e=>{"use strict";e.exports=require("crypto")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5687:e=>{"use strict";e.exports=require("https")},1808:e=>{"use strict";e.exports=require("net")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},5477:e=>{"use strict";e.exports=require("punycode")},2781:e=>{"use strict";e.exports=require("stream")},1576:e=>{"use strict";e.exports=require("string_decoder")},4404:e=>{"use strict";e.exports=require("tls")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},9796:e=>{"use strict";e.exports=require("zlib")},3870:e=>{"use strict";e.exports=JSON.parse('[["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],["88a1","ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],["8940","𪎩𡅅"],["8943","攊"],["8946","丽滝鵎釟"],["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],["89a1","琑糼緍楆竉刧"],["89ab","醌碸酞肼"],["89b0","贋胶𠧧"],["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],["89c1","溚舾甙"],["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],["8a40","𧶄唥"],["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],["8aac","䠋𠆩㿺塳𢶍"],["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],["8ac9","𪘁𠸉𢫏𢳉"],["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],["8ca1","𣏹椙橃𣱣泿"],["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],["8cc9","顨杫䉶圽"],["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],["8d40","𠮟"],["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],["9fae","酙隁酜"],["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],["9fc1","𤤙盖鮝个𠳔莾衂"],["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"],["9fe7","毺蠘罸"],["9feb","嘠𪙊蹷齓"],["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],["a055","𡠻𦸅"],["a058","詾𢔛"],["a05b","惽癧髗鵄鍮鮏蟵"],["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],["a0a1","嵗𨯂迚𨸹"],["a0a6","僙𡵆礆匲阸𠼻䁥"],["a0ae","矾"],["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],["a3c0","␀",31,"␡"],["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23],["c740","す",58,"ァアィイ"],["c7a1","ゥ",81,"А",5,"ЁЖ",4],["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"],["c8a1","龰冈龱𧘇"],["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],["c8f5","ʃɐɛɔɵœøŋʊɪ"],["f9fe","■"],["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]]')},2029:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127,"€"],["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"],["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],["8240","侤侫侭侰",4,"侶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"],["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"],["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5],["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"],["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"],["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"],["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"],["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4],["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6],["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"堫",4,"報堲堳場堶",7],["8940","堾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"塭",16,"塿墂墄墆墇墈墊墋墌"],["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"],["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6],["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"屰屲",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"峼",4],["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"崵",7,"崿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"],["8e40","嶡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"],["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6],["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"],["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"],["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"],["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"],["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"],["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8],["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"],["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"],["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"],["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"],["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"栫",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5],["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"],["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"],["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5],["9980","檧檨檪檭",114,"欥欦欨",6],["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"],["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"],["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"],["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"],["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"],["9e40","濦",7,"濰",32,"瀒",7,"瀜",6,"瀤",6],["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"],["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"],["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4],["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19],["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],["a2a1","ⅰ",9],["a2b1","⒈",19,"⑴",19,"①",9],["a2e5","㈠",9],["a2f1","Ⅰ",11],["a3a1","!"#¥%",88," ̄"],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6],["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],["a8bd","ńň"],["a8c0","ɡ"],["a8c5","ㄅ",36],["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"],["a959","℡㈱"],["a95c","‐"],["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8],["a980","﹢",4,"﹨﹩﹪﹫"],["a996","〇"],["a9a4","─",75],["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8],["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"],["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4],["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4],["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11],["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"],["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12],["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"],["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],["ae80","畝",7,"畧畨畩畫",6,"畳畵當畷畺",4,"疀疁疂疄疅疇"],["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"],["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4],["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9],["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"],["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16],["b780","穩",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"],["b880","竴",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"],["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"],["ba80","簚",4,"簠",5,"簨簩簫",12,"簹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],["bb40","籃",9,"籎",36,"籵",5,"籾",9],["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"糰",7,"糹糺糼",13,"紋",5],["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],["bd40","紷",54,"絯",7],["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],["be40","継",12,"綧",6,"綯",42],["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],["bf40","緻",62],["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],["c040","繞",35,"纃",23,"纜纝纞"],["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"羱"],["c180","羳",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"],["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"],["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"],["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"],["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10],["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"],["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"],["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"],["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9],["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],["d040","蠤",13,"蠳",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"],["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5],["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"],["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6],["d380","觻",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],["d440","訞",31,"訿",8,"詉",21],["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],["d540","誁",7,"誋",7,"誔",46],["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],["d640","諤",34,"謈",27],["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],["d740","譆",31,"譧",4,"譭",25],["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],["d840","谸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"豣",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"],["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],["d940","貮",62],["d980","賭",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"],["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"],["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7],["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],["dd40","軥",62],["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"],["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"],["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"],["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],["e240","釦",62],["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],["e340","鉆",45,"鉵",16],["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],["e440","銨",5,"銯",24,"鋉",31],["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],["e540","錊",51,"錿",10],["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],["e640","鍬",34,"鎐",27],["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],["e740","鏎",7,"鏗",54],["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"],["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42],["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"],["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7],["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46],["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],["ee40","頏",62],["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4],["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],["f040","餈",4,"餎餏餑",28,"餯",26],["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],["f140","馌馎馚",10,"馦馧馩",47],["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],["f240","駺",62],["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"],["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5],["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],["f540","魼",62],["f580","鮻",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],["f640","鯜",62],["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"鲥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],["f740","鰼",62],["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],["f840","鳣",62],["f880","鴢",32],["f940","鵃",62],["f980","鶂",32],["fa40","鶣",62],["fa80","鷢",32],["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"],["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6],["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"],["fd40","鼲",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38],["fd80","齹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"],["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]]')},920:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"],["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"],["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"],["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18],["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7],["8361","긝",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"],["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4],["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"],["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"],["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"],["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10],["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"],["8741","놞",9,"놩",15],["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"],["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4],["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4],["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"],["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"],["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"],["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15],["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"],["8a61","둧",4,"둭",18,"뒁뒂"],["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"],["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"],["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8],["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18],["8c41","똀",15,"똒똓똕똖똗똙",4],["8c61","똞",6,"똦",5,"똭",6,"똵",5],["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16],["8d41","뛃",16,"뛕",8],["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"],["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"],["8e41","랟랡",6,"랪랮",5,"랶랷랹",8],["8e61","럂",4,"럈럊",19],["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","뢅",7,"뢎",17],["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5],["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"릆릈릋릌릏",15],["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"],["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5],["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"],["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4],["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"],["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8],["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"],["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8],["9461","봞",5,"봥",6,"봭",12],["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24],["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"],["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"],["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14],["9641","뺸",23,"뻒뻓"],["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8],["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44],["9741","뾃",16,"뾕",8],["9761","뾞",17,"뾱",7],["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"],["9841","쁀",16,"쁒",5,"쁙쁚쁛"],["9861","쁝쁞쁟쁡",6,"쁪",15],["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"],["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"],["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"],["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"],["9a41","숤숥숦숧숪숬숮숰숳숵",16],["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"],["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"],["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8],["9b61","쌳",17,"썆",7],["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"],["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5],["9c61","쏿",8,"쐉",6,"쐑",9],["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12],["9d41","쒪",13,"쒹쒺쒻쒽",8],["9d61","쓆",25],["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"],["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"],["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"],["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"],["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"],["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"],["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"],["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13],["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"],["a141","좥좦좧좩",18,"좾좿죀죁"],["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"],["a241","줐줒",5,"줙",18],["a261","줭",6,"줵",18],["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"],["a361","즑",6,"즚즜즞",16],["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"],["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"],["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12],["a481","쨦쨧쨨쨪",28,"ㄱ",93],["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"],["a561","쩫",17,"쩾",5,"쪅쪆"],["a581","쪇",16,"쪙",14,"ⅰ",9],["a5b0","Ⅰ",9],["a5c1","Α",16,"Σ",6],["a5e1","α",16,"σ",6],["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"],["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6],["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7],["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7],["a761","쬪",22,"쭂쭃쭄"],["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],["a841","쭭",10,"쭺",14],["a861","쮉",18,"쮝",6],["a881","쮤",19,"쮹",11,"ÆÐªĦ"],["a8a6","IJ"],["a8a8","ĿŁØŒºÞŦŊ"],["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"],["a941","쯅",14,"쯕",10],["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18],["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"],["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"],["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ぁ",82],["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"],["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5],["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85],["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"],["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4],["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25],["acd1","а",5,"ёж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7],["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"],["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"],["ae41","췆",5,"췍췎췏췑",16],["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4],["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"],["af41","츬츭츮츯츲츴츶",19],["af61","칊",13,"칚칛칝칞칢",5,"칪칬"],["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"],["b041","캚",5,"캢캦",5,"캮",12],["b061","캻",5,"컂",19],["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"],["b161","켥",6,"켮켲",5,"켹",11],["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"],["b261","쾎",18,"쾢",5,"쾩"],["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5],["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5],["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"],["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],["b541","킕",14,"킦킧킩킪킫킭",5],["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4],["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],["b641","턅",7,"턎",17],["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"],["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],["b741","텮",13,"텽",6,"톅톆톇톉톊"],["b761","톋",20,"톢톣톥톦톧"],["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],["b841","퇐",7,"퇙",17],["b861","퇫",8,"퇵퇶퇷퇹",13],["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"],["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"],["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"],["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5],["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"],["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"],["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"],["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"],["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"],["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13],["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],["be41","퐸",7,"푁푂푃푅",14],["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"],["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"],["bf41","풞",10,"풪",14],["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"],["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5],["c061","픞",25],["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"],["c161","햌햍햎햏햑",19,"햦햧"],["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"],["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"],["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4],["c361","홢",4,"홨홪",5,"홲홳홵",11],["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"],["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4],["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"],["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4],["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],["c641","힍힎힏힑",6,"힚힜힞",5],["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"],["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]]')},1154:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"],["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21],["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10],["a3a1","ㄐ",25,"˙ˉˊˇˋ"],["a3e1","€"],["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]]')},8601:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",127],["8ea1","。",62],["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"],["a2a1","◆□■△▲▽▼※〒→←↑↓〓"],["a2ba","∈∋⊆⊇⊂⊃∪∩"],["a2ca","∧∨¬⇒⇔∀∃"],["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["a2f2","ʼn♯♭♪†‡¶"],["a2fe","◯"],["a3b0","0",9],["a3c1","A",25],["a3e1","a",25],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["ada1","①",19,"Ⅰ",9],["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],["f4a1","堯槇遙瑤凜熙"],["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["fcf1","ⅰ",9,"¬¦'""],["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®™¤№"],["8fa6e1","ΆΈΉΊΪ"],["8fa6e7","Ό"],["8fa6e9","ΎΫ"],["8fa6ec","Ώ"],["8fa6f1","άέήίϊΐόςύϋΰώ"],["8fa7c2","Ђ",10,"ЎЏ"],["8fa7f2","ђ",10,"ўџ"],["8fa9a1","ÆĐ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ŁĿ"],["8fa9ab","ŊØŒ"],["8fa9af","ŦÞ"],["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"],["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],["8fabbd","ġĥíìïîǐ"],["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"],["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5],["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"],["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]]')},4705:e=>{"use strict";e.exports=JSON.parse('{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}')},9349:e=>{"use strict";e.exports=JSON.parse('[["a140","",62],["a180","",32],["a240","",62],["a280","",32],["a2ab","",5],["a2e3","€"],["a2ef",""],["a2fd",""],["a340","",62],["a380","",31," "],["a440","",62],["a480","",32],["a4f4","",10],["a540","",62],["a580","",32],["a5f7","",7],["a640","",62],["a680","",32],["a6b9","",7],["a6d9","",6],["a6ec",""],["a6f3",""],["a6f6","",8],["a740","",62],["a780","",32],["a7c2","",14],["a7f2","",12],["a896","",10],["a8bc","ḿ"],["a8bf","ǹ"],["a8c1",""],["a8ea","",20],["a958",""],["a95b",""],["a95d",""],["a989","〾⿰",11],["a997","",12],["a9f0","",14],["aaa1","",93],["aba1","",93],["aca1","",93],["ada1","",93],["aea1","",93],["afa1","",93],["d7fa","",4],["f8a1","",93],["f9a1","",93],["faa1","",93],["fba1","",93],["fca1","",93],["fda1","",93],["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93],["8135f437",""]]')},1537:e=>{"use strict";e.exports=JSON.parse('[["0","\\u0000",128],["a1","。",62],["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"],["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],["81b8","∈∋⊆⊇⊂⊃∪∩"],["81c8","∧∨¬⇒⇔∀∃"],["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["81f0","ʼn♯♭♪†‡¶"],["81fc","◯"],["824f","0",9],["8260","A",25],["8281","a",25],["829f","ぁ",82],["8340","ァ",62],["8380","ム",22],["839f","Α",16,"Σ",6],["83bf","α",16,"σ",6],["8440","А",5,"ЁЖ",25],["8470","а",5,"ёж",7],["8480","о",17],["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["8740","①",19,"Ⅰ",9],["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["877e","㍻"],["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["eeef","ⅰ",9,"¬¦'""],["f040","",62],["f080","",124],["f140","",62],["f180","",124],["f240","",62],["f280","",124],["f340","",62],["f380","",124],["f440","",62],["f480","",124],["f540","",62],["f580","",124],["f640","",62],["f680","",124],["f740","",62],["f780","",124],["f840","",62],["f880","",124],["f940",""],["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]]')},2813:e=>{"use strict";e.exports=JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var a=__webpack_module_cache__[e];if(a!==undefined){return a.exports}var p=__webpack_module_cache__[e]={exports:{}};var t=true;try{__webpack_modules__[e].call(p.exports,p,p.exports,__nccwpck_require__);t=false}finally{if(t)delete __webpack_module_cache__[e]}return p.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(2079);module.exports=__webpack_exports__})(); \ No newline at end of file diff --git a/.github/actions/check-pr-status/package.json b/.github/actions/check-pr-status/package.json index 0f9f8a7956..fd39aabb5c 100644 --- a/.github/actions/check-pr-status/package.json +++ b/.github/actions/check-pr-status/package.json @@ -1,6 +1,6 @@ { "name": "check-pr-status", - "version": "4.11.0", + "version": "4.11.1", "main": "dist/index.js", "license": "MIT", "private": true, diff --git a/api-tests/core/admin/admin-permissions-custom-conditions.test.api.js b/api-tests/core/admin/admin-permissions-custom-conditions.test.api.js new file mode 100644 index 0000000000..a52867e941 --- /dev/null +++ b/api-tests/core/admin/admin-permissions-custom-conditions.test.api.js @@ -0,0 +1,306 @@ +'use strict'; + +const { prop } = require('lodash/fp'); +const { createTestBuilder } = require('api-tests/builder'); +const { createStrapiInstance } = require('api-tests/strapi'); +const { createRequest, createAuthRequest } = require('api-tests/request'); +const { createUtils } = require('api-tests/utils'); + +describe('Admin Permissions - Conditions', () => { + let strapi; + let utils; + const builder = createTestBuilder(); + const requests = { + public: null, + admin: null, + }; + + const localTestData = { + models: { + article: { + singularName: 'article', + pluralName: 'articles', + displayName: 'Article', + draftAndPublish: true, + attributes: { + title: { + type: 'string', + }, + price: { + type: 'integer', + }, + category: { + type: 'relation', + relation: 'manyToOne', + target: 'api::category.category', + }, + }, + }, + category: { + singularName: 'category', + pluralName: 'categories', + displayName: 'Category', + draftAndPublish: true, + attributes: { + name: { + type: 'string', + }, + }, + }, + }, + cheapArticle: { + title: 'Cheap Article', + price: 999, + }, + expensiveArticle: { + title: 'Expensive Article', + price: 1001, + }, + categories: [{ name: 'Cheap' }, { name: 'Expensive' }], + role: { + name: 'foobar', + description: 'A dummy test role', + }, + permissions: [ + { + action: 'plugin::content-manager.explorer.create', + subject: 'api::article.article', + fields: null, + conditions: [], + }, + { + action: 'plugin::content-manager.explorer.update', + subject: 'api::article.article', + fields: null, + conditions: ['plugin::test.cheap-article'], + }, + { + action: 'plugin::content-manager.explorer.read', + subject: 'api::article.article', + fields: null, + conditions: ['plugin::test.cheap-article'], + }, + { + action: 'plugin::content-manager.explorer.delete', + subject: 'api::article.article', + fields: null, + conditions: ['plugin::test.cheap-article'], + }, + { + action: 'plugin::content-manager.explorer.publish', + subject: 'api::article.article', + fields: null, + conditions: ['plugin::test.cheap-article'], + }, + ], + customConditions: [ + { + displayName: 'Custom Condition', + name: 'cheap-article', + plugin: 'test', + handler: () => ({ + 'category.name': { $eq: 'Cheap' }, + }), + }, + ], + userPassword: 'fooBar42', + users: [{ firstname: 'Alice', lastname: 'Foo', email: 'alice.foo@test.com' }], + }; + + const createFixtures = async () => { + // Login with admin and init admin tools + requests.admin = await createAuthRequest({ strapi }); + requests.public = createRequest({ strapi }); + + // Create the foobar role + const role = await utils.createRole(localTestData.role); + + // Assign permissions to the foobar role + const permissions = await utils.assignPermissionsToRole(role.id, localTestData.permissions); + Object.assign(role, { permissions }); + + // Create users with the new role & create associated auth requests + const users = []; + + for (let i = 0; i < localTestData.users.length; i += 1) { + const userFixture = localTestData.users[i]; + const userAttributes = { + ...userFixture, + password: localTestData.userPassword, + roles: [role.id], + }; + + const createdUser = await utils.createUser(userAttributes); + + requests[createdUser.id] = await createAuthRequest({ strapi, userInfo: createdUser }); + + users.push(createdUser); + } + + // Create categories + for (const category of localTestData.categories) { + const { body } = await requests.admin({ + method: 'POST', + url: `/content-manager/collection-types/api::category.category`, + body: category, + }); + category.id = body.id; + } + + // Update the local data store + Object.assign(localTestData, { role, permissions, users }); + }; + + const getUserRequest = (idx) => requests[localTestData.users[idx].id]; + + const deleteFixtures = async () => { + // Delete users + const usersId = localTestData.users.map(prop('id')); + await utils.deleteUsersById(usersId); + + // Delete the foobar role + await utils.deleteRolesById([localTestData.role.id]); + }; + + beforeAll(async () => { + await builder + .addContentType(localTestData.models.category) + .addContentType(localTestData.models.article) + .build(); + + strapi = await createStrapiInstance({ + bootstrap: ({ strapi }) => { + // Create custom conditions + return strapi.admin.services.permission.conditionProvider.registerMany( + localTestData.customConditions + ); + }, + }); + utils = createUtils(strapi); + + await createFixtures(); + }); + + afterAll(async () => { + await deleteFixtures(); + + await strapi.destroy(); + await builder.cleanup(); + }); + + test('User can create articles', async () => { + const rq = getUserRequest(0); + + const res = await rq({ + method: 'POST', + url: `/content-manager/collection-types/api::article.article`, + body: { ...localTestData.cheapArticle, category: localTestData.categories[0].id }, + }); + + const resExpensive = await rq({ + method: 'POST', + url: `/content-manager/collection-types/api::article.article`, + body: { ...localTestData.expensiveArticle, category: localTestData.categories[1].id }, + }); + + expect(res.statusCode).toBe(200); + expect(resExpensive.statusCode).toBe(200); + + localTestData.cheapArticle.id = res.body.id; + localTestData.expensiveArticle.id = resExpensive.body.id; + }); + + test('User can read cheap articles', async () => { + const { id } = localTestData.cheapArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'GET', + url: `/content-manager/collection-types/api::article.article/${id}`, + }); + + expect(res.statusCode).toBe(200); + expect(res.body).toMatchObject(localTestData.cheapArticle); + }); + + test('User cannot read expensive articles', async () => { + const { id } = localTestData.expensiveArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'GET', + url: `/content-manager/collection-types/api::article.article/${id}`, + }); + + expect(res.statusCode).toBe(403); + }); + + test('User can update cheap articles', async () => { + const { id } = localTestData.cheapArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'PUT', + url: `/content-manager/collection-types/api::article.article/${id}`, + body: { ...localTestData.cheapArticle, title: 'New title' }, + }); + + expect(res.statusCode).toBe(200); + expect(res.body).toMatchObject({ ...localTestData.cheapArticle, title: 'New title' }); + localTestData.cheapArticle.title = 'New title'; + }); + + test('User cannot update expensive articles', async () => { + const { id } = localTestData.expensiveArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'PUT', + url: `/content-manager/collection-types/api::article.article/${id}`, + body: { ...localTestData.expensiveArticle, title: 'New title' }, + }); + + expect(res.statusCode).toBe(403); + }); + + test('User can publish cheap articles', async () => { + const { id } = localTestData.cheapArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'POST', + url: `/content-manager/collection-types/api::article.article/${id}/actions/publish`, + }); + + expect(res.statusCode).toBe(200); + expect(res.body).toMatchObject(localTestData.cheapArticle); + }); + + test('User cannot publish expensive articles', async () => { + const { id } = localTestData.expensiveArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'POST', + url: `/content-manager/collection-types/api::article.article/${id}/actions/publish`, + }); + + expect(res.statusCode).toBe(403); + }); + + test('User can delete cheap articles', async () => { + const { id } = localTestData.cheapArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'DELETE', + url: `/content-manager/collection-types/api::article.article/${id}`, + }); + + expect(res.statusCode).toBe(200); + }); + + test('User cannot delete expensive articles', async () => { + const { id } = localTestData.expensiveArticle; + const rq = getUserRequest(0); + const res = await rq({ + method: 'DELETE', + url: `/content-manager/collection-types/api::article.article/${id}`, + }); + + expect(res.statusCode).toBe(403); + }); +}); diff --git a/docs/docs/docs/01-core/admin/04-hooks/use-enterprise.mdx b/docs/docs/docs/01-core/admin/04-hooks/use-enterprise.mdx new file mode 100644 index 0000000000..a8e0c49977 --- /dev/null +++ b/docs/docs/docs/01-core/admin/04-hooks/use-enterprise.mdx @@ -0,0 +1,56 @@ +--- +title: useEnterprise +description: API reference for the useEnterprise hook +tags: + - admin + - hooks + - users +--- + +A hook that returns either community or enterprise-edition data-structures based on the global `window.strapi.isEE` flag. + +## Usage + +``` +import { CE_DATA } from './data'; + +function Component() { + const data = useEnterprise(CE_DATA, async () => (await import('./ee/data')).default); +} +``` + +It accepts an optional third argument to pass in options customizing the hook behavior: + +### `combine()` + +THe `combine` callback can be used as a custom "merge" function for the ce and ee arguments: + +``` +const data = useEnterprise({ a: 1 }, () => { b: 1 }, { combine(ce, ee) { return { ...ce, ...ee } } }); + +console.log(data); // { a: 1, b: 1 } +``` + +### `defaultValue` + +By default the hook returns `null` if `window.strapi.isEE` is true and the enterprise data structure is not yet loaded. Customizing +this value can help implementing various loading scenarios: + +``` +// display a loading state while an EE component is loading +const Component = useEnterprise(() =>

CE

, () =>

EE

, { + defaultValue: () =>
loading ...
+}) + +// display nothing while an EE component is loading, but don't block the overall rendering +const Component = useEnterprise(() =>

CE

, () =>

EE

, { + defaultValue: () => null +}) + +// display nothing while an EE component is loading +const Component = useEnterprise(() =>

CE

, () =>

EE

) + +if (!Component) { + return; +} +``` diff --git a/examples/getstarted/package.json b/examples/getstarted/package.json index 2fa8f80e9f..6b6be5153d 100644 --- a/examples/getstarted/package.json +++ b/examples/getstarted/package.json @@ -1,7 +1,7 @@ { "name": "getstarted", "private": true, - "version": "4.11.0", + "version": "4.11.1", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -13,16 +13,16 @@ }, "dependencies": { "@strapi/icons": "1.8.0", - "@strapi/plugin-color-picker": "4.11.0", - "@strapi/plugin-documentation": "4.11.0", - "@strapi/plugin-graphql": "4.11.0", - "@strapi/plugin-i18n": "4.11.0", - "@strapi/plugin-sentry": "4.11.0", - "@strapi/plugin-users-permissions": "4.11.0", - "@strapi/provider-email-mailgun": "4.11.0", - "@strapi/provider-upload-aws-s3": "4.11.0", - "@strapi/provider-upload-cloudinary": "4.11.0", - "@strapi/strapi": "4.11.0", + "@strapi/plugin-color-picker": "4.11.1", + "@strapi/plugin-documentation": "4.11.1", + "@strapi/plugin-graphql": "4.11.1", + "@strapi/plugin-i18n": "4.11.1", + "@strapi/plugin-sentry": "4.11.1", + "@strapi/plugin-users-permissions": "4.11.1", + "@strapi/provider-email-mailgun": "4.11.1", + "@strapi/provider-upload-aws-s3": "4.11.1", + "@strapi/provider-upload-cloudinary": "4.11.1", + "@strapi/strapi": "4.11.1", "better-sqlite3": "8.3.0", "lodash": "4.17.21", "mysql": "2.18.1", diff --git a/examples/kitchensink-ts/package.json b/examples/kitchensink-ts/package.json index 1d2e35b39a..95d82ff0ba 100644 --- a/examples/kitchensink-ts/package.json +++ b/examples/kitchensink-ts/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink-ts", "private": true, - "version": "4.11.0", + "version": "4.11.1", "description": "A Strapi application", "scripts": { "develop": "strapi develop", @@ -10,9 +10,9 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/plugin-i18n": "4.11.0", - "@strapi/plugin-users-permissions": "4.11.0", - "@strapi/strapi": "4.11.0", + "@strapi/plugin-i18n": "4.11.1", + "@strapi/plugin-users-permissions": "4.11.1", + "@strapi/strapi": "4.11.1", "better-sqlite3": "8.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/examples/kitchensink/package.json b/examples/kitchensink/package.json index 0c4d303c1e..040c1f3500 100644 --- a/examples/kitchensink/package.json +++ b/examples/kitchensink/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink", "private": true, - "version": "4.11.0", + "version": "4.11.1", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -12,10 +12,10 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/provider-email-mailgun": "4.11.0", - "@strapi/provider-upload-aws-s3": "4.11.0", - "@strapi/provider-upload-cloudinary": "4.11.0", - "@strapi/strapi": "4.11.0", + "@strapi/provider-email-mailgun": "4.11.1", + "@strapi/provider-upload-aws-s3": "4.11.1", + "@strapi/provider-upload-cloudinary": "4.11.1", + "@strapi/strapi": "4.11.1", "lodash": "4.17.21", "mysql": "2.18.1", "passport-google-oauth2": "0.2.0", diff --git a/lerna.json b/lerna.json index 436a6d5afb..64fe4509cd 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.11.0", + "version": "4.11.1", "packages": ["packages/*", "examples/*"], "npmClient": "yarn", "useWorkspaces": true, diff --git a/package.json b/package.json index 95c9404a1a..ea72c22151 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "lerna": "6.5.1", "lint-staged": "13.2.2", "lodash": "4.17.21", - "nx": "15.9.4", + "nx": "16.3.2", "plop": "2.7.6", "prettier": "2.8.4", "qs": "6.11.1", diff --git a/packages/admin-test-utils/package.json b/packages/admin-test-utils/package.json index b34da39c22..634fea66d6 100644 --- a/packages/admin-test-utils/package.json +++ b/packages/admin-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/admin-test-utils", - "version": "4.11.0", + "version": "4.11.1", "private": true, "description": "Test utilities for the Strapi administration panel", "license": "MIT", @@ -42,9 +42,9 @@ "whatwg-fetch": "3.6.2" }, "devDependencies": { - "eslint-config-custom": "4.11.0", + "eslint-config-custom": "4.11.1", "redux": "^4.2.1", - "tsconfig": "4.11.0" + "tsconfig": "4.11.1" }, "peerDependencies": { "redux": "^4.2.1" diff --git a/packages/cli/create-strapi-app/package.json b/packages/cli/create-strapi-app/package.json index 15f17e21e6..f1fb293a26 100644 --- a/packages/cli/create-strapi-app/package.json +++ b/packages/cli/create-strapi-app/package.json @@ -1,9 +1,9 @@ { "name": "create-strapi-app", - "version": "4.11.0", + "version": "4.11.1", "description": "Generate a new Strapi application.", "dependencies": { - "@strapi/generate-new": "4.11.0", + "@strapi/generate-new": "4.11.1", "commander": "8.3.0", "inquirer": "8.2.5" }, @@ -49,8 +49,8 @@ "lint": "run -T eslint ." }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/cli/create-strapi-starter/package.json b/packages/cli/create-strapi-starter/package.json index 8445a5c87e..e50518e2a3 100644 --- a/packages/cli/create-strapi-starter/package.json +++ b/packages/cli/create-strapi-starter/package.json @@ -1,6 +1,6 @@ { "name": "create-strapi-starter", - "version": "4.11.0", + "version": "4.11.1", "description": "Generate a new Strapi application.", "keywords": [ "create-strapi-starter", @@ -44,7 +44,7 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/generate-new": "4.11.0", + "@strapi/generate-new": "4.11.1", "chalk": "4.1.2", "ci-info": "3.8.0", "commander": "8.3.0", @@ -54,8 +54,8 @@ "ora": "5.4.1" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/core/admin/admin/src/StrapiApp.js b/packages/core/admin/admin/src/StrapiApp.js index 9484f7749b..bbe0ef2bad 100644 --- a/packages/core/admin/admin/src/StrapiApp.js +++ b/packages/core/admin/admin/src/StrapiApp.js @@ -1,27 +1,29 @@ import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import invariant from 'invariant'; +import isFunction from 'lodash/isFunction'; import merge from 'lodash/merge'; import pick from 'lodash/pick'; -import isFunction from 'lodash/isFunction'; -import invariant from 'invariant'; import { Helmet } from 'react-helmet'; -import { basename, createHook } from './core/utils'; -import configureStore from './core/store/configureStore'; -import { customFields, Plugin } from './core/apis'; -import App from './pages/App'; +import { BrowserRouter } from 'react-router-dom'; + import Logo from './assets/images/logo-strapi-2022.svg'; +import localStorageKey from './components/LanguageProvider/utils/localStorageKey'; import Providers from './components/Providers'; -import languageNativeNames from './translations/languageNativeNames'; +import { customFields, Plugin } from './core/apis'; +import configureStore from './core/store/configureStore'; +import { basename, createHook } from './core/utils'; import { INJECT_COLUMN_IN_TABLE, MUTATE_COLLECTION_TYPES_LINKS, MUTATE_EDIT_VIEW_LAYOUT, MUTATE_SINGLE_TYPES_LINKS, } from './exposedHooks'; -import injectionZones from './injectionZones'; import favicon from './favicon.png'; -import localStorageKey from './components/LanguageProvider/utils/localStorageKey'; +import injectionZones from './injectionZones'; +import App from './pages/App'; +import languageNativeNames from './translations/languageNativeNames'; class StrapiApp { constructor({ adminConfig, appPlugins, library, middlewares, reducers }) { diff --git a/packages/core/admin/admin/src/components/AuthenticatedApp/index.js b/packages/core/admin/admin/src/components/AuthenticatedApp/index.js index f8465ffcd4..a0bb170e27 100644 --- a/packages/core/admin/admin/src/components/AuthenticatedApp/index.js +++ b/packages/core/admin/admin/src/components/AuthenticatedApp/index.js @@ -1,18 +1,22 @@ -import React, { useState, useEffect } from 'react'; -// TODO: DS add loader +import React, { useEffect, useState } from 'react'; + import { + AppInfoProvider, auth, LoadingIndicatorPage, - AppInfoProvider, useGuidedTour, useNotification, } from '@strapi/helper-plugin'; -import { useQueries } from 'react-query'; import get from 'lodash/get'; +import { useQueries } from 'react-query'; +// TODO: DS add loader + import packageJSON from '../../../../package.json'; import { useConfigurations } from '../../hooks'; +import { getFullName, hashAdminUserEmail } from '../../utils'; import PluginsInitializer from '../PluginsInitializer'; import RBACProvider from '../RBACProvider'; + import { fetchAppInfo, fetchCurrentUserPermissions, @@ -20,7 +24,6 @@ import { fetchUserRoles, } from './utils/api'; import checkLatestStrapiVersion from './utils/checkLatestStrapiVersion'; -import { getFullName, hashAdminUserEmail } from '../../utils'; const strapiVersion = packageJSON.version; diff --git a/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js b/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js index 606782674e..c531079c6f 100644 --- a/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js +++ b/packages/core/admin/admin/src/components/AuthenticatedApp/tests/index.test.js @@ -1,21 +1,23 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { render, waitFor } from '@testing-library/react'; -import { QueryClientProvider, QueryClient } from 'react-query'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { useGuidedTour } from '@strapi/helper-plugin'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { render, waitFor } from '@testing-library/react'; +import PropTypes from 'prop-types'; import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; + +import AuthenticatedApp from '..'; +import packageJSON from '../../../../../package.json'; import { ConfigurationsContext } from '../../../contexts'; +import Theme from '../../Theme'; +import ThemeToggleProvider from '../../ThemeToggleProvider'; import { fetchAppInfo, fetchCurrentUserPermissions, fetchStrapiLatestRelease, fetchUserRoles, } from '../utils/api'; -import packageJSON from '../../../../../package.json'; -import Theme from '../../Theme'; -import ThemeToggleProvider from '../../ThemeToggleProvider'; -import AuthenticatedApp from '..'; const strapiVersion = packageJSON.version; diff --git a/packages/core/admin/admin/src/components/AuthenticatedApp/utils/api.js b/packages/core/admin/admin/src/components/AuthenticatedApp/utils/api.js index 03479df8ad..1b5845b421 100644 --- a/packages/core/admin/admin/src/components/AuthenticatedApp/utils/api.js +++ b/packages/core/admin/admin/src/components/AuthenticatedApp/utils/api.js @@ -1,7 +1,9 @@ import { getFetchClient } from '@strapi/helper-plugin'; -import checkLatestStrapiVersion from './checkLatestStrapiVersion'; + import packageJSON from '../../../../../package.json'; +import checkLatestStrapiVersion from './checkLatestStrapiVersion'; + const strapiVersion = packageJSON.version; const showUpdateNotif = !JSON.parse(localStorage.getItem('STRAPI_UPDATE_NOTIF')); const { get } = getFetchClient(); diff --git a/packages/core/admin/admin/src/components/ConfigurationsProvider/index.js b/packages/core/admin/admin/src/components/ConfigurationsProvider/index.js index ce94ed79c2..e6a4963d00 100644 --- a/packages/core/admin/admin/src/components/ConfigurationsProvider/index.js +++ b/packages/core/admin/admin/src/components/ConfigurationsProvider/index.js @@ -1,6 +1,9 @@ import React, { useCallback, useMemo, useReducer } from 'react'; + import PropTypes from 'prop-types'; + import { ConfigurationsContext } from '../../contexts'; + import reducer, { initialState } from './reducer'; const ConfigurationsProvider = ({ diff --git a/packages/core/admin/admin/src/components/ConfigurationsProvider/tests/index.test.js b/packages/core/admin/admin/src/components/ConfigurationsProvider/tests/index.test.js index d28f7dd8d1..1b3aa674c3 100644 --- a/packages/core/admin/admin/src/components/ConfigurationsProvider/tests/index.test.js +++ b/packages/core/admin/admin/src/components/ConfigurationsProvider/tests/index.test.js @@ -1,7 +1,9 @@ import React from 'react'; -import { render, fireEvent, screen } from '@testing-library/react'; -import ConfigurationsProvider from '../index'; + +import { fireEvent, render, screen } from '@testing-library/react'; + import { useConfigurations } from '../../../hooks'; +import ConfigurationsProvider from '../index'; describe('ConfigurationsProvider', () => { it('should not crash', () => { diff --git a/packages/core/admin/admin/src/components/DragLayer/DragLayer.js b/packages/core/admin/admin/src/components/DragLayer/DragLayer.js index 6a4e1ea60e..e05706f9e6 100644 --- a/packages/core/admin/admin/src/components/DragLayer/DragLayer.js +++ b/packages/core/admin/admin/src/components/DragLayer/DragLayer.js @@ -1,7 +1,8 @@ import * as React from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useDragLayer } from 'react-dnd'; -import { Box } from '@strapi/design-system'; function getStyle(initialOffset, currentOffset, mouseOffset) { if (!initialOffset || !currentOffset) { diff --git a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Step.js b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Step.js index ea31ed55c2..c4bb9f24b4 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Step.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Step.js @@ -1,11 +1,13 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; -import { Typography, Box, Flex } from '@strapi/design-system'; -import StepNumber from '../../Stepper/StepNumber'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + +import { IS_ACTIVE, IS_DONE, IS_NOT_DONE } from '../../constants'; import StepLine from '../../Stepper/StepLine'; -import { IS_DONE, IS_ACTIVE, IS_NOT_DONE } from '../../constants'; +import StepNumber from '../../Stepper/StepNumber'; const StepHomepage = ({ type, title, number, content, hasLine }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Stepper.js b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Stepper.js index 9c53587462..bbf41646d4 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Stepper.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/Stepper.js @@ -1,8 +1,11 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + +import { IS_ACTIVE, IS_DONE, IS_NOT_DONE } from '../../constants'; + import StepHomepage from './Step'; -import { IS_DONE, IS_ACTIVE, IS_NOT_DONE } from '../../constants'; const getType = (activeSectionIndex, index) => { if (activeSectionIndex === -1) { diff --git a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/tests/Stepper.test.js b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/tests/Stepper.test.js index 3a0005fb77..c46b2db290 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/tests/Stepper.test.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Homepage/components/tests/Stepper.test.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import Stepper from '../Stepper'; const sections = [ diff --git a/packages/core/admin/admin/src/components/GuidedTour/Homepage/index.js b/packages/core/admin/admin/src/components/GuidedTour/Homepage/index.js index ed38c93d6c..000f07de68 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Homepage/index.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Homepage/index.js @@ -1,11 +1,14 @@ import React from 'react'; -import { useGuidedTour, useTracking, LinkButton } from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; -import { Flex, Box, Typography, Button } from '@strapi/design-system'; + +import { Box, Button, Flex, Typography } from '@strapi/design-system'; +import { LinkButton, useGuidedTour, useTracking } from '@strapi/helper-plugin'; import { ArrowRight } from '@strapi/icons'; -import StepperHomepage from './components/Stepper'; +import { useIntl } from 'react-intl'; + import layout from '../layout'; +import StepperHomepage from './components/Stepper'; + const GuidedTourHomepage = () => { const { guidedTourState, setSkipped } = useGuidedTour(); const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/components/GuidedTour/Homepage/tests/index.test.js b/packages/core/admin/admin/src/components/GuidedTour/Homepage/tests/index.test.js index c5161a2ece..bb10aa99e0 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Homepage/tests/index.test.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Homepage/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider, useGuidedTour } from '@strapi/helper-plugin'; import { render, screen } from '@testing-library/react'; -import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; -import { useGuidedTour, TrackingProvider } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { Router } from 'react-router-dom'; + import GuidedTourHomepage from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Content.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Content.js index 69c01f1760..62828b2481 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Content.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Content.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Flex, Box, Typography } from '@strapi/design-system'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const LiStyled = styled.li` list-style: disc; diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Modal.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Modal.js index 561cf9ed39..d9c3be542b 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Modal.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Modal.js @@ -1,10 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; + +import { Box, Button, Flex, FocusTrap, IconButton, Portal } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { Cross } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { pxToRem } from '@strapi/helper-plugin'; -import { Portal, FocusTrap, Flex, Box, IconButton, Button } from '@strapi/design-system'; -import { Cross } from '@strapi/icons'; +import styled from 'styled-components'; const ModalWrapper = styled(Flex)` position: fixed; diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/StepNumberWithPadding.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/StepNumberWithPadding.js index 27cf9bc9b2..393262714f 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/StepNumberWithPadding.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/StepNumberWithPadding.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import StepNumber from '../../Stepper/StepNumber'; const StepNumberWithPadding = ({ number, last, type }) => ( diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Stepper.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Stepper.js index b24e2533cd..4d63b4bc95 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Stepper.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/components/Stepper.js @@ -1,13 +1,16 @@ import React from 'react'; + +import { Box, Button, Flex, Typography } from '@strapi/design-system'; +import { LinkButton, pxToRem } from '@strapi/helper-plugin'; +import { ArrowRight } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { pxToRem, LinkButton } from '@strapi/helper-plugin'; -import { Typography, Button, Box, Flex } from '@strapi/design-system'; -import { ArrowRight } from '@strapi/icons'; -import Content from './Content'; + +import { IS_ACTIVE, IS_DONE } from '../../constants'; import StepLine from '../../Stepper/StepLine'; + +import Content from './Content'; import StepNumberWithPadding from './StepNumberWithPadding'; -import { IS_DONE, IS_ACTIVE } from '../../constants'; const StepperModal = ({ title, diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/index.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/index.js index d238a52533..5d2e4b1846 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/index.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/index.js @@ -1,10 +1,13 @@ -import React, { useEffect, useState, useReducer } from 'react'; -import at from 'lodash/at'; +import React, { useEffect, useReducer, useState } from 'react'; + import { useGuidedTour, useTracking } from '@strapi/helper-plugin'; +import at from 'lodash/at'; + import layout from '../layout'; + import Modal from './components/Modal'; -import reducer, { initialState } from './reducer'; import StepperModal from './components/Stepper'; +import reducer, { initialState } from './reducer'; const GuidedTourModal = () => { const { diff --git a/packages/core/admin/admin/src/components/GuidedTour/Modal/tests/index.test.js b/packages/core/admin/admin/src/components/GuidedTour/Modal/tests/index.test.js index 2ab784b220..5fe0529002 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Modal/tests/index.test.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Modal/tests/index.test.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { useGuidedTour } from '@strapi/helper-plugin'; import { render, screen } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { useGuidedTour } from '@strapi/helper-plugin'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + import Theme from '../../../Theme'; import ThemeToggleProvider from '../../../ThemeToggleProvider'; import GuidedTourModal from '../index'; diff --git a/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepLine.js b/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepLine.js index 715dbc857c..329142fbad 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepLine.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepLine.js @@ -1,8 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { pxToRem } from '@strapi/helper-plugin'; + import { Box } from '@strapi/design-system'; -import { IS_DONE, IS_ACTIVE, IS_NOT_DONE } from '../constants'; +import { pxToRem } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + +import { IS_ACTIVE, IS_DONE, IS_NOT_DONE } from '../constants'; const StepLine = ({ type, ...props }) => { return ( diff --git a/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepNumber.js b/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepNumber.js index 67306c50a3..e2ca6823a4 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepNumber.js +++ b/packages/core/admin/admin/src/components/GuidedTour/Stepper/StepNumber.js @@ -1,9 +1,11 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { pxToRem } from '@strapi/helper-plugin'; + import { Flex, Icon, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; import { Check } from '@strapi/icons'; -import { IS_DONE, IS_ACTIVE, IS_NOT_DONE } from '../constants'; +import PropTypes from 'prop-types'; + +import { IS_ACTIVE, IS_DONE, IS_NOT_DONE } from '../constants'; const StepNumber = ({ type, number }) => { if (type === IS_DONE) { diff --git a/packages/core/admin/admin/src/components/GuidedTour/index.js b/packages/core/admin/admin/src/components/GuidedTour/index.js index cab615509c..22a0c3e87a 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/index.js +++ b/packages/core/admin/admin/src/components/GuidedTour/index.js @@ -1,12 +1,14 @@ import React, { useReducer } from 'react'; -import PropTypes from 'prop-types'; -import get from 'lodash/get'; + import { GuidedTourProvider } from '@strapi/helper-plugin'; -import persistStateToLocaleStorage from './utils/persistStateToLocaleStorage'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; + +import init from './init'; +import reducer, { initialState } from './reducer'; import arePreviousSectionsDone from './utils/arePreviousSectionsDone'; import arePreviousStepsDone from './utils/arePreviousStepsDone'; -import reducer, { initialState } from './reducer'; -import init from './init'; +import persistStateToLocaleStorage from './utils/persistStateToLocaleStorage'; const GuidedTour = ({ children }) => { const [{ currentStep, guidedTourState, isGuidedTourVisible, isSkipped }, dispatch] = useReducer( diff --git a/packages/core/admin/admin/src/components/GuidedTour/init.js b/packages/core/admin/admin/src/components/GuidedTour/init.js index 4aadedce0b..82ec4f3e7b 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/init.js +++ b/packages/core/admin/admin/src/components/GuidedTour/init.js @@ -1,4 +1,5 @@ import set from 'lodash/set'; + import persistStateToLocaleStorage, { COMPLETED_STEPS, CURRENT_STEP, diff --git a/packages/core/admin/admin/src/components/GuidedTour/tests/index.test.js b/packages/core/admin/admin/src/components/GuidedTour/tests/index.test.js index d4aae9d8c6..3eb554a837 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/tests/index.test.js +++ b/packages/core/admin/admin/src/components/GuidedTour/tests/index.test.js @@ -1,6 +1,8 @@ import React, { useEffect } from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; + import { useGuidedTour } from '@strapi/helper-plugin/'; +import { fireEvent, render, screen } from '@testing-library/react'; + import GuidedTour from '../index'; describe('GuidedTour', () => { diff --git a/packages/core/admin/admin/src/components/GuidedTour/tests/init.test.js b/packages/core/admin/admin/src/components/GuidedTour/tests/init.test.js index ba6eeccae2..f65924af1d 100644 --- a/packages/core/admin/admin/src/components/GuidedTour/tests/init.test.js +++ b/packages/core/admin/admin/src/components/GuidedTour/tests/init.test.js @@ -1,4 +1,5 @@ import cloneDeep from 'lodash/cloneDeep'; + import init from '../init'; import { initialState } from '../reducer'; diff --git a/packages/core/admin/admin/src/components/LanguageProvider/index.js b/packages/core/admin/admin/src/components/LanguageProvider/index.js index 25d19c819c..1d069e5dfe 100644 --- a/packages/core/admin/admin/src/components/LanguageProvider/index.js +++ b/packages/core/admin/admin/src/components/LanguageProvider/index.js @@ -7,13 +7,16 @@ */ import React, { useEffect, useReducer } from 'react'; + +import defaultsDeep from 'lodash/defaultsDeep'; import PropTypes from 'prop-types'; import { IntlProvider } from 'react-intl'; -import defaultsDeep from 'lodash/defaultsDeep'; + import LocalesProvider from '../LocalesProvider'; -import localStorageKey from './utils/localStorageKey'; + import init from './init'; import reducer, { initialState } from './reducer'; +import localStorageKey from './utils/localStorageKey'; const LanguageProvider = ({ children, localeNames, messages }) => { const [{ locale }, dispatch] = useReducer(reducer, initialState, () => init(localeNames)); diff --git a/packages/core/admin/admin/src/components/LanguageProvider/tests/index.test.js b/packages/core/admin/admin/src/components/LanguageProvider/tests/index.test.js index cbb7dbea59..de659b72f0 100644 --- a/packages/core/admin/admin/src/components/LanguageProvider/tests/index.test.js +++ b/packages/core/admin/admin/src/components/LanguageProvider/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; + +import { fireEvent, render, screen } from '@testing-library/react'; import { useIntl } from 'react-intl'; -import useLocalesProvider from '../../LocalesProvider/useLocalesProvider'; -import LanguageProvider from '../index'; + import en from '../../../translations/en.json'; import fr from '../../../translations/fr.json'; +import useLocalesProvider from '../../LocalesProvider/useLocalesProvider'; +import LanguageProvider from '../index'; const messages = { en, fr }; const localeNames = { en: 'English', fr: 'Français' }; diff --git a/packages/core/admin/admin/src/components/LeftMenu/index.js b/packages/core/admin/admin/src/components/LeftMenu/index.js index daf5466c89..0210176bdb 100644 --- a/packages/core/admin/admin/src/components/LeftMenu/index.js +++ b/packages/core/admin/admin/src/components/LeftMenu/index.js @@ -1,27 +1,29 @@ import React, { useRef, useState } from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { NavLink as RouterNavLink, useLocation, useHistory } from 'react-router-dom'; -import { Divider, FocusTrap, Box, Typography, Flex } from '@strapi/design-system'; + +import { Box, Divider, Flex, FocusTrap, Typography } from '@strapi/design-system'; import { MainNav, NavBrand, - NavSections, - NavLink, - NavSection, - NavUser, NavCondense, NavFooter, + NavLink, + NavSection, + NavSections, + NavUser, } from '@strapi/design-system/v2'; -import { Write, Exit } from '@strapi/icons'; import { auth, - usePersistentState, - useAppInfo, - useTracking, getFetchClient, + useAppInfo, + usePersistentState, + useTracking, } from '@strapi/helper-plugin'; +import { Exit, Write } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { NavLink as RouterNavLink, useHistory, useLocation } from 'react-router-dom'; +import styled from 'styled-components'; + import { useConfigurations } from '../../hooks'; const LinkUserWrapper = styled(Box)` diff --git a/packages/core/admin/admin/src/components/LocalesProvider/index.js b/packages/core/admin/admin/src/components/LocalesProvider/index.js index 98ee3c4100..32a7fa0e91 100644 --- a/packages/core/admin/admin/src/components/LocalesProvider/index.js +++ b/packages/core/admin/admin/src/components/LocalesProvider/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import LocalesProviderContext from './context'; const LocalesProvider = ({ changeLocale, children, localeNames }) => { diff --git a/packages/core/admin/admin/src/components/LocalesProvider/tests/index.test.js b/packages/core/admin/admin/src/components/LocalesProvider/tests/index.test.js index c3a6853e28..7eb2a00001 100644 --- a/packages/core/admin/admin/src/components/LocalesProvider/tests/index.test.js +++ b/packages/core/admin/admin/src/components/LocalesProvider/tests/index.test.js @@ -1,5 +1,7 @@ import React from 'react'; + import { render } from '@testing-library/react'; + import LocalesProvider from '../index'; describe('LocalesProvider', () => { diff --git a/packages/core/admin/admin/src/components/LocalesProvider/useLocalesProvider.js b/packages/core/admin/admin/src/components/LocalesProvider/useLocalesProvider.js index 1c0e418fb9..524bd9b98d 100644 --- a/packages/core/admin/admin/src/components/LocalesProvider/useLocalesProvider.js +++ b/packages/core/admin/admin/src/components/LocalesProvider/useLocalesProvider.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import LocalesProviderContext from './context'; const useLocalesProvider = () => { diff --git a/packages/core/admin/admin/src/components/PluginsInitializer/index.js b/packages/core/admin/admin/src/components/PluginsInitializer/index.js index bd3a1b6c74..51a3cb904a 100644 --- a/packages/core/admin/admin/src/components/PluginsInitializer/index.js +++ b/packages/core/admin/admin/src/components/PluginsInitializer/index.js @@ -1,5 +1,7 @@ import React, { useReducer, useRef } from 'react'; + import { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin'; + import Admin from '../../pages/Admin'; import init from './init'; diff --git a/packages/core/admin/admin/src/components/PluginsInitializer/tests/index.test.js b/packages/core/admin/admin/src/components/PluginsInitializer/tests/index.test.js index f9909a3e63..0109608db9 100644 --- a/packages/core/admin/admin/src/components/PluginsInitializer/tests/index.test.js +++ b/packages/core/admin/admin/src/components/PluginsInitializer/tests/index.test.js @@ -1,6 +1,8 @@ import React from 'react'; + import { StrapiAppProvider } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; + import PluginsInitializer from '../index'; jest.mock('../../../pages/Admin', () => () => { diff --git a/packages/core/admin/admin/src/components/PrivateRoute/index.js b/packages/core/admin/admin/src/components/PrivateRoute/index.js index 9f99bff0e9..e09b1a56ce 100644 --- a/packages/core/admin/admin/src/components/PrivateRoute/index.js +++ b/packages/core/admin/admin/src/components/PrivateRoute/index.js @@ -8,9 +8,10 @@ */ import React, { memo } from 'react'; -import { Redirect, Route, useLocation } from 'react-router-dom'; -import PropTypes from 'prop-types'; + import { auth } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { Redirect, Route, useLocation } from 'react-router-dom'; /* eslint-disable react/jsx-curly-newline */ diff --git a/packages/core/admin/admin/src/components/PrivateRoute/tests/index.test.js b/packages/core/admin/admin/src/components/PrivateRoute/tests/index.test.js index ac06f7b7c6..4ce68d512c 100644 --- a/packages/core/admin/admin/src/components/PrivateRoute/tests/index.test.js +++ b/packages/core/admin/admin/src/components/PrivateRoute/tests/index.test.js @@ -1,9 +1,10 @@ import React from 'react'; -import { Router, Route, Switch } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { act, render, screen, waitFor } from '@testing-library/react'; import { auth } from '@strapi/helper-plugin'; +import { act, render, screen, waitFor } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; +import { Route, Router, Switch } from 'react-router-dom'; + import PrivateRoute from '..'; const ProtectedPage = () => { diff --git a/packages/core/admin/admin/src/components/Providers/index.js b/packages/core/admin/admin/src/components/Providers/index.js index 9bd08c6213..412891cbc7 100644 --- a/packages/core/admin/admin/src/components/Providers/index.js +++ b/packages/core/admin/admin/src/components/Providers/index.js @@ -1,21 +1,23 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { QueryClientProvider, QueryClient } from 'react-query'; + import { - LibraryProvider, - CustomFieldsProvider, - StrapiAppProvider, AutoReloadOverlayBlockerProvider, - OverlayBlockerProvider, + CustomFieldsProvider, + LibraryProvider, NotificationsProvider, + OverlayBlockerProvider, + StrapiAppProvider, } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { Provider } from 'react-redux'; + import { AdminContext } from '../../contexts'; import ConfigurationsProvider from '../ConfigurationsProvider'; -import LanguageProvider from '../LanguageProvider'; import GuidedTour from '../GuidedTour'; -import ThemeToggleProvider from '../ThemeToggleProvider'; +import LanguageProvider from '../LanguageProvider'; import Theme from '../Theme'; +import ThemeToggleProvider from '../ThemeToggleProvider'; const queryClient = new QueryClient({ defaultOptions: { diff --git a/packages/core/admin/admin/src/components/RBACProvider/index.js b/packages/core/admin/admin/src/components/RBACProvider/index.js index 15ec3ed7e8..9d37cf89d4 100644 --- a/packages/core/admin/admin/src/components/RBACProvider/index.js +++ b/packages/core/admin/admin/src/components/RBACProvider/index.js @@ -1,7 +1,9 @@ import React, { useEffect } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; + import { LoadingIndicatorPage, RBACProviderContext } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; +import { useDispatch, useSelector } from 'react-redux'; + import { resetStore, setPermissions } from './actions'; const RBACProvider = ({ children, permissions, refetchPermissions }) => { diff --git a/packages/core/admin/admin/src/components/RBACProvider/tests/reducer.test.js b/packages/core/admin/admin/src/components/RBACProvider/tests/reducer.test.js index 0654a3baa8..bc50e42559 100644 --- a/packages/core/admin/admin/src/components/RBACProvider/tests/reducer.test.js +++ b/packages/core/admin/admin/src/components/RBACProvider/tests/reducer.test.js @@ -1,6 +1,6 @@ import { fixtures } from '@strapi/admin-test-utils'; -import { setPermissions, resetStore } from '../actions'; +import { resetStore, setPermissions } from '../actions'; import rbacProviderReducer, { initialState } from '../reducer'; describe('rbacProviderReducer', () => { diff --git a/packages/core/admin/admin/src/components/Theme/index.js b/packages/core/admin/admin/src/components/Theme/index.js index 9788a82d1b..3792d4e854 100644 --- a/packages/core/admin/admin/src/components/Theme/index.js +++ b/packages/core/admin/admin/src/components/Theme/index.js @@ -1,7 +1,9 @@ import React from 'react'; + import { DesignSystemProvider } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import { useThemeToggle } from '../../hooks'; import GlobalStyle from '../GlobalStyle'; diff --git a/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js b/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js index 65482a77a0..76adccec1a 100644 --- a/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js +++ b/packages/core/admin/admin/src/components/ThemeToggleProvider/index.js @@ -4,8 +4,10 @@ * */ -import React, { useState, useMemo, useCallback } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; + import PropTypes from 'prop-types'; + import { ThemeToggleContext } from '../../contexts'; const THEME_KEY = 'STRAPI_THEME'; diff --git a/packages/core/admin/admin/src/components/UnauthenticatedLogo/index.js b/packages/core/admin/admin/src/components/UnauthenticatedLogo/index.js index 0f32bdf9be..f89a5b72b3 100644 --- a/packages/core/admin/admin/src/components/UnauthenticatedLogo/index.js +++ b/packages/core/admin/admin/src/components/UnauthenticatedLogo/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import styled from 'styled-components'; + import { useConfigurations } from '../../hooks'; const Img = styled.img` diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js index 73fca489e4..ee2755fe0c 100644 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js +++ b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/Filters.js @@ -1,9 +1,10 @@ import React, { useRef, useState } from 'react'; + +import { Box, Button } from '@strapi/design-system'; +import { FilterListURLQuery, FilterPopoverURLQuery, useTracking } from '@strapi/helper-plugin'; +import { Filter } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Box, Button } from '@strapi/design-system'; -import { Filter } from '@strapi/icons'; -import { FilterListURLQuery, FilterPopoverURLQuery, useTracking } from '@strapi/helper-plugin'; const Filters = ({ displayedFilters }) => { const [isVisible, setIsVisible] = useState(false); diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/hooks/useAllowedAttributes.js b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/hooks/useAllowedAttributes.js index edfe341101..05068e0460 100644 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/hooks/useAllowedAttributes.js +++ b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/hooks/useAllowedAttributes.js @@ -1,5 +1,5 @@ +import { findMatchingPermissions, useRBACProvider } from '@strapi/helper-plugin'; import get from 'lodash/get'; -import { useRBACProvider, findMatchingPermissions } from '@strapi/helper-plugin'; const NOT_ALLOWED_FILTERS = ['json', 'component', 'media', 'richtext', 'dynamiczone', 'password']; const TIMESTAMPS = ['createdAt', 'updatedAt']; diff --git a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js index 48f922124d..b34e5a1d33 100644 --- a/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js +++ b/packages/core/admin/admin/src/content-manager/components/AttributeFilter/index.js @@ -1,8 +1,10 @@ import React from 'react'; + import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import useAllowedAttributes from './hooks/useAllowedAttributes'; + import Filters from './Filters'; +import useAllowedAttributes from './hooks/useAllowedAttributes'; const AttributeFilter = ({ contentType, slug, metadatas }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js b/packages/core/admin/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js index 6ec515527d..d1425f2836 100644 --- a/packages/core/admin/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +++ b/packages/core/admin/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js @@ -1,27 +1,23 @@ import { memo, useCallback, useEffect, useMemo, useRef } from 'react'; -import { useQueryClient } from 'react-query'; -import { useHistory } from 'react-router-dom'; -import axios from 'axios'; -import get from 'lodash/get'; + import { - useTracking, - useNotification, - useQueryParams, - formatContentTypeData, contentManagementUtilRemoveFieldsFromData, - useGuidedTour, + formatContentTypeData, useAPIErrorHandler, useFetchClient, + useGuidedTour, + useNotification, + useQueryParams, + useTracking, } from '@strapi/helper-plugin'; -import { useSelector, useDispatch } from 'react-redux'; -import PropTypes from 'prop-types'; +import axios from 'axios'; +import get from 'lodash/get'; import isEqual from 'lodash/isEqual'; -import { - createDefaultForm, - getTrad, - getRequestUrl, - removePasswordFieldsFromData, -} from '../../utils'; +import PropTypes from 'prop-types'; +import { useQueryClient } from 'react-query'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; + import { useFindRedirectionLink } from '../../hooks'; import { getData, @@ -33,6 +29,12 @@ import { submitSucceeded, } from '../../sharedReducers/crudReducer/actions'; import selectCrudReducer from '../../sharedReducers/crudReducer/selectors'; +import { + createDefaultForm, + getRequestUrl, + getTrad, + removePasswordFieldsFromData, +} from '../../utils'; // This container is used to handle the CRUD const CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }) => { diff --git a/packages/core/admin/admin/src/content-manager/components/ComponentIcon/ComponentIcon.js b/packages/core/admin/admin/src/content-manager/components/ComponentIcon/ComponentIcon.js index 21ceb566f9..620fee625f 100644 --- a/packages/core/admin/admin/src/content-manager/components/ComponentIcon/ComponentIcon.js +++ b/packages/core/admin/admin/src/content-manager/components/ComponentIcon/ComponentIcon.js @@ -1,7 +1,8 @@ -import PropTypes from 'prop-types'; import React from 'react'; import { Flex, Icon } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import { COMPONENT_ICONS } from './constants'; export function ComponentIcon({ showBackground = true, size = 'M', icon }) { diff --git a/packages/core/admin/admin/src/content-manager/components/ComponentInitializer/index.js b/packages/core/admin/admin/src/content-manager/components/ComponentInitializer/index.js index d3a0394567..bd9777da58 100644 --- a/packages/core/admin/admin/src/content-manager/components/ComponentInitializer/index.js +++ b/packages/core/admin/admin/src/content-manager/components/ComponentInitializer/index.js @@ -1,10 +1,12 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { PlusCircle } from '@strapi/icons'; + import { Box, Flex, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; +import { PlusCircle } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { getTrad } from '../../utils'; const IconWrapper = styled.span` diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/index.js index 7ffe9c9336..868c652e28 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/index.js @@ -1,13 +1,15 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + import { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; import { Check, ExclamationMarkCircle, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useSelector } from 'react-redux'; -import { useTracking } from '@strapi/helper-plugin'; + +import { listViewDomain } from '../../../pages/ListView/selectors'; import { getTrad } from '../../../utils'; import InjectionZoneList from '../../InjectionZoneList'; -import { listViewDomain } from '../../../pages/ListView/selectors'; const ConfirmBulkActionDialog = ({ onToggleDialog, isOpen, dialogBody, endAction }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/tests/index.test.js index eeb623a564..5891532d56 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/BulkActionsBar/tests/index.test.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render, screen, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; + import BulkActionsBar from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js index 3e94f5d83c..69797d5ea4 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/CellValue.js @@ -1,7 +1,7 @@ +import parseISO from 'date-fns/parseISO'; +import toString from 'lodash/toString'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import toString from 'lodash/toString'; -import parseISO from 'date-fns/parseISO'; const CellValue = ({ type, value }) => { const { formatDate, formatTime, formatNumber } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js index 6dbd43a84c..cd18ee6324 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Flex, Typography } from '@strapi/design-system'; const Wrapper = styled(Flex)` position: relative; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js index f6c614184a..c174940c82 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js @@ -1,7 +1,8 @@ -import PropTypes from 'prop-types'; import React from 'react'; + import { Avatar, Tooltip } from '@strapi/design-system'; import { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import FileWrapper from './FileWrapper'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js index a3baf012c9..e4481d7018 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { AvatarGroup } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import Media from './Media'; import FileWrapper from './Media/FileWrapper'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/PublicationState.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/PublicationState.js index 596cf694d6..9a204cd173 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/PublicationState.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/PublicationState.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Status, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Status, Typography } from '@strapi/design-system'; import { getTrad } from '../../../../utils'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/tests/PublicationState.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/tests/PublicationState.test.js index e0c00c4943..c9925dd5c0 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/tests/PublicationState.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/PublicationState/tests/PublicationState.test.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { PublicationState } from '..'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js index 04b70824c6..2bd7ac1d11 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js @@ -1,3 +1,5 @@ +import React, { useMemo, useState } from 'react'; + import { Badge, Box, @@ -10,10 +12,10 @@ import { } from '@strapi/design-system'; import { stopPropagation, useFetchClient } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import React, { useMemo, useState } from 'react'; import { useIntl } from 'react-intl'; import { useQuery } from 'react-query'; import styled from 'styled-components'; + import { getRequestUrl, getTrad } from '../../../../utils'; import CellValue from '../CellValue'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/tests/index.test.js index 80941050c6..a4f688531c 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/tests/index.test.js @@ -1,10 +1,11 @@ import React from 'react'; -import { render, fireEvent, screen, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { useFetchClient } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import RelationMultiple from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js index 1c3f6bfcfb..537e7a2180 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js @@ -1,7 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import styled from 'styled-components'; + import CellValue from '../CellValue'; const TypographyMaxWidth = styled(Typography)` diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/tests/index.test.js index 7551f0ff0c..f3b3cd918b 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/tests/index.test.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import RelationSingle from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js index 431a33cf98..d02ffb4e43 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/RepeatableComponent/index.js @@ -1,9 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { Badge, Box, Typography, SimpleMenu, MenuItem } from '@strapi/design-system'; + +import { Badge, Box, MenuItem, SimpleMenu, Typography } from '@strapi/design-system'; import { stopPropagation } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import CellValue from '../CellValue'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js index af31e23216..34473b02b6 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/SingleComponent/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Tooltip, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Tooltip, Typography } from '@strapi/design-system'; import CellValue from '../CellValue'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/index.js index 99c6f28a0f..2ef15275b9 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/index.js @@ -1,14 +1,16 @@ import React from 'react'; + +import { Tooltip, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Typography, Tooltip } from '@strapi/design-system'; + +import CellValue from './CellValue'; import Media from './Media'; import MultipleMedias from './MultipleMedias'; import RelationMultiple from './RelationMultiple'; import RelationSingle from './RelationSingle'; import RepeatableComponent from './RepeatableComponent'; import SingleComponent from './SingleComponent'; -import CellValue from './CellValue'; import hasContent from './utils/hasContent'; import isSingleRelation from './utils/isSingleRelation'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/tests/CellValue.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/tests/CellValue.test.js index e3fb485eb8..35a2dcb9c6 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/tests/CellValue.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/tests/CellValue.test.js @@ -1,4 +1,5 @@ import React from 'react'; + import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js index 8e5c097051..228fe734ae 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/utils/hasContent.js @@ -1,9 +1,10 @@ import isEmpty from 'lodash/isEmpty'; import isNumber from 'lodash/isNumber'; -import isSingleRelation from './isSingleRelation'; import isFieldTypeNumber from '../../../../utils/isFieldTypeNumber'; +import isSingleRelation from './isSingleRelation'; + export default function hasContent(type, content, metadatas, fieldSchema) { if (type === 'component') { const { diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/ConfirmDialogDelete/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/ConfirmDialogDelete/index.js index 5514cba8e0..9343167c1f 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/ConfirmDialogDelete/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/ConfirmDialogDelete/index.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system'; +import { ExclamationMarkCircle, Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Dialog, DialogBody, DialogFooter, Flex, Typography, Button } from '@strapi/design-system'; -import { ExclamationMarkCircle, Trash } from '@strapi/icons'; + import InjectionZoneList from '../../InjectionZoneList'; const ConfirmDialogDelete = ({ isConfirmButtonLoading, isOpen, onToggleDialog, onConfirm }) => { diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/TableRows/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/TableRows/index.js index 18b97091d4..89fa6dd133 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/TableRows/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/TableRows/index.js @@ -1,18 +1,14 @@ import React from 'react'; + +import { BaseCheckbox, Box, Flex, IconButton, Tbody, Td, Tr } from '@strapi/design-system'; +import { onRowClick, stopPropagation, useTracking } from '@strapi/helper-plugin'; +import { Duplicate, Pencil, Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; -import { Link, useHistory } from 'react-router-dom'; import { useIntl } from 'react-intl'; - -import { BaseCheckbox, Box, IconButton, Tbody, Td, Tr, Flex } from '@strapi/design-system'; - -import { Trash, Duplicate, Pencil } from '@strapi/icons'; - -import { useTracking, stopPropagation, onRowClick } from '@strapi/helper-plugin'; - -import { usePluginsQueryParams } from '../../../hooks'; +import { Link, useHistory } from 'react-router-dom'; import { getFullName } from '../../../../utils'; - +import { usePluginsQueryParams } from '../../../hooks'; import CellContent from '../CellContent'; const TableRows = ({ diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js index 0512186fac..6641085e93 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/index.js @@ -1,17 +1,19 @@ import React, { useMemo } from 'react'; + +import { DynamicTable as Table, useStrapiApp } from '@strapi/helper-plugin'; +import getReviewWorkflowsColumns from 'ee_else_ce/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { DynamicTable as Table, useStrapiApp } from '@strapi/helper-plugin'; import { useSelector } from 'react-redux'; -import getReviewWorkflowsColumns from 'ee_else_ce/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns'; import { INJECT_COLUMN_IN_TABLE } from '../../../exposedHooks'; import { selectDisplayedHeaders } from '../../pages/ListView/selectors'; import { getTrad } from '../../utils'; -import TableRows from './TableRows'; -import ConfirmDialogDelete from './ConfirmDialogDelete'; -import { PublicationState } from './CellContent/PublicationState/PublicationState'; + import BulkActionsBar from './BulkActionsBar'; +import { PublicationState } from './CellContent/PublicationState/PublicationState'; +import ConfirmDialogDelete from './ConfirmDialogDelete'; +import TableRows from './TableRows'; const DynamicTable = ({ canCreate, diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js index 9f0860eaba..2f5f27cee4 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js @@ -5,10 +5,11 @@ */ import React from 'react'; + +import { BaseButton, Flex, Typography } from '@strapi/design-system'; +import { PlusCircle } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { PlusCircle } from '@strapi/icons'; -import { BaseButton, Flex, Typography } from '@strapi/design-system'; export const AddComponentButton = ({ hasError, isDisabled, isOpen, children, onClick }) => { return ( diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCard.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCard.js index e3bfc6c1fc..c84f74e7fc 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCard.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCard.js @@ -5,12 +5,12 @@ */ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box, Typography, Flex } from '@strapi/design-system'; -import { pxToRem } from '@strapi/helper-plugin'; - import { ComponentIcon } from '../../ComponentIcon'; const ComponentBox = styled(Box)` diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js index 0d3c4c3287..44cba930b5 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js @@ -1,16 +1,17 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Accordion, - AccordionToggle, AccordionContent, + AccordionToggle, Box, Flex, Typography, } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; -import styled from 'styled-components'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { ComponentIcon } from '../../ComponentIcon'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js index 1eff918632..d96a56678d 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js @@ -1,7 +1,8 @@ import React, { useEffect, useState } from 'react'; + +import { Box, Flex, KeyboardNavigable, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { KeyboardNavigable, Box, Flex, Typography } from '@strapi/design-system'; import { getTrad } from '../../../utils'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js index 80f7fb9d88..f714b3e880 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js @@ -1,28 +1,27 @@ import React, { useEffect, useMemo, useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import get from 'lodash/get'; -import { getEmptyImage } from 'react-dnd-html5-backend'; import { Accordion, - AccordionToggle, AccordionContent, - IconButton, + AccordionToggle, Box, Flex, + IconButton, VisuallyHidden, } from '@strapi/design-system'; import { Menu, MenuItem } from '@strapi/design-system/v2'; import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { Trash, Drag, More } from '@strapi/icons'; +import { Drag, More, Trash } from '@strapi/icons'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; +import { getEmptyImage } from 'react-dnd-html5-backend'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { useContentTypeLayout, useDragAndDrop } from '../../../hooks'; import { composeRefs, getTrad, ItemTypes } from '../../../utils'; - -import FieldComponent from '../../FieldComponent'; import { ComponentIcon } from '../../ComponentIcon'; +import FieldComponent from '../../FieldComponent'; export const DynamicComponent = ({ componentUid, diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js index 4df303ef28..316cec5539 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js @@ -5,10 +5,11 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { pxToRem } from '@strapi/helper-plugin'; + import { Box, Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; export const DynamicZoneLabel = ({ label, diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/AddComponentButton.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/AddComponentButton.test.js index 87d6b50b98..7dfac70631 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/AddComponentButton.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/AddComponentButton.test.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { AddComponentButton } from '../AddComponentButton'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCard.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCard.test.js index d50b0feeea..7b7dcb2122 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCard.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCard.test.js @@ -1,10 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; - import GlobalStyle from '../../../../../components/GlobalStyle'; - import ComponentCard from '../ComponentCard'; describe('ComponentCard', () => { diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCategory.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCategory.test.js index 4f9ad0b022..6379168d31 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCategory.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentCategory.test.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { ComponentCategory } from '../ComponentCategory'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentPicker.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentPicker.test.js index 4078d91d97..0b366e2185 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentPicker.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/ComponentPicker.test.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { ComponentPicker } from '../ComponentPicker'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicComponent.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicComponent.test.js index b002fa95d8..27fe6cfbf7 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicComponent.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicComponent.test.js @@ -1,14 +1,15 @@ import React from 'react'; -import { render as renderRTL, fireEvent } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { IntlProvider } from 'react-intl'; import { DynamicComponent } from '../DynamicComponent'; -import { layoutData, dynamicComponentsByCategory } from './fixtures'; +import { dynamicComponentsByCategory, layoutData } from './fixtures'; jest.mock('../../../../hooks', () => ({ ...jest.requireActual('../../../../hooks'), diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicZoneLabel.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicZoneLabel.test.js index dc211ebabd..f03a193357 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicZoneLabel.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/components/tests/DynamicZoneLabel.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { render as renderRTL } from '@testing-library/react'; -import { ThemeProvider, lightTheme, Tooltip } from '@strapi/design-system'; +import { lightTheme, ThemeProvider, Tooltip } from '@strapi/design-system'; import { Earth } from '@strapi/icons'; +import { render as renderRTL } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; import { DynamicZoneLabel } from '../DynamicZoneLabel'; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/index.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/index.js index 58b726bbe5..71ad20c839 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/index.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/index.js @@ -1,17 +1,17 @@ import React, { useMemo, useState } from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex, VisuallyHidden } from '@strapi/design-system'; -import { NotAllowedInput, useNotification, useCMEditViewDataManager } from '@strapi/helper-plugin'; +import { NotAllowedInput, useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { useContentTypeLayout } from '../../hooks'; import { getTrad } from '../../utils'; -import { DynamicComponent } from './components/DynamicComponent'; import { AddComponentButton } from './components/AddComponentButton'; -import { DynamicZoneLabel } from './components/DynamicZoneLabel'; import { ComponentPicker } from './components/ComponentPicker'; - -import { useContentTypeLayout } from '../../hooks'; +import { DynamicComponent } from './components/DynamicComponent'; +import { DynamicZoneLabel } from './components/DynamicZoneLabel'; const DynamicZone = ({ name, labelAction, fieldSchema, metadatas }) => { // We cannot use the default props here diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicZone/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/DynamicZone/tests/index.test.js index 9c58f035b7..9557db2f2d 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicZone/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicZone/tests/index.test.js @@ -1,11 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { IntlProvider } from 'react-intl'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { IntlProvider } from 'react-intl'; import { DynamicZone } from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/index.js b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/index.js index 5a3ba433a3..1e42ca971d 100644 --- a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +++ b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/index.js @@ -1,37 +1,35 @@ /* eslint-disable react/jsx-no-constructed-context-values */ -import React, { useCallback, useEffect, useMemo, useRef, useReducer } from 'react'; -import isEmpty from 'lodash/isEmpty'; -import cloneDeep from 'lodash/cloneDeep'; -import get from 'lodash/get'; -import isEqual from 'lodash/isEqual'; -import set from 'lodash/set'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { Prompt, Redirect } from 'react-router-dom'; -import { flushSync } from 'react-dom'; -import { useDispatch, useSelector } from 'react-redux'; +import React, { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'; import { Main } from '@strapi/design-system'; import { - LoadingIndicatorPage, ContentManagerEditViewDataManagerContext, + getAPIInnerErrors, + getYupInnerErrors, + LoadingIndicatorPage, useNotification, useOverlayBlocker, useTracking, - getYupInnerErrors, - getAPIInnerErrors, } from '@strapi/helper-plugin'; +import cloneDeep from 'lodash/cloneDeep'; +import get from 'lodash/get'; +import isEmpty from 'lodash/isEmpty'; +import isEqual from 'lodash/isEqual'; +import set from 'lodash/set'; +import PropTypes from 'prop-types'; +import { flushSync } from 'react-dom'; +import { useIntl } from 'react-intl'; +import { useDispatch, useSelector } from 'react-redux'; +import { Prompt, Redirect } from 'react-router-dom'; -import { createYupSchema, getTrad } from '../../utils'; - +import { usePrev } from '../../hooks'; +import { clearSetModifiedDataOnly } from '../../sharedReducers/crudReducer/actions'; import selectCrudReducer from '../../sharedReducers/crudReducer/selectors'; +import { createYupSchema, getTrad } from '../../utils'; import reducer, { initialState } from './reducer'; import { cleanData } from './utils'; -import { clearSetModifiedDataOnly } from '../../sharedReducers/crudReducer/actions'; -import { usePrev } from '../../hooks'; - const EditViewDataManagerProvider = ({ allLayoutData, allowedActions: { canRead, canUpdate }, diff --git a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js index 7153d84c20..19d3926275 100644 --- a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +++ b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js @@ -1,14 +1,15 @@ +import { generateNKeysBetween } from 'fractional-indexing'; import produce from 'immer'; -import unset from 'lodash/unset'; +import cloneDeep from 'lodash/cloneDeep'; import get from 'lodash/get'; import set from 'lodash/set'; import take from 'lodash/take'; -import cloneDeep from 'lodash/cloneDeep'; import uniqBy from 'lodash/uniqBy'; -import { generateNKeysBetween } from 'fractional-indexing'; +import unset from 'lodash/unset'; + +import { getMaxTempKey } from '../../utils'; import { findAllAndReplace, moveFields } from './utils'; -import { getMaxTempKey } from '../../utils'; const initialState = { componentsDataStructure: {}, diff --git a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js index e33eff09fe..7505a15921 100644 --- a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js +++ b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js @@ -1,6 +1,7 @@ import get from 'lodash/get'; import isArray from 'lodash/isArray'; import isObject from 'lodash/isObject'; + import { getInitialDataPathUsingTempKeys } from '../../../utils/paths'; /* eslint-disable indent */ diff --git a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js index b978c442f9..261fa85387 100644 --- a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +++ b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js @@ -1,3 +1,3 @@ -export { default as moveFields } from './moveFields'; export { default as cleanData } from './cleanData'; export { findAllAndReplace } from './findAllAndReplace'; +export { default as moveFields } from './moveFields'; diff --git a/packages/core/admin/admin/src/content-manager/components/FieldComponent/Label.js b/packages/core/admin/admin/src/content-manager/components/FieldComponent/Label.js index 874689eefb..3af37fc573 100644 --- a/packages/core/admin/admin/src/content-manager/components/FieldComponent/Label.js +++ b/packages/core/admin/admin/src/content-manager/components/FieldComponent/Label.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { Box, Flex, Typography } from '@strapi/design-system'; const LabelAction = styled(Box)` svg path { diff --git a/packages/core/admin/admin/src/content-manager/components/FieldComponent/index.js b/packages/core/admin/admin/src/content-manager/components/FieldComponent/index.js index 6770ba91d4..bc531d3722 100644 --- a/packages/core/admin/admin/src/content-manager/components/FieldComponent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/FieldComponent/index.js @@ -1,22 +1,23 @@ /* eslint-disable import/no-cycle */ import React, { memo, useMemo } from 'react'; -import PropTypes from 'prop-types'; -import size from 'lodash/size'; -import isEqual from 'lodash/isEqual'; -import { useIntl } from 'react-intl'; +import { Box, Flex, IconButton } from '@strapi/design-system'; import { NotAllowedInput } from '@strapi/helper-plugin'; import { Trash } from '@strapi/icons'; -import { Box, IconButton, Flex } from '@strapi/design-system'; +import isEqual from 'lodash/isEqual'; +import size from 'lodash/size'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; -import connect from './utils/connect'; -import select from './utils/select'; -import Label from './Label'; +import { useContentTypeLayout } from '../../hooks'; +import { getTrad } from '../../utils'; import ComponentInitializer from '../ComponentInitializer'; import NonRepeatableComponent from '../NonRepeatableComponent'; import RepeatableComponent from '../RepeatableComponent'; -import { useContentTypeLayout } from '../../hooks'; -import { getTrad } from '../../utils'; + +import Label from './Label'; +import connect from './utils/connect'; +import select from './utils/select'; const FieldComponent = ({ addNonRepeatableComponentToField, diff --git a/packages/core/admin/admin/src/content-manager/components/FieldComponent/utils/select.js b/packages/core/admin/admin/src/content-manager/components/FieldComponent/utils/select.js index 5c084dc4b4..3bc43c1c73 100644 --- a/packages/core/admin/admin/src/content-manager/components/FieldComponent/utils/select.js +++ b/packages/core/admin/admin/src/content-manager/components/FieldComponent/utils/select.js @@ -1,10 +1,11 @@ import { useMemo } from 'react'; + +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import get from 'lodash/get'; import take from 'lodash/take'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { getFieldName } from '../../../utils'; import { useContentTypeLayout } from '../../../hooks'; +import { getFieldName } from '../../../utils'; function useSelect({ isFromDynamicZone, name }) { const { diff --git a/packages/core/admin/admin/src/content-manager/components/FieldTypeIcon/index.js b/packages/core/admin/admin/src/content-manager/components/FieldTypeIcon/index.js index e26b86fc62..988d8dc044 100644 --- a/packages/core/admin/admin/src/content-manager/components/FieldTypeIcon/index.js +++ b/packages/core/admin/admin/src/content-manager/components/FieldTypeIcon/index.js @@ -1,21 +1,22 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; import { useCustomFields } from '@strapi/helper-plugin'; import { - Date, Boolean, + Component, + Date, + DynamicZone, Email, Enumeration, + Json, Media, + Number, Relation, Text, Uid, - Number, - Json, - Component, - DynamicZone, } from '@strapi/icons'; +import PropTypes from 'prop-types'; const iconByTypes = { biginteger: , diff --git a/packages/core/admin/admin/src/content-manager/components/Hint/index.js b/packages/core/admin/admin/src/content-manager/components/Hint/index.js index 3831bb43f4..e216bb84b6 100644 --- a/packages/core/admin/admin/src/content-manager/components/Hint/index.js +++ b/packages/core/admin/admin/src/content-manager/components/Hint/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; export const Hint = ({ id, error, name, hint }) => { if (hint.length === 0 || error) { diff --git a/packages/core/admin/admin/src/content-manager/components/InjectionZoneList/index.js b/packages/core/admin/admin/src/content-manager/components/InjectionZoneList/index.js index daa5fb62ff..92b16595cc 100644 --- a/packages/core/admin/admin/src/content-manager/components/InjectionZoneList/index.js +++ b/packages/core/admin/admin/src/content-manager/components/InjectionZoneList/index.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import { useInjectionZone } from '../../../shared/hooks'; const InjectionZoneList = ({ area, ...props }) => { diff --git a/packages/core/admin/admin/src/content-manager/components/InputUID/endActionStyle.js b/packages/core/admin/admin/src/content-manager/components/InputUID/endActionStyle.js index 88da2f7ff1..468a043a85 100644 --- a/packages/core/admin/admin/src/content-manager/components/InputUID/endActionStyle.js +++ b/packages/core/admin/admin/src/content-manager/components/InputUID/endActionStyle.js @@ -1,5 +1,5 @@ +import { FieldAction, Flex } from '@strapi/design-system'; import styled, { keyframes } from 'styled-components'; -import { Flex, FieldAction } from '@strapi/design-system'; export const FieldActionWrapper = styled(FieldAction)` svg { diff --git a/packages/core/admin/admin/src/content-manager/components/InputUID/index.js b/packages/core/admin/admin/src/content-manager/components/InputUID/index.js index 7b8d6401a4..63f36fc449 100644 --- a/packages/core/admin/admin/src/content-manager/components/InputUID/index.js +++ b/packages/core/admin/admin/src/content-manager/components/InputUID/index.js @@ -1,19 +1,21 @@ -import React, { useEffect, useState, useRef } from 'react'; -import PropTypes from 'prop-types'; +import React, { useEffect, useRef, useState } from 'react'; + +import { Flex, TextInput, Typography } from '@strapi/design-system'; import { + useAPIErrorHandler, useCMEditViewDataManager, useFetchClient, useNotification, - useAPIErrorHandler, } from '@strapi/helper-plugin'; +import { CheckCircle, ExclamationMarkCircle, Loader, Refresh } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Flex, TextInput, Typography } from '@strapi/design-system'; -import { Refresh, CheckCircle, ExclamationMarkCircle, Loader } from '@strapi/icons'; -import { getRequestUrl } from '../../utils'; import useDebounce from '../../../hooks/useDebounce'; +import { getRequestUrl } from '../../utils'; + +import { FieldActionWrapper, LoadingWrapper, TextValidation } from './endActionStyle'; import UID_REGEX from './regex'; -import { FieldActionWrapper, TextValidation, LoadingWrapper } from './endActionStyle'; const InputUID = ({ attribute, diff --git a/packages/core/admin/admin/src/content-manager/components/InputUID/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/InputUID/tests/index.test.js index 77a5aa8109..5ec41224d3 100644 --- a/packages/core/admin/admin/src/content-manager/components/InputUID/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/InputUID/tests/index.test.js @@ -1,10 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; import userEvent from '@testing-library/user-event'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; +import { IntlProvider } from 'react-intl'; import InputUID from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/components/Inputs/index.js b/packages/core/admin/admin/src/content-manager/components/Inputs/index.js index d52a6ce20a..90057cfc1b 100644 --- a/packages/core/admin/admin/src/content-manager/components/Inputs/index.js +++ b/packages/core/admin/admin/src/content-manager/components/Inputs/index.js @@ -1,16 +1,18 @@ import React, { memo, useMemo } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + +import { GenericInput, NotAllowedInput, useLibrary } from '@strapi/helper-plugin'; import get from 'lodash/get'; +import isEqual from 'lodash/isEqual'; import omit from 'lodash/omit'; import take from 'lodash/take'; -import isEqual from 'lodash/isEqual'; -import { GenericInput, NotAllowedInput, useLibrary } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { useContentTypeLayout } from '../../hooks'; import { getFieldName } from '../../utils'; -import Wysiwyg from '../Wysiwyg'; import InputUID from '../InputUID'; import { RelationInputDataManager } from '../RelationInputDataManager'; +import Wysiwyg from '../Wysiwyg'; import { connect, generateOptions, getInputType, select, VALIDATIONS_TO_OMIT } from './utils'; diff --git a/packages/core/admin/admin/src/content-manager/components/Inputs/utils/select.js b/packages/core/admin/admin/src/content-manager/components/Inputs/utils/select.js index 017e6cfa10..dc2dd88a3d 100644 --- a/packages/core/admin/admin/src/content-manager/components/Inputs/utils/select.js +++ b/packages/core/admin/admin/src/content-manager/components/Inputs/utils/select.js @@ -1,6 +1,7 @@ import { useMemo } from 'react'; -import get from 'lodash/get'; + import { useCMEditViewDataManager } from '@strapi/helper-plugin'; +import get from 'lodash/get'; function useSelect(keys) { const { diff --git a/packages/core/admin/admin/src/content-manager/components/NonRepeatableComponent/index.js b/packages/core/admin/admin/src/content-manager/components/NonRepeatableComponent/index.js index 086da55f94..ea029fc64c 100644 --- a/packages/core/admin/admin/src/content-manager/components/NonRepeatableComponent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/NonRepeatableComponent/index.js @@ -2,12 +2,14 @@ /* eslint-disable import/no-cycle */ import React, { useMemo } from 'react'; + +import { Box, Flex, Grid, GridItem } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, Grid, GridItem, Flex } from '@strapi/design-system'; + import { useContentTypeLayout } from '../../hooks'; +import useLazyComponents from '../../hooks/useLazyComponents'; import FieldComponent from '../FieldComponent'; import Inputs from '../Inputs'; -import useLazyComponents from '../../hooks/useLazyComponents'; const NonRepeatableComponent = ({ componentUid, isFromDynamicZone, isNested, name }) => { const { getComponentLayout } = useContentTypeLayout(); diff --git a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/index.js b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/index.js index 42fc3845bb..94b04195ee 100644 --- a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/index.js +++ b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/index.js @@ -6,6 +6,7 @@ */ import React, { memo, useMemo } from 'react'; + import PropTypes from 'prop-types'; import md from './utils/mdRenderer'; diff --git a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js index b8c2cf212b..d7770fa766 100644 --- a/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js +++ b/packages/core/admin/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js @@ -1,6 +1,6 @@ /* eslint-disable prefer-template */ +import { getLanguage, highlight, highlightAuto } from 'highlight.js'; import Markdown from 'markdown-it'; -import { getLanguage, highlightAuto, highlight } from 'highlight.js'; import abbr from 'markdown-it-abbr'; import container from 'markdown-it-container'; import deflist from 'markdown-it-deflist'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/RelationInput.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/RelationInput.js index 2dea8bb112..712cd4ed46 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/RelationInput.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/RelationInput.js @@ -1,37 +1,37 @@ -import React, { useRef, useState, useMemo, useEffect } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { FixedSizeList as List } from 'react-window'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; + +import { + Box, + Field, + FieldError, + FieldHint, + FieldLabel, + Icon, + Link, + Status, + TextButton, + Tooltip, + Typography, + VisuallyHidden, +} from '@strapi/design-system'; /** * TODO: this will come in another PR. */ // eslint-disable-next-line no-restricted-imports import { ReactSelect } from '@strapi/helper-plugin'; -import { - Status, - Box, - Link, - Icon, - FieldLabel, - FieldError, - FieldHint, - Field, - TextButton, - Typography, - Tooltip, - VisuallyHidden, -} from '@strapi/design-system'; - import { Cross, Refresh } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { FixedSizeList as List } from 'react-window'; +import styled from 'styled-components'; +import { usePrev } from '../../hooks'; + +import { Option } from './components/Option'; import { Relation } from './components/Relation'; import { RelationItem } from './components/RelationItem'; import { RelationList } from './components/RelationList'; -import { Option } from './components/Option'; import { RELATION_GUTTER, RELATION_ITEM_HEIGHT } from './constants'; -import { usePrev } from '../../hooks'; - export const LinkEllipsis = styled(Link)` display: block; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Option.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Option.js index 9b3ef0cfc6..9f4f88c0e7 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Option.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Option.js @@ -1,11 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; -import { components } from 'react-select'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { pxToRem } from '@strapi/helper-plugin'; import { Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { components } from 'react-select'; +import styled from 'styled-components'; import { getTrad } from '../../../utils'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Relation.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Relation.js index 71dd4b3f1f..606e90742d 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Relation.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/Relation.js @@ -1,7 +1,7 @@ -import PropTypes from 'prop-types'; import React from 'react'; import { Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; export const Relation = ({ children, diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationItem.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationItem.js index e557339511..16a30d517f 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationItem.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationItem.js @@ -1,15 +1,13 @@ import React, { useEffect } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { getEmptyImage } from 'react-dnd-html5-backend'; import { Box, Flex, IconButton } from '@strapi/design-system'; import { Drag } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { getEmptyImage } from 'react-dnd-html5-backend'; +import styled from 'styled-components'; import { useDragAndDrop } from '../../../hooks/useDragAndDrop'; - import { composeRefs, ItemTypes } from '../../../utils'; - import { RELATION_GUTTER } from '../constants'; export const FlexWrapper = styled(Flex)` diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationList.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationList.js index 32e3218efd..1aee2f977d 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationList.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/RelationList.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; const ShadowBox = styled(Box)` position: relative; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/Option.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/Option.test.js index 55cf7bbf0c..df1a401b19 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/Option.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/Option.test.js @@ -1,13 +1,13 @@ import React from 'react'; -import { render, screen, fireEvent, act } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; /** * TODO: this will come in another PR. */ // eslint-disable-next-line no-restricted-imports import { ReactSelect } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { act, fireEvent, render, screen } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; import { Option } from '../Option'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationItem.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationItem.test.js index 3616ab8dd6..44bd936aaa 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationItem.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationItem.test.js @@ -1,6 +1,7 @@ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen } from '@testing-library/react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationList.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationList.test.js index 1b935bf413..13f4526fd1 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationList.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/components/tests/RelationList.test.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInput/tests/RelationInput.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInput/tests/RelationInput.test.js index 20a79f7d56..5d4c253eb7 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInput/tests/RelationInput.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInput/tests/RelationInput.test.js @@ -1,10 +1,11 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { MemoryRouter } from 'react-router-dom'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { IntlProvider } from 'react-intl'; +import { MemoryRouter } from 'react-router-dom'; import { RelationInput } from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js index ad795e03df..7d7fab9040 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js @@ -1,21 +1,19 @@ /* eslint-disable no-nested-ternary */ -import PropTypes from 'prop-types'; import React, { memo, useMemo, useState } from 'react'; -import { useIntl } from 'react-intl'; + +import { NotAllowedInput, useCMEditViewDataManager } from '@strapi/helper-plugin'; import get from 'lodash/get'; import pick from 'lodash/pick'; - -import { useCMEditViewDataManager, NotAllowedInput } from '@strapi/helper-plugin'; - -import { RelationInput } from '../RelationInput'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { useRelation } from '../../hooks/useRelation'; - import { getTrad } from '../../utils'; +import { getInitialDataPathUsingTempKeys } from '../../utils/paths'; +import { RelationInput } from '../RelationInput'; import { PUBLICATION_STATES, RELATIONS_TO_DISPLAY, SEARCH_RESULTS_TO_DISPLAY } from './constants'; -import { connect, select, normalizeSearchResults, diffRelations, normalizeRelation } from './utils'; -import { getInitialDataPathUsingTempKeys } from '../../utils/paths'; +import { connect, diffRelations, normalizeRelation, normalizeSearchResults, select } from './utils'; export const RelationInputDataManager = ({ error, diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/tests/RelationInputDataManger.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/tests/RelationInputDataManger.test.js index d1180baec0..da8db36c1a 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/tests/RelationInputDataManger.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/tests/RelationInputDataManger.test.js @@ -1,16 +1,16 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { fireEvent, render, act, screen } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { MemoryRouter } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; +import { act, fireEvent, render, screen } from '@testing-library/react'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; - -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { useRelation } from '../../../hooks/useRelation'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; import { RelationInputDataManager } from '..'; +import { useRelation } from '../../../hooks/useRelation'; const queryClient = new QueryClient({ defaultOptions: { diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/index.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/index.js index 682a3045da..614c90551a 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/index.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/index.js @@ -1,5 +1,5 @@ export { default as connect } from './connect'; -export { default as select } from './select'; -export { normalizeRelations, normalizeRelation } from './normalizeRelations'; -export { normalizeSearchResults } from './normalizeSearchResults'; export { diffRelations } from './diffRelations'; +export { normalizeRelation, normalizeRelations } from './normalizeRelations'; +export { normalizeSearchResults } from './normalizeSearchResults'; +export { default as select } from './select'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js index 664790f9bc..74dfbde17c 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js @@ -1,7 +1,7 @@ -import { getRelationLink } from './getRelationLink'; - import { PUBLICATION_STATES } from '../constants'; +import { getRelationLink } from './getRelationLink'; + export const normalizeRelation = (relation, { shouldAddLink, mainFieldName, targetModel }) => { const nextRelation = { ...relation }; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/select.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/select.js index aebfc85bc6..92315db9b2 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/select.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/select.js @@ -1,6 +1,7 @@ import { useMemo } from 'react'; -import get from 'lodash/get'; + import { useCMEditViewDataManager } from '@strapi/helper-plugin'; +import get from 'lodash/get'; import { getRequestUrl } from '../../../utils'; diff --git a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/tests/select.test.js b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/tests/select.test.js index 00f8c6a9b9..85ac326c54 100644 --- a/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/tests/select.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RelationInputDataManager/utils/tests/select.test.js @@ -1,5 +1,5 @@ import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { renderHook, act } from '@testing-library/react'; +import { act, renderHook } from '@testing-library/react'; import useSelect from '../select'; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Accordion.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Accordion.js index 0418aa8baa..c734f89b3d 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Accordion.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Accordion.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Box, KeyboardNavigable, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { Box, Typography, KeyboardNavigable } from '@strapi/design-system'; export const Footer = styled(Box)` overflow: hidden; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Component.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Component.js index 249db3fcad..7b95a01fe3 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Component.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Component.js @@ -1,34 +1,32 @@ /* eslint-disable import/no-cycle */ import React, { memo, useEffect, useRef } from 'react'; -import PropTypes from 'prop-types'; -import { getEmptyImage } from 'react-dnd-html5-backend'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import toString from 'lodash/toString'; -import get from 'lodash/get'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { Accordion, - AccordionToggle, AccordionContent, + AccordionToggle, + Box, + Flex, Grid, GridItem, - Flex, - Box, IconButton, } from '@strapi/design-system'; -import { Trash, Drag } from '@strapi/icons'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; +import { Drag, Trash } from '@strapi/icons'; +import get from 'lodash/get'; +import toString from 'lodash/toString'; +import PropTypes from 'prop-types'; +import { getEmptyImage } from 'react-dnd-html5-backend'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { useDragAndDrop } from '../../../hooks/useDragAndDrop'; - +import useLazyComponents from '../../../hooks/useLazyComponents'; import { composeRefs, getTrad, ItemTypes } from '../../../utils'; - -import Inputs from '../../Inputs'; import FieldComponent from '../../FieldComponent'; +import Inputs from '../../Inputs'; import Preview from './Preview'; -import useLazyComponents from '../../../hooks/useLazyComponents'; const CustomIconButton = styled(IconButton)` background-color: transparent; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Preview.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Preview.js index 08055e08b6..209690f6c6 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Preview.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/Preview.js @@ -1,4 +1,5 @@ import React from 'react'; + import styled from 'styled-components'; const StyledSpan = styled.span` diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Accordion.test.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Accordion.test.js index 1eae41339b..f08fcf75a0 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Accordion.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Accordion.test.js @@ -1,7 +1,8 @@ import * as React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import * as Accordion from '../Accordion'; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Component.test.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Component.test.js index b1e75b41a4..bf6c3ead7c 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Component.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Component.test.js @@ -1,9 +1,10 @@ import * as React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render, screen } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { IntlProvider } from 'react-intl'; import Component from '../Component'; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Preview.test.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Preview.test.js index 1cc0e6f3f7..65627ec50d 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Preview.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/components/tests/Preview.test.js @@ -1,6 +1,7 @@ import * as React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import Preview from '../Preview'; diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/index.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/index.js index ffa517c932..fbb6992239 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/index.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/index.js @@ -1,21 +1,20 @@ /* eslint-disable import/no-cycle */ import React, { memo, useMemo, useState } from 'react'; + +import { Box, Flex, TextButton, VisuallyHidden } from '@strapi/design-system'; +import { useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin'; +import { Plus } from '@strapi/icons'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import get from 'lodash/get'; -import { useNotification, useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { Box, Flex, TextButton, VisuallyHidden } from '@strapi/design-system'; -import { Plus } from '@strapi/icons'; - -import { getMaxTempKey, getTrad } from '../../utils'; import { useContentTypeLayout } from '../../hooks'; - +import { getMaxTempKey, getTrad } from '../../utils'; import ComponentInitializer from '../ComponentInitializer'; -import Component from './components/Component'; -import * as Accordion from './components/Accordion'; +import * as Accordion from './components/Accordion'; +import Component from './components/Component'; import getComponentErrorKeys from './utils/getComponentErrorKeys'; const TextButtonCustom = styled(TextButton)` diff --git a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/tests/index.test.js index ba6b2b3e5d..2fa921c1a7 100644 --- a/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/RepeatableComponent/tests/index.test.js @@ -1,17 +1,17 @@ import * as React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin'; import { fireEvent, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { IntlProvider } from 'react-intl'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; - -import { useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; - -import { layoutData } from './fixtures'; +import { IntlProvider } from 'react-intl'; import RepeatableComponent from '../index'; +import { layoutData } from './fixtures'; + jest.mock('../../FieldComponent', () => () => "I'm a field component"); jest.mock('../../Inputs', () => () => "I'm inputs"); diff --git a/packages/core/admin/admin/src/content-manager/components/SingleTypeFormWrapper/index.js b/packages/core/admin/admin/src/content-manager/components/SingleTypeFormWrapper/index.js index bb8976c5b5..b8b14baf58 100644 --- a/packages/core/admin/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +++ b/packages/core/admin/admin/src/content-manager/components/SingleTypeFormWrapper/index.js @@ -1,20 +1,22 @@ import { memo, useCallback, useEffect, useRef, useState } from 'react'; -import { useHistory } from 'react-router-dom'; -import { useQueryClient } from 'react-query'; -import get from 'lodash/get'; + import { - useTracking, formatContentTypeData, - useQueryParams, - useNotification, - useGuidedTour, useAPIErrorHandler, useFetchClient, + useGuidedTour, + useNotification, + useQueryParams, + useTracking, } from '@strapi/helper-plugin'; -import { useSelector, useDispatch } from 'react-redux'; -import PropTypes from 'prop-types'; import axios from 'axios'; -import { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; +import { useQueryClient } from 'react-query'; +import { useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; + +import buildQueryString from '../../pages/ListView/utils/buildQueryString'; import { getData, getDataSucceeded, @@ -25,8 +27,9 @@ import { submitSucceeded, } from '../../sharedReducers/crudReducer/actions'; import selectCrudReducer from '../../sharedReducers/crudReducer/selectors'; +import { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils'; + import { getRequestUrl } from './utils'; -import buildQueryString from '../../pages/ListView/utils/buildQueryString'; // This container is used to handle the CRUD const SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => { diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/Editor.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/Editor.js index a3213da5d2..a470857dea 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/Editor.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/Editor.js @@ -1,11 +1,15 @@ import React, { useEffect, useRef } from 'react'; -import PropTypes from 'prop-types'; + import CodeMirror from 'codemirror5'; -import 'codemirror5/addon/display/placeholder'; +import PropTypes from 'prop-types'; + import PreviewWysiwyg from '../PreviewWysiwyg'; + import { EditorStylesContainer } from './EditorStylesContainer'; -import { EditorAndPreviewWrapper } from './WysiwygStyles'; import newlineAndIndentContinueMarkdownList from './utils/continueList'; +import { EditorAndPreviewWrapper } from './WysiwygStyles'; + +import 'codemirror5/addon/display/placeholder'; const Editor = ({ disabled, diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/EditorLayout.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/EditorLayout.js index 3d15eca963..787f96b1f2 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/EditorLayout.js @@ -1,10 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; + import { BaseButton, Box, Flex, FocusTrap, Portal, Typography } from '@strapi/design-system'; -import { Collapse } from '@strapi/icons'; import { pxToRem, useLockScroll } from '@strapi/helper-plugin'; +import { Collapse } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import PreviewWysiwyg from '../PreviewWysiwyg'; diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js index 8d3ea1c01f..b85d39db35 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js @@ -1,8 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Box, Flex, Typography } from '@strapi/design-system'; import { Expand } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { ExpandButton } from './WysiwygStyles'; const WysiwygFooter = ({ onToggleExpand }) => { diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js index 6f431af831..b9a989cf0c 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js @@ -1,28 +1,29 @@ import React, { useRef, useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { Button, IconButtonGroup, Option, Select, Popover, Flex } from '@strapi/design-system'; + +import { Button, Flex, IconButtonGroup, Option, Popover, Select } from '@strapi/design-system'; import { Bold, - Italic, - Underline, - StrikeThrough, BulletList, - NumberList, Code, - Picture as Image, + Italic, Link, - Quote, More, + NumberList, + Picture as Image, + Quote, + StrikeThrough, + Underline, } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { - MainButtons, CustomIconButton, - MoreButton, - IconButtonGroupMargin, CustomLinkIconButton, + IconButtonGroupMargin, + MainButtons, + MoreButton, } from './WysiwygStyles'; /** diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js index f7e735ad6f..987996cd78 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js @@ -1,5 +1,5 @@ +import { BaseButton, IconButton, IconButtonGroup } from '@strapi/design-system'; import styled from 'styled-components'; -import { IconButtonGroup, IconButton, BaseButton } from '@strapi/design-system'; // NAV BUTTONS export const CustomIconButton = styled(IconButton)` diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/index.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/index.js index 0cf3c8fe02..6a5d082887 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/index.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/index.js @@ -1,22 +1,24 @@ import React, { useRef, useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { Typography, Box, Flex } from '@strapi/design-system'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import { prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin'; -import Editor from './Editor'; -import WysiwygNav from './WysiwygNav'; -import WysiwygFooter from './WysiwygFooter'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import Hint from '../Hint'; -import { - markdownHandler, - listHandler, - titleHandler, - insertFile, - quoteAndCodeHandler, -} from './utils/utils'; +import Editor from './Editor'; import { EditorLayout } from './EditorLayout'; +import { + insertFile, + listHandler, + markdownHandler, + quoteAndCodeHandler, + titleHandler, +} from './utils/utils'; +import WysiwygFooter from './WysiwygFooter'; +import WysiwygNav from './WysiwygNav'; const LabelAction = styled(Box)` svg path { diff --git a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js index 62166ac669..c6c4b68012 100644 --- a/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/components/Wysiwyg/tests/index.test.js @@ -1,8 +1,10 @@ import * as React from 'react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; + import Wysiwyg from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/content-manager/hooks/index.js b/packages/core/admin/admin/src/content-manager/hooks/index.js index ff6e0bf5e9..e2662d6f5e 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/index.js @@ -1,9 +1,9 @@ export { default as useContentTypeLayout } from './useContentTypeLayout'; +export { useDragAndDrop } from './useDragAndDrop'; export { default as useFetchContentTypeLayout } from './useFetchContentTypeLayout'; export { default as useFindRedirectionLink } from './useFindRedirectionLink'; +export { useKeyboardDragAndDrop } from './useKeyboardDragAndDrop'; export { default as usePluginsQueryParams } from './usePluginsQueryParams'; +export { usePrev } from './usePrev'; export { default as useSyncRbac } from './useSyncRbac'; export { default as useWysiwyg } from './useWysiwyg'; -export { usePrev } from './usePrev'; -export { useDragAndDrop } from './useDragAndDrop'; -export { useKeyboardDragAndDrop } from './useKeyboardDragAndDrop'; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useContentTypeLayout/index.js b/packages/core/admin/admin/src/content-manager/hooks/useContentTypeLayout/index.js index fa5661af45..baf67be30a 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useContentTypeLayout/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useContentTypeLayout/index.js @@ -1,5 +1,7 @@ import { useCallback } from 'react'; + import { useSelector } from 'react-redux'; + import selectLayout from '../../pages/EditViewLayoutManager/selectors'; const useContentTypeLayout = () => { diff --git a/packages/core/admin/admin/src/content-manager/hooks/useDragAndDrop.js b/packages/core/admin/admin/src/content-manager/hooks/useDragAndDrop.js index 2371810036..6ea46e4891 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useDragAndDrop.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useDragAndDrop.js @@ -1,4 +1,5 @@ import { useRef } from 'react'; + import { useDrag, useDrop } from 'react-dnd'; import { useKeyboardDragAndDrop } from './useKeyboardDragAndDrop'; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js index 0d34d5dec9..23ed5dbb31 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js @@ -1,11 +1,14 @@ import { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'; -import { useSelector, shallowEqual } from 'react-redux'; -import axios from 'axios'; + import { useFetchClient } from '@strapi/helper-plugin'; -import formatLayouts from './utils/formatLayouts'; -import reducer, { initialState } from './reducer'; +import axios from 'axios'; +import { shallowEqual, useSelector } from 'react-redux'; + import { makeSelectModelAndComponentSchemas } from '../../pages/App/selectors'; +import reducer, { initialState } from './reducer'; +import formatLayouts from './utils/formatLayouts'; + const useFetchContentTypeLayout = (contentTypeUID) => { const [{ error, isLoading, layout, layouts }, dispatch] = useReducer(reducer, initialState); const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []); diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/tests/reducer.test.js b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/tests/reducer.test.js index ce10c20009..07f3780495 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/tests/reducer.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/tests/reducer.test.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import reducer from '../reducer'; describe('CONTENT MANAGER | hooks | useFetchContentTypeLayout | reducer', () => { diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js index 1bbaf4e7ce..c173db6fe4 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js @@ -162,6 +162,6 @@ export default formatLayouts; export { formatLayoutWithMetas, formatListLayoutWithMetas, - shouldDisplayRelationLink, getDisplayedModels, + shouldDisplayRelationLink, }; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/tests/formatLayouts.test.js b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/tests/formatLayouts.test.js index 41874ad139..3a1f2c770c 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/tests/formatLayouts.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/tests/formatLayouts.test.js @@ -1,8 +1,8 @@ import formatLayouts, { formatLayoutWithMetas, formatListLayoutWithMetas, - shouldDisplayRelationLink, getDisplayedModels, + shouldDisplayRelationLink, } from '../formatLayouts'; describe('Content Manager | hooks | useFetchContentTypeLayout | utils ', () => { diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/index.js b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/index.js index 124fa0a7a1..fdfa17d2e0 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/index.js @@ -1,5 +1,6 @@ -import { useSelector } from 'react-redux'; import { useQueryParams } from '@strapi/helper-plugin'; +import { useSelector } from 'react-redux'; + import selectMenuLinks from './selectors'; import getRedirectionLink from './utils/getRedirectionLink'; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/tests/selectors.test.js b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/tests/selectors.test.js index 9d455fc07d..7e30a13cd8 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/tests/selectors.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/tests/selectors.test.js @@ -1,4 +1,5 @@ import { fixtures } from '@strapi/admin-test-utils'; + import selectMenuLinks from '../selectors'; describe('CONTENT MANAGER | Containers | CollectionTypeFormWrapper | selectors', () => { diff --git a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js index 869d8f0db0..0d1f5caf3d 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js @@ -1,6 +1,6 @@ -import { stringify, parse } from 'qs'; import get from 'lodash/get'; import isObject from 'lodash/isObject'; +import { parse, stringify } from 'qs'; /** * Updates the leafs of the first argument diff --git a/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/index.js b/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/index.js index 4aedef5905..0961b299cd 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/index.js @@ -1,4 +1,5 @@ import { useCallback, useEffect, useState } from 'react'; + import { useCustomFields } from '@strapi/helper-plugin'; const componentStore = new Map(); diff --git a/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/tests/useLazyComponents.test.js b/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/tests/useLazyComponents.test.js index 87de6481f4..c04a06931c 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/tests/useLazyComponents.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useLazyComponents/tests/useLazyComponents.test.js @@ -1,4 +1,5 @@ import { renderHook, waitFor } from '@testing-library/react'; + import useLazyComponents from '../index'; const mockCustomField = { diff --git a/packages/core/admin/admin/src/content-manager/hooks/usePluginsQueryParams/index.js b/packages/core/admin/admin/src/content-manager/hooks/usePluginsQueryParams/index.js index f08e747395..381088c2c9 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/usePluginsQueryParams/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/usePluginsQueryParams/index.js @@ -1,5 +1,5 @@ -import { useLocation } from 'react-router-dom'; import { parse, stringify } from 'qs'; +import { useLocation } from 'react-router-dom'; const usePluginsQueryParams = () => { const { search } = useLocation(); diff --git a/packages/core/admin/admin/src/content-manager/hooks/useRelation/tests/useRelation.test.js b/packages/core/admin/admin/src/content-manager/hooks/useRelation/tests/useRelation.test.js index d86214fb70..8d61b11612 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useRelation/tests/useRelation.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useRelation/tests/useRelation.test.js @@ -1,8 +1,9 @@ import React from 'react'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; import { useFetchClient } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import { useRelation } from '../useRelation'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/content-manager/hooks/useRelation/useRelation.js b/packages/core/admin/admin/src/content-manager/hooks/useRelation/useRelation.js index 7ab2e7cc3a..97bb9693f8 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useRelation/useRelation.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useRelation/useRelation.js @@ -1,7 +1,7 @@ -import { useState, useEffect } from 'react'; -import { useInfiniteQuery } from 'react-query'; +import { useEffect, useState } from 'react'; -import { useFetchClient, useCallbackRef } from '@strapi/helper-plugin'; +import { useCallbackRef, useFetchClient } from '@strapi/helper-plugin'; +import { useInfiniteQuery } from 'react-query'; import { normalizeRelations } from '../../components/RelationInputDataManager/utils'; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/index.js b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/index.js index 64e8f6c1b3..e88b664f7f 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/index.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/index.js @@ -1,7 +1,9 @@ import { useEffect } from 'react'; + import { useDispatch, useSelector } from 'react-redux'; + import { resetPermissions, setPermissions } from './actions'; -import { selectPermissions, selectCollectionTypePermissions } from './selectors'; +import { selectCollectionTypePermissions, selectPermissions } from './selectors'; const useSyncRbac = (query, collectionTypeUID, containerName = 'listView') => { const collectionTypesRelatedPermissions = useSelector(selectCollectionTypePermissions); diff --git a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/reducer.js b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/reducer.js index 42a3cad550..223c75b736 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/reducer.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/reducer.js @@ -4,7 +4,8 @@ */ import produce from 'immer'; -import { SET_PERMISSIONS, RESET_PERMISSIONS } from './constants'; + +import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants'; export const initialState = { permissions: null, diff --git a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/tests/selectors.test.js b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/tests/selectors.test.js index 773ece61ec..8d73461177 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/tests/selectors.test.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useSyncRbac/tests/selectors.test.js @@ -1,5 +1,6 @@ import { fixtures } from '@strapi/admin-test-utils'; -import { selectPermissions, selectCollectionTypePermissions } from '../selectors'; + +import { selectCollectionTypePermissions, selectPermissions } from '../selectors'; describe('Admin | content manager | hooks | useSyncRbac | selectors', () => { let store; diff --git a/packages/core/admin/admin/src/content-manager/hooks/useWysiwyg.js b/packages/core/admin/admin/src/content-manager/hooks/useWysiwyg.js index 44717dac05..382c5af775 100644 --- a/packages/core/admin/admin/src/content-manager/hooks/useWysiwyg.js +++ b/packages/core/admin/admin/src/content-manager/hooks/useWysiwyg.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import WysiwygContext from '../contexts/Wysiwyg'; const useWysiwyg = () => useContext(WysiwygContext); diff --git a/packages/core/admin/admin/src/content-manager/pages/App/LeftMenu/index.js b/packages/core/admin/admin/src/content-manager/pages/App/LeftMenu/index.js index 3f53c956bf..9e6f8a7e19 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/LeftMenu/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/LeftMenu/index.js @@ -5,18 +5,18 @@ */ import React, { useMemo, useState } from 'react'; -import { useSelector, shallowEqual } from 'react-redux'; -import { useIntl } from 'react-intl'; -import { NavLink } from 'react-router-dom'; import { SubNav, SubNavHeader, + SubNavLink, SubNavSection, SubNavSections, - SubNavLink, } from '@strapi/design-system/v2'; -import { useFilter, useCollator } from '@strapi/helper-plugin'; +import { useCollator, useFilter } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; +import { shallowEqual, useSelector } from 'react-redux'; +import { NavLink } from 'react-router-dom'; import getTrad from '../../../utils/getTrad'; import { makeSelectModelLinks } from '../selectors'; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/components/CardDragPreview.js b/packages/core/admin/admin/src/content-manager/pages/App/components/CardDragPreview.js index 326cc50910..843e2a3950 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/components/CardDragPreview.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/components/CardDragPreview.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { Cross, Drag, Pencil } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Flex, Typography } from '@strapi/design-system'; -import { Pencil, Cross, Drag } from '@strapi/icons'; -import { pxToRem } from '@strapi/helper-plugin'; const ActionBox = styled(Flex)` height: ${({ theme }) => theme.spaces[7]}; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/components/ComponentDragPreview.js b/packages/core/admin/admin/src/content-manager/pages/App/components/ComponentDragPreview.js index 11ad22671c..8230125a24 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/components/ComponentDragPreview.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/components/ComponentDragPreview.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Flex, IconButton, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { CarretDown, Drag, Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { pxToRem } from '@strapi/helper-plugin'; -import { Flex, Typography, IconButton } from '@strapi/design-system'; -import { Trash, Drag, CarretDown } from '@strapi/icons'; const DropdownIconWrapper = styled(Flex)` border-radius: 50%; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/components/RelationDragPreview.js b/packages/core/admin/admin/src/content-manager/pages/App/components/RelationDragPreview.js index 44ca070944..51561f25d0 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/components/RelationDragPreview.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/components/RelationDragPreview.js @@ -1,16 +1,17 @@ import * as React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { Box, Flex, IconButton, Typography, Status, Icon } from '@strapi/design-system'; -import { Drag, Cross } from '@strapi/icons'; -import { getTrad } from '../../../utils'; -import { PUBLICATION_STATES } from '../../../components/RelationInputDataManager/constants'; +import { Box, Flex, Icon, IconButton, Status, Typography } from '@strapi/design-system'; +import { Cross, Drag } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + +import { DisconnectButton, LinkEllipsis } from '../../../components/RelationInput'; import { ChildrenWrapper, FlexWrapper, } from '../../../components/RelationInput/components/RelationItem'; -import { LinkEllipsis, DisconnectButton } from '../../../components/RelationInput'; +import { PUBLICATION_STATES } from '../../../components/RelationInputDataManager/constants'; +import { getTrad } from '../../../utils'; export const RelationDragPreview = ({ status, displayedValue, width }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/pages/App/index.js b/packages/core/admin/admin/src/content-manager/pages/App/index.js index 4d13a8f6b0..0f94e8b73a 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/index.js @@ -1,32 +1,33 @@ import React, { useEffect, useRef } from 'react'; -import { Helmet } from 'react-helmet'; -import { Switch, Route, useRouteMatch, Redirect, useLocation } from 'react-router-dom'; + +import { HeaderLayout, Layout, Main } from '@strapi/design-system'; import { + AnErrorOccurred, CheckPagePermissions, LoadingIndicatorPage, - AnErrorOccurred, useGuidedTour, } from '@strapi/helper-plugin'; -import { Layout, HeaderLayout, Main } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; import sortBy from 'lodash/sortBy'; -import permissions from '../../../permissions'; -import getTrad from '../../utils/getTrad'; +import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; +import { Redirect, Route, Switch, useLocation, useRouteMatch } from 'react-router-dom'; + import { DragLayer } from '../../../components/DragLayer'; +import permissions from '../../../permissions'; import ModelsContext from '../../contexts/ModelsContext'; +import getTrad from '../../utils/getTrad'; +import ItemTypes from '../../utils/ItemTypes'; import CollectionTypeRecursivePath from '../CollectionTypeRecursivePath'; import ComponentSettingsView from '../ComponentSetttingsView'; import NoContentType from '../NoContentType'; import NoPermissions from '../NoPermissions'; import SingleTypeRecursivePath from '../SingleTypeRecursivePath'; -import LeftMenu from './LeftMenu'; -import useContentManagerInitData from './useContentManagerInitData'; - -import ItemTypes from '../../utils/ItemTypes'; import { CardDragPreview } from './components/CardDragPreview'; import { ComponentDragPreview } from './components/ComponentDragPreview'; import { RelationDragPreview } from './components/RelationDragPreview'; +import LeftMenu from './LeftMenu'; +import useContentManagerInitData from './useContentManagerInitData'; const cmPermissions = permissions.contentManager; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/reducer.js b/packages/core/admin/admin/src/content-manager/pages/App/reducer.js index e3dbd20f2f..fdc3ba4f24 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/reducer.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/reducer.js @@ -4,6 +4,7 @@ */ /* eslint-disable consistent-return */ import produce from 'immer'; + import { GET_INIT_DATA, RESET_INIT_DATA, SET_INIT_DATA } from './constants'; const initialState = { diff --git a/packages/core/admin/admin/src/content-manager/pages/App/selectors.js b/packages/core/admin/admin/src/content-manager/pages/App/selectors.js index 8096c8e87a..17f9d642d9 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/selectors.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/selectors.js @@ -1,4 +1,5 @@ import { createSelector } from 'reselect'; + import { initialState } from './reducer'; const selectAppDomain = () => (state) => { @@ -30,6 +31,6 @@ export { makeSelectModelAndComponentSchemas, makeSelectModelLinks, makeSelectModels, - selectFieldSizes, selectAppDomain, + selectFieldSizes, }; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js index 1a9d244088..3e4ae0c003 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/tests/index.test.js @@ -1,17 +1,19 @@ /* eslint-disable no-irregular-whitespace */ import React from 'react'; -import { createStore, combineReducers } from 'redux'; -import { Router } from 'react-router-dom'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { act, render, screen } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import { Provider } from 'react-redux'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; -import { act, render, screen } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Provider } from 'react-redux'; +import { Router } from 'react-router-dom'; +import { combineReducers, createStore } from 'redux'; + +import { App as ContentManagerApp } from '..'; import Theme from '../../../../components/Theme'; import ThemeToggleProvider from '../../../../components/ThemeToggleProvider'; -import { App as ContentManagerApp } from '..'; import cmReducers from '../../../../reducers'; import useContentManagerInitData from '../useContentManagerInitData'; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/tests/reducer.test.js b/packages/core/admin/admin/src/content-manager/pages/App/tests/reducer.test.js index de21071bff..7848a8c338 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/tests/reducer.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/tests/reducer.test.js @@ -1,5 +1,6 @@ import produce from 'immer'; -import { getInitData, setInitData, resetInitData } from '../actions'; + +import { getInitData, resetInitData, setInitData } from '../actions'; import mainReducer from '../reducer'; describe('Content Manager | App | reducer', () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/App/tests/selectors.test.js b/packages/core/admin/admin/src/content-manager/pages/App/tests/selectors.test.js index ef87d82c6f..83523366d1 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/tests/selectors.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/tests/selectors.test.js @@ -1,4 +1,5 @@ import { fixtures } from '@strapi/admin-test-utils'; + import { makeSelectModels } from '../selectors'; describe('Content Manager | App | selectors', () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/App/useContentManagerInitData.js b/packages/core/admin/admin/src/content-manager/pages/App/useContentManagerInitData.js index 6d5a679974..27f69a6137 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/useContentManagerInitData.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/useContentManagerInitData.js @@ -1,16 +1,19 @@ +import { useEffect, useRef } from 'react'; + +import { useNotifyAT } from '@strapi/design-system'; import { + useFetchClient, useNotification, useRBACProvider, useStrapiApp, - useFetchClient, } from '@strapi/helper-plugin'; -import { useEffect, useRef } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import { useNotifyAT } from '@strapi/design-system'; import axios from 'axios'; import { useIntl } from 'react-intl'; +import { useDispatch, useSelector } from 'react-redux'; + import { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } from '../../../exposedHooks'; import { getTrad } from '../../utils'; + import { getInitData, resetInitData, setInitData } from './actions'; import { selectAppDomain } from './selectors'; import getContentTypeLinks from './utils/getContentTypeLinks'; diff --git a/packages/core/admin/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js b/packages/core/admin/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js index 44a5084740..c52e0344f6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js @@ -1,8 +1,10 @@ import { getFetchClient } from '@strapi/helper-plugin'; -import generateModelsLinks from './generateModelsLinks'; -import checkPermissions from './checkPermissions'; + import { getRequestUrl } from '../../../utils'; +import checkPermissions from './checkPermissions'; +import generateModelsLinks from './generateModelsLinks'; + const getContentTypeLinks = async ({ models, userPermissions, toggleNotification }) => { const { get } = getFetchClient(); try { diff --git a/packages/core/admin/admin/src/content-manager/pages/App/utils/tests/getContentTypeLinks.test.js b/packages/core/admin/admin/src/content-manager/pages/App/utils/tests/getContentTypeLinks.test.js index 71a65d5f02..841e4b8eda 100644 --- a/packages/core/admin/admin/src/content-manager/pages/App/utils/tests/getContentTypeLinks.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/App/utils/tests/getContentTypeLinks.test.js @@ -1,4 +1,5 @@ import { getFetchClient, hasPermissions } from '@strapi/helper-plugin'; + import getContentTypeLinks from '../getContentTypeLinks'; // FIXME diff --git a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js index 924d39a5d4..b232d1e4a3 100644 --- a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js +++ b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js @@ -1,6 +1,7 @@ import React from 'react'; -import { AnErrorOccurred } from '@strapi/helper-plugin'; + import { Box } from '@strapi/design-system'; +import { AnErrorOccurred } from '@strapi/helper-plugin'; const ErrorFallback = () => { return ( diff --git a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js index ad04169ecf..412d06a388 100644 --- a/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js @@ -1,16 +1,19 @@ import React, { memo, useMemo } from 'react'; -import { Switch, Route } from 'react-router-dom'; -import { ErrorBoundary } from 'react-error-boundary'; + +import { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import { LoadingIndicatorPage, CheckPagePermissions } from '@strapi/helper-plugin'; +import { ErrorBoundary } from 'react-error-boundary'; +import { Route, Switch } from 'react-router-dom'; + import permissions from '../../../permissions'; import { ContentTypeLayoutContext } from '../../contexts'; import { useFetchContentTypeLayout } from '../../hooks'; import { formatLayoutToApi } from '../../utils'; -import EditViewLayoutManager from '../EditViewLayoutManager'; import EditSettingsView from '../EditSettingsView'; -import ListViewLayout from '../ListViewLayoutManager'; +import EditViewLayoutManager from '../EditViewLayoutManager'; import ListSettingsView from '../ListSettingsView'; +import ListViewLayout from '../ListViewLayoutManager'; + import ErrorFallback from './components/ErrorFallback'; const cmPermissions = permissions.contentManager; diff --git a/packages/core/admin/admin/src/content-manager/pages/ComponentSetttingsView/index.js b/packages/core/admin/admin/src/content-manager/pages/ComponentSetttingsView/index.js index 3b6810d5f8..51bb0b961c 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ComponentSetttingsView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ComponentSetttingsView/index.js @@ -1,13 +1,15 @@ import React, { memo, useEffect, useMemo, useReducer } from 'react'; -import { useParams } from 'react-router-dom'; + import { CheckPagePermissions, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin'; -import { useSelector, shallowEqual } from 'react-redux'; import axios from 'axios'; +import { shallowEqual, useSelector } from 'react-redux'; +import { useParams } from 'react-router-dom'; + +import permissions from '../../../permissions'; +import { getData, getDataSucceeded } from '../../sharedReducers/crudReducer/actions'; +import crudReducer, { crudInitialState } from '../../sharedReducers/crudReducer/reducer'; import { mergeMetasWithSchema } from '../../utils'; import { makeSelectModelAndComponentSchemas } from '../App/selectors'; -import permissions from '../../../permissions'; -import crudReducer, { crudInitialState } from '../../sharedReducers/crudReducer/reducer'; -import { getData, getDataSucceeded } from '../../sharedReducers/crudReducer/actions'; import EditSettingsView from '../EditSettingsView'; const cmPermissions = permissions.contentManager; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js index 94be7071bf..59061382d6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js @@ -1,12 +1,14 @@ import React from 'react'; -import PropTypes from 'prop-types'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import { Link } from '@strapi/helper-plugin'; -import { Box, Flex, Typography, Grid, GridItem } from '@strapi/design-system'; import { Cog } from '@strapi/icons'; -import { useIntl } from 'react-intl'; import get from 'lodash/get'; -import { useLayoutDnd } from '../hooks/useLayoutDnd'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; +import { useLayoutDnd } from '../hooks/useLayoutDnd'; const ComponentFieldList = ({ componentUid }) => { const { componentLayouts } = useLayoutDnd(); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js index 96fe848610..4a9793785e 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js @@ -1,14 +1,17 @@ -import React, { useRef, useEffect, useState } from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { useDrop, useDrag } from 'react-dnd'; -import { getEmptyImage } from 'react-dnd-html5-backend'; -import { Flex, Box, GridItem } from '@strapi/design-system'; +import React, { useEffect, useRef, useState } from 'react'; + +import { Box, Flex, GridItem } from '@strapi/design-system'; import { Drag } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useDrag, useDrop } from 'react-dnd'; +import { getEmptyImage } from 'react-dnd-html5-backend'; +import styled from 'styled-components'; + import { ItemTypes } from '../../../utils'; -import FieldButtonContent from './FieldButtonContent'; import { useLayoutDnd } from '../hooks/useLayoutDnd'; +import FieldButtonContent from './FieldButtonContent'; + const Wrapper = styled(Flex)` position: relative; ${({ isFirst, isLast, hasHorizontalPadding }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js index b74cb935e1..bf678e3861 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js @@ -1,11 +1,14 @@ import React from 'react'; + +import { Box, Button, Flex, MenuItem, SimpleMenu, Typography } from '@strapi/design-system'; +import { Plus } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Button, Box, Typography, Flex, SimpleMenu, MenuItem } from '@strapi/design-system'; -import { Plus } from '@strapi/icons'; + import { getTrad } from '../../../utils'; -import RowsLayout from './RowsLayout'; + import LinkToCTB from './LinkToCTB'; +import RowsLayout from './RowsLayout'; const DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js index ce0b5dd500..c082e5af87 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js @@ -1,8 +1,9 @@ import React from 'react'; -import styled from 'styled-components'; -import { Link } from 'react-router-dom'; -import PropTypes from 'prop-types'; + import { Box, Flex, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; import { ComponentIcon } from '../../../components/ComponentIcon'; import { useLayoutDnd } from '../hooks/useLayoutDnd'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js index b92fdc16af..9ad4820f7b 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js @@ -1,10 +1,13 @@ import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Box, Flex, IconButton, Typography } from '@strapi/design-system'; import { Pencil, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { getTrad } from '../../../utils'; + import ComponentFieldList from './ComponentFieldList'; import DynamicZoneList from './DynamicZoneList'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js index fcc2dae6ad..57fb018096 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js @@ -1,21 +1,24 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import upperFirst from 'lodash/upperFirst'; + import { - ModalLayout, - ModalHeader, - ModalFooter, - ModalBody, - Typography, Button, Flex, Grid, + ModalBody, + ModalFooter, + ModalHeader, + ModalLayout, + Typography, } from '@strapi/design-system'; +import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import styled from 'styled-components'; + +import FieldTypeIcon from '../../../components/FieldTypeIcon'; import { getTrad } from '../../../utils'; import { useLayoutDnd } from '../hooks/useLayoutDnd'; -import FieldTypeIcon from '../../../components/FieldTypeIcon'; + import ModalForm from './ModalForm'; const HeaderContainer = styled(Flex)` diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js index 4aa41925c5..8ecfd6ae8a 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { Option, Select, TextInput, ToggleInput } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { TextInput, ToggleInput, Select, Option } from '@strapi/design-system'; import { useIntl } from 'react-intl'; const GenericInput = ({ type, options, onChange, value, name, ...inputProps }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js index 3835cb9fa9..223d0e412b 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js @@ -1,4 +1,5 @@ import React from 'react'; + import PropTypes from 'prop-types'; export const LayoutDndContext = React.createContext(); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js index c0e776137f..58686d1144 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js @@ -5,10 +5,12 @@ */ import React from 'react'; -import { useTracking, CheckPermissions, LinkButton } from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; -import get from 'lodash/get'; + +import { CheckPermissions, LinkButton, useTracking } from '@strapi/helper-plugin'; import { Pencil } from '@strapi/icons'; +import get from 'lodash/get'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; import { useLayoutDnd } from '../hooks/useLayoutDnd'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js index d00553f433..b4d86a9db3 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js @@ -1,13 +1,16 @@ -import React, { useMemo, useCallback } from 'react'; -import PropTypes from 'prop-types'; +import React, { useCallback, useMemo } from 'react'; + +import { GridItem, Option, Select } from '@strapi/design-system'; import get from 'lodash/get'; -import { GridItem, Select, Option } from '@strapi/design-system'; -import { useSelector, shallowEqual } from 'react-redux'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { shallowEqual, useSelector } from 'react-redux'; + +import getTrad from '../../../utils/getTrad'; +import { makeSelectModelAndComponentSchemas, selectFieldSizes } from '../../App/selectors'; import { useLayoutDnd } from '../hooks/useLayoutDnd'; import { createPossibleMainFieldsForModelsAndComponents, getInputProps } from '../utils'; -import { makeSelectModelAndComponentSchemas, selectFieldSizes } from '../../App/selectors'; -import getTrad from '../../../utils/getTrad'; + import GenericInput from './GenericInput'; const FIELD_SIZES = [ diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js index 349beef53b..4d056dc1c0 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js @@ -1,7 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import get from 'lodash/get'; +import PropTypes from 'prop-types'; + import { useLayoutDnd } from '../hooks/useLayoutDnd'; + import DisplayedFieldButton from './DisplayedFieldButton'; const RowItemsLayout = ({ rowItem, onRemoveField, rowId, rowIndex, index, lastIndex }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js index 044cb2dd90..e8473596a6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Grid } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import RowItemsLayout from './RowItemsLayout'; const RowsLayout = ({ row, onRemoveField, rowIndex }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js index 95072fd39d..99a02bf638 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js @@ -1,4 +1,5 @@ import * as React from 'react'; + import { LayoutDndContext } from '../components/LayoutDndProvider'; export function useLayoutDnd() { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/index.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/index.js index 4df66dd71f..f96f0ed41a 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/index.js @@ -1,41 +1,44 @@ import React, { useReducer, useState } from 'react'; + +import { + Box, + Button, + ContentLayout, + Divider, + Flex, + Grid, + GridItem, + HeaderLayout, + Main, + Option, + Select, + Typography, +} from '@strapi/design-system'; +import { ConfirmDialog, Link, useNotification, useTracking } from '@strapi/helper-plugin'; +import { ArrowLeft, Check } from '@strapi/icons'; +import cloneDeep from 'lodash/cloneDeep'; +import flatMap from 'lodash/flatMap'; +import get from 'lodash/get'; +import isEqual from 'lodash/isEqual'; +import pick from 'lodash/pick'; +import set from 'lodash/set'; +import upperFirst from 'lodash/upperFirst'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useMutation } from 'react-query'; -import upperFirst from 'lodash/upperFirst'; -import pick from 'lodash/pick'; -import cloneDeep from 'lodash/cloneDeep'; -import flatMap from 'lodash/flatMap'; -import isEqual from 'lodash/isEqual'; -import get from 'lodash/get'; -import set from 'lodash/set'; -import { useNotification, useTracking, ConfirmDialog, Link } from '@strapi/helper-plugin'; -import { useHistory } from 'react-router-dom'; -import { - Main, - HeaderLayout, - ContentLayout, - Button, - Box, - Typography, - Grid, - GridItem, - Select, - Option, - Flex, - Divider, -} from '@strapi/design-system'; -import { ArrowLeft, Check } from '@strapi/icons'; import { useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; + import { getTrad } from '../../utils'; -import reducer, { initialState } from './reducer'; -import init from './init'; +import { selectFieldSizes } from '../App/selectors'; + import DisplayedFields from './components/DisplayedFields'; import ModalForm from './components/FormModal'; import { LayoutDndProvider } from './components/LayoutDndProvider'; -import { unformatLayout } from './utils/layout'; +import init from './init'; +import reducer, { initialState } from './reducer'; import putCMSettingsEV from './utils/api'; -import { selectFieldSizes } from '../App/selectors'; +import { unformatLayout } from './utils/layout'; const EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, updateLayout }) => { const [reducerState, dispatch] = useReducer(reducer, initialState, () => diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/reducer.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/reducer.js index d9cad8c5f8..5e796bc907 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/reducer.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/reducer.js @@ -1,8 +1,10 @@ import produce from 'immer'; -import set from 'lodash/set'; -import get from 'lodash/get'; import cloneDeep from 'lodash/cloneDeep'; +import get from 'lodash/get'; +import set from 'lodash/set'; + import { arrayMoveItem } from '../../utils'; + import { formatLayout, getFieldSize, setFieldSize } from './utils/layout'; const DEFAULT_FIELD_SIZE = 6; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/tests/index.test.js index a29bb43f60..d9823fcfe6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/tests/index.test.js @@ -1,16 +1,18 @@ import React from 'react'; -import { render, waitFor, screen, fireEvent } from '@testing-library/react'; -import { Router } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import { IntlProvider } from 'react-intl'; -import { QueryClient, QueryClientProvider } from 'react-query'; -import { combineReducers, createStore } from 'redux'; -import { Provider } from 'react-redux'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import EditSettingsView from '../index'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Provider } from 'react-redux'; +import { Router } from 'react-router-dom'; +import { combineReducers, createStore } from 'redux'; + import cmReducers from '../../../../reducers'; +import EditSettingsView from '../index'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/api.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/api.js index a91cbd6ecf..bf4e1df272 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/api.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { getRequestUrl } from '../../../utils'; const putCMSettingsEV = (body, slug, isContentTypeView) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/layout.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/layout.js index 8db770aa50..2d369e5387 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/layout.js @@ -103,4 +103,4 @@ const setFieldSize = (name, size, layouts = []) => { }); }; -export { createLayout, formatLayout, getFieldSize, setFieldSize, getRowSize, unformatLayout }; +export { createLayout, formatLayout, getFieldSize, getRowSize, setFieldSize, unformatLayout }; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/tests/layout.test.js b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/tests/layout.test.js index 2ba8730b57..ee2499622e 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/tests/layout.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditSettingsView/utils/tests/layout.test.js @@ -2,8 +2,8 @@ import { createLayout, formatLayout, getFieldSize, - setFieldSize, getRowSize, + setFieldSize, unformatLayout, } from '../layout'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/index.js index 80213e5a18..d6003e526d 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/index.js @@ -1,11 +1,14 @@ import React, { memo, useState } from 'react'; -import { useIntl } from 'react-intl'; -import isEqual from 'lodash/isEqual'; + import { Button } from '@strapi/design-system'; +import { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin'; import { Trash } from '@strapi/icons'; -import { ConfirmDialog, useNotification, useAPIErrorHandler } from '@strapi/helper-plugin'; +import isEqual from 'lodash/isEqual'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../../utils'; + import { connect, select } from './utils'; const DeleteLink = ({ onDelete, trackerProperty }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js b/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js index bf90714945..43bad41e9d 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js @@ -1,5 +1,5 @@ -import isEmpty from 'lodash/isEmpty'; import { useCMEditViewDataManager } from '@strapi/helper-plugin'; +import isEmpty from 'lodash/isEmpty'; function useSelect() { const { hasDraftAndPublish, modifiedData } = useCMEditViewDataManager(); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js index 4395814daa..239e4d9a14 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js @@ -1,11 +1,14 @@ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { Dot } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { Box, Flex, Typography } from '@strapi/design-system'; -import { Dot } from '@strapi/icons'; -import { pxToRem } from '@strapi/helper-plugin'; + import { getTrad } from '../../../utils'; + import { connect, select } from './utils'; const CustomBullet = styled(Dot)` diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/tests/index.test.js index faf76b8a87..b0d4681c0c 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/DraftAndPublishBadge/tests/index.test.js @@ -7,9 +7,11 @@ /* eslint-disable no-irregular-whitespace */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; + import { DraftAndPublishBadge } from '../index'; const makeApp = (props) => ( diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/GridRow/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/GridRow/index.js index 732cc0bf26..b9d91a4b84 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/GridRow/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/GridRow/index.js @@ -1,8 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Grid, GridItem } from '@strapi/design-system'; -import Inputs from '../../../components/Inputs'; +import PropTypes from 'prop-types'; + import FieldComponent from '../../../components/FieldComponent'; +import Inputs from '../../../components/Inputs'; const GridRow = ({ columns, customFieldInputs }) => { return ( diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/index.js index cdd27193c8..7395074924 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/index.js @@ -1,25 +1,28 @@ import React, { memo, useState } from 'react'; -import { useIntl } from 'react-intl'; -import { useHistory } from 'react-router-dom'; -import PropTypes from 'prop-types'; -import isEqualFastCompare from 'lodash/isEqual'; -import get from 'lodash/get'; -import isEqual from 'lodash/isEqual'; -import isEmpty from 'lodash/isEmpty'; -import { ArrowLeft, Check, ExclamationMarkCircle } from '@strapi/icons'; -import { Link } from '@strapi/helper-plugin'; + import { - HeaderLayout, Box, Button, Dialog, DialogBody, DialogFooter, Flex, + HeaderLayout, Typography, } from '@strapi/design-system'; +import { Link } from '@strapi/helper-plugin'; +import { ArrowLeft, Check, ExclamationMarkCircle } from '@strapi/icons'; +import get from 'lodash/get'; +import isEmpty from 'lodash/isEmpty'; +import isEqualFastCompare from 'lodash/isEqual'; +import isEqual from 'lodash/isEqual'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useHistory } from 'react-router-dom'; import styled from 'styled-components'; + import { getTrad } from '../../../utils'; + import { connect, select } from './utils'; // TODO: replace with textAlign Typography props when available diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js index edbaee84dd..aab4881791 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/Header/tests/index.test.js @@ -5,13 +5,16 @@ */ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { MemoryRouter } from 'react-router-dom'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + import Theme from '../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../components/ThemeToggleProvider'; import { Header } from '../index'; + import ct from './data/ct-schema.json'; const defaultProps = { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/Information/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/Information/index.js index 1ff45308ff..a08e251b5f 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/Information/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/Information/index.js @@ -1,12 +1,14 @@ import React, { useRef } from 'react'; + +import { Box, Divider, Flex, Typography } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { Box, Divider, Flex, Typography } from '@strapi/design-system'; -import { getTrad } from '../../../utils'; -import getUnits from './utils/getUnits'; import { getFullName } from '../../../../utils'; +import { getTrad } from '../../../utils'; + +import getUnits from './utils/getUnits'; const Title = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/Information/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/Information/tests/index.test.js index d1818a26aa..1017fe3286 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/Information/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/Information/tests/index.test.js @@ -5,10 +5,11 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import Information from '..'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/InformationBox/tests/InformationBoxCe.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/InformationBox/tests/InformationBoxCe.test.js index 629b65859f..9023b92bef 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/InformationBox/tests/InformationBoxCe.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/InformationBox/tests/InformationBoxCe.test.js @@ -5,10 +5,11 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { InformationBoxCE } from '../InformationBoxCE'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/index.js index 16dca54fd8..3b4df1a7ad 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/index.js @@ -1,30 +1,33 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; -import { useSelector } from 'react-redux'; + +import { Box, ContentLayout, Flex, Grid, GridItem, Main } from '@strapi/design-system'; import { CheckPermissions, - useTracking, LinkButton, LoadingIndicatorPage, + useTracking, } from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; -import { ContentLayout, Box, Flex, Grid, GridItem, Main } from '@strapi/design-system'; -import { Pencil, Layer } from '@strapi/icons'; +import { Layer, Pencil } from '@strapi/icons'; import InformationBox from 'ee_else_ce/content-manager/pages/EditView/InformationBox'; -import { InjectionZone } from '../../../shared/components'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useSelector } from 'react-redux'; + import permissions from '../../../permissions'; -import { DynamicZone } from '../../components/DynamicZone'; +import { InjectionZone } from '../../../shared/components'; import CollectionTypeFormWrapper from '../../components/CollectionTypeFormWrapper'; +import { DynamicZone } from '../../components/DynamicZone'; import EditViewDataManagerProvider from '../../components/EditViewDataManagerProvider'; import SingleTypeFormWrapper from '../../components/SingleTypeFormWrapper'; -import { getTrad } from '../../utils'; import useLazyComponents from '../../hooks/useLazyComponents'; -import DraftAndPublishBadge from './DraftAndPublishBadge'; -import Header from './Header'; -import { getFieldsActionMatchingPermissions } from './utils'; +import { getTrad } from '../../utils'; + import DeleteLink from './DeleteLink'; +import DraftAndPublishBadge from './DraftAndPublishBadge'; import GridRow from './GridRow'; -import { selectCurrentLayout, selectAttributesLayout, selectCustomFieldUids } from './selectors'; +import Header from './Header'; +import { selectAttributesLayout, selectCurrentLayout, selectCustomFieldUids } from './selectors'; +import { getFieldsActionMatchingPermissions } from './utils'; const cmPermissions = permissions.contentManager; const ctbPermissions = [{ action: 'plugin::content-type-builder.read', subject: null }]; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/selectors.js b/packages/core/admin/admin/src/content-manager/pages/EditView/selectors.js index 648c2c8dee..cd7231ad71 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/selectors.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/selectors.js @@ -1,4 +1,5 @@ import { createSelector } from 'reselect'; + import { createAttributesLayout, getCustomFieldUidsFromLayout } from './utils'; const selectCurrentLayout = (state) => state['content-manager_editViewLayoutManager'].currentLayout; @@ -11,4 +12,4 @@ const selectCustomFieldUids = createSelector(selectCurrentLayout, (layout) => getCustomFieldUidsFromLayout(layout) ); -export { selectCurrentLayout, selectAttributesLayout, selectCustomFieldUids }; +export { selectAttributesLayout, selectCurrentLayout, selectCustomFieldUids }; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js index c2067a1fe6..a6ff0eb08f 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js @@ -1,6 +1,6 @@ -import uniq from 'lodash/uniq'; -import flatMap from 'lodash/flatMap'; import { findMatchingPermissions } from '@strapi/helper-plugin'; +import flatMap from 'lodash/flatMap'; +import uniq from 'lodash/uniq'; const getFieldsActionMatchingPermissions = (userPermissions, slug) => { const getMatchingPermissions = (action) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/index.js b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/index.js index c408b5b3a4..3eb59a7ca3 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/index.js @@ -1,4 +1,4 @@ // eslint-disable-next-line import/prefer-default-export export { default as createAttributesLayout } from './createAttributesLayout'; -export { default as getFieldsActionMatchingPermissions } from './getFieldsActionMatchingPermissions'; export { default as getCustomFieldUidsFromLayout } from './getCustomFieldUidsFromLayout'; +export { default as getFieldsActionMatchingPermissions } from './getFieldsActionMatchingPermissions'; diff --git a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/tests/getFieldsActionMatchingPermissions.test.js b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/tests/getFieldsActionMatchingPermissions.test.js index cc5f14d49a..b90b4cf2ea 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditView/utils/tests/getFieldsActionMatchingPermissions.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditView/utils/tests/getFieldsActionMatchingPermissions.test.js @@ -1,5 +1,5 @@ -import getFieldsActionMatchingPermissions from '../getFieldsActionMatchingPermissions'; import { permissions } from '../../../../testUtils'; +import getFieldsActionMatchingPermissions from '../getFieldsActionMatchingPermissions'; describe('CONTENT MANAGER | CONTAINERS | EditView | utils | getFieldsActionMatchingPermissions', () => { it('should return an object with all the allowed action for the fields', () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js index fefbe2629b..2ea49049e1 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js @@ -1,9 +1,11 @@ import React, { memo, useMemo } from 'react'; -import PropTypes from 'prop-types'; -import { useRBAC, LoadingIndicatorPage } from '@strapi/helper-plugin'; + +import { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin'; import isEqual from 'lodash/isEqual'; -import EditView from '../EditView'; +import PropTypes from 'prop-types'; + import { generatePermissionsObject } from '../../utils'; +import EditView from '../EditView'; const Permissions = (props) => { const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/index.js b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/index.js index 89bfe81446..c811983301 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/index.js @@ -1,12 +1,15 @@ import React, { useEffect } from 'react'; + +import { LoadingIndicatorPage, useQueryParams, useStrapiApp } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useDispatch, useSelector } from 'react-redux'; -import { LoadingIndicatorPage, useQueryParams, useStrapiApp } from '@strapi/helper-plugin'; + import { MUTATE_EDIT_VIEW_LAYOUT } from '../../../exposedHooks'; import { useSyncRbac } from '../../hooks'; + import { resetProps, setLayout } from './actions'; -import selectLayout from './selectors'; import Permissions from './Permissions'; +import selectLayout from './selectors'; const EditViewLayoutManager = ({ layout, ...rest }) => { const currentLayout = useSelector(selectLayout); diff --git a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js index d37d87e4c2..775a60b5fe 100644 --- a/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js +++ b/packages/core/admin/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js @@ -4,6 +4,7 @@ */ import produce from 'immer'; + import { RESET_PROPS, SET_LAYOUT } from './constants'; export const initialState = { diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js index da97957363..9f734d10b8 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js @@ -1,14 +1,15 @@ import React, { useEffect, useRef, useState } from 'react'; -import styled from 'styled-components'; + +import { Box, Flex, Typography } from '@strapi/design-system'; +import { Cross, Drag, Pencil } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useDrag, useDrop } from 'react-dnd'; import { getEmptyImage } from 'react-dnd-html5-backend'; import { useIntl } from 'react-intl'; -import { Flex, Box, Typography } from '@strapi/design-system'; -import { Pencil, Cross, Drag } from '@strapi/icons'; +import styled from 'styled-components'; -import { CardDragPreview } from '../../App/components/CardDragPreview'; import { getTrad, ItemTypes } from '../../../utils'; +import { CardDragPreview } from '../../App/components/CardDragPreview'; const ActionButton = styled.button` display: flex; diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js index 9e85d41342..d9456e0390 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js @@ -1,23 +1,25 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import upperFirst from 'lodash/upperFirst'; -import styled from 'styled-components'; + import { - ModalLayout, - ModalHeader, - ModalFooter, - ModalBody, - Typography, Button, Flex, Grid, GridItem, + ModalBody, + ModalFooter, + ModalHeader, + ModalLayout, TextInput, ToggleInput, + Typography, } from '@strapi/design-system'; -import { getTrad } from '../../../utils'; +import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import FieldTypeIcon from '../../../components/FieldTypeIcon'; +import { getTrad } from '../../../utils'; const HeaderContainer = styled(Flex)` svg { diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/Settings.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/Settings.js index 9140c52332..e301e0d4fd 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/Settings.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/Settings.js @@ -1,16 +1,18 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Box, + Flex, Grid, GridItem, - Select, Option, + Select, ToggleInput, Typography, - Flex, } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../../utils'; const Settings = ({ modifiedData, onChange, sortOptions }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js index 4bf99efa53..d94c03ac10 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js @@ -1,12 +1,15 @@ -import React, { useState, useRef, useEffect } from 'react'; -import styled from 'styled-components'; +import React, { useEffect, useRef, useState } from 'react'; + +import { Box, Flex, IconButton, MenuItem, SimpleMenu, Typography } from '@strapi/design-system'; +import { Plus } from '@strapi/icons'; import { PropTypes } from 'prop-types'; import { useIntl } from 'react-intl'; -import { Box, Flex, Typography, SimpleMenu, MenuItem, IconButton } from '@strapi/design-system'; -import { Plus } from '@strapi/icons'; -import DraggableCard from './DraggableCard'; +import styled from 'styled-components'; + import { getTrad } from '../../../utils'; +import DraggableCard from './DraggableCard'; + const FlexWrapper = styled(Box)` flex: ${({ size }) => size}; `; diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/index.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/index.js index b23d6e5032..1ed1cbfc96 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/index.js @@ -1,40 +1,42 @@ import React, { memo, useContext, useReducer, useState } from 'react'; -import PropTypes from 'prop-types'; -import { useMutation } from 'react-query'; -import isEqual from 'lodash/isEqual'; -import upperFirst from 'lodash/upperFirst'; -import pick from 'lodash/pick'; -import get from 'lodash/get'; -import isEmpty from 'lodash/isEmpty'; -import { stringify } from 'qs'; + +import { + Box, + Button, + ContentLayout, + Divider, + HeaderLayout, + Layout, + Main, +} from '@strapi/design-system'; import { - useNotification, - useTracking, ConfirmDialog, Link, useFetchClient, + useNotification, + useTracking, } from '@strapi/helper-plugin'; +import { ArrowLeft, Check } from '@strapi/icons'; +import get from 'lodash/get'; +import isEmpty from 'lodash/isEmpty'; +import isEqual from 'lodash/isEqual'; +import pick from 'lodash/pick'; +import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; +import { stringify } from 'qs'; import { useIntl } from 'react-intl'; -import { - Box, - Divider, - Layout, - HeaderLayout, - ContentLayout, - Main, - Button, -} from '@strapi/design-system'; -import { Check, ArrowLeft } from '@strapi/icons'; +import { useMutation } from 'react-query'; -import { checkIfAttributeIsDisplayable, getTrad } from '../../utils'; import ModelsContext from '../../contexts/ModelsContext'; import { usePluginsQueryParams } from '../../hooks'; +import { checkIfAttributeIsDisplayable, getTrad } from '../../utils'; + +import EditFieldForm from './components/EditFieldForm'; import Settings from './components/Settings'; import SortDisplayedFields from './components/SortDisplayedFields'; -import EditFieldForm from './components/EditFieldForm'; +import { EXCLUDED_SORT_ATTRIBUTE_TYPES } from './constants'; import init from './init'; import reducer, { initialState } from './reducer'; -import { EXCLUDED_SORT_ATTRIBUTE_TYPES } from './constants'; const ListSettingsView = ({ layout, slug }) => { const { put } = useFetchClient(); diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/reducer.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/reducer.js index cb9d38ef12..b2ffb191f4 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/reducer.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/reducer.js @@ -1,6 +1,7 @@ import produce from 'immer'; // current -import set from 'lodash/set'; import get from 'lodash/get'; +import set from 'lodash/set'; + import { arrayMoveItem } from '../../utils'; const initialState = { diff --git a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/tests/index.test.js index 08a8819a8c..ac966c09b6 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListSettingsView/tests/index.test.js @@ -1,14 +1,16 @@ import React from 'react'; -import { act, render, waitFor, screen, fireEvent } from '@testing-library/react'; -import { Router } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import { IntlProvider } from 'react-intl'; -import { QueryClient, QueryClientProvider } from 'react-query'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import ListSettingsView from '../index'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Router } from 'react-router-dom'; + import ModelsContext from '../../../contexts/ModelsContext'; +import ListSettingsView from '../index'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/FieldPicker/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/FieldPicker/index.js index 0fe4b373f7..afc474ca9d 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/FieldPicker/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/FieldPicker/index.js @@ -1,13 +1,16 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; -import { useDispatch, useSelector } from 'react-redux'; -import { useIntl } from 'react-intl'; -import { Select, Option, Box } from '@strapi/design-system'; + +import { Box, Option, Select } from '@strapi/design-system'; import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useDispatch, useSelector } from 'react-redux'; + +import getTrad from '../../../utils/getTrad'; import { onChangeListHeaders } from '../actions'; import { selectDisplayedHeaders } from '../selectors'; + import getAllAllowedHeaders from './utils/getAllAllowedHeader'; -import getTrad from '../../../utils/getTrad'; const FieldPicker = ({ layout }) => { const dispatch = useDispatch(); diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/PaginationFooter/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/PaginationFooter/index.js index f613b47de7..c1fa281ee1 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/PaginationFooter/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/PaginationFooter/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; -import { PaginationURLQuery, PageSizeURLQuery } from '@strapi/helper-plugin'; +import { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; const PaginationFooter = ({ pagination }) => { return ( diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js index 6202a8c4d7..a975000e89 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/index.js @@ -1,54 +1,50 @@ import React, { memo, useCallback, useEffect, useRef } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { connect } from 'react-redux'; -import isEqual from 'lodash/isEqual'; -import { bindActionCreators, compose } from 'redux'; -import { useIntl } from 'react-intl'; -import { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom'; -import { stringify } from 'qs'; -import axios from 'axios'; import { - NoPermissions, - CheckPermissions, - SearchURLQuery, - useFetchClient, - useFocusWhenNavigate, - useQueryParams, - useNotification, - useRBACProvider, - useTracking, - Link, - useAPIErrorHandler, - getYupInnerErrors, -} from '@strapi/helper-plugin'; - -import { - IconButton, - Main, - Box, ActionLayout, + Box, + Button, ContentLayout, HeaderLayout, + IconButton, + Main, useNotifyAT, - Button, } from '@strapi/design-system'; - -import { ArrowLeft, Plus, Cog } from '@strapi/icons'; +import { + CheckPermissions, + getYupInnerErrors, + Link, + NoPermissions, + SearchURLQuery, + useAPIErrorHandler, + useFetchClient, + useFocusWhenNavigate, + useNotification, + useQueryParams, + useRBACProvider, + useTracking, +} from '@strapi/helper-plugin'; +import { ArrowLeft, Cog, Plus } from '@strapi/icons'; +import axios from 'axios'; +import isEqual from 'lodash/isEqual'; +import PropTypes from 'prop-types'; +import { stringify } from 'qs'; +import { useIntl } from 'react-intl'; import { useMutation } from 'react-query'; - -import DynamicTable from '../../components/DynamicTable'; -import AttributeFilter from '../../components/AttributeFilter'; -import { InjectionZone } from '../../../shared/components'; +import { connect } from 'react-redux'; +import { Link as ReactRouterLink, useHistory, useLocation } from 'react-router-dom'; +import { bindActionCreators, compose } from 'redux'; +import styled from 'styled-components'; import permissions from '../../../permissions'; - +import { InjectionZone } from '../../../shared/components'; +import AttributeFilter from '../../components/AttributeFilter'; +import DynamicTable from '../../components/DynamicTable'; import { createYupSchema, getRequestUrl, getTrad } from '../../utils'; +import { getData, getDataSucceeded, onChangeListHeaders, onResetListHeaders } from './actions'; import FieldPicker from './FieldPicker'; import PaginationFooter from './PaginationFooter'; -import { getData, getDataSucceeded, onChangeListHeaders, onResetListHeaders } from './actions'; import makeSelectListView from './selectors'; import { buildQueryString } from './utils'; diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/reducer.js b/packages/core/admin/admin/src/content-manager/pages/ListView/reducer.js index 566881165c..61f32dc7e8 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/reducer.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/reducer.js @@ -5,12 +5,13 @@ import produce from 'immer'; import get from 'lodash/get'; + import { GET_DATA, GET_DATA_SUCCEEDED, - RESET_PROPS, ON_CHANGE_LIST_HEADERS, ON_RESET_LIST_HEADERS, + RESET_PROPS, SET_LIST_LAYOUT, } from './constants'; diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/selectors.js b/packages/core/admin/admin/src/content-manager/pages/ListView/selectors.js index 96f4406423..b7e1cf7e76 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/selectors.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/selectors.js @@ -1,4 +1,5 @@ import { createSelector } from 'reselect'; + import { initialState } from './reducer'; /** diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/tests/reducer.test.js b/packages/core/admin/admin/src/content-manager/pages/ListView/tests/reducer.test.js index 6585646e87..06eaaa5509 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/tests/reducer.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/tests/reducer.test.js @@ -1,6 +1,6 @@ import produce from 'immer'; -import { getData, getDataSucceeded } from '../actions'; +import { getData, getDataSucceeded } from '../actions'; import reducer from '../reducer'; describe('CONTENT MANAGER | CONTAINERS | ListView | reducer', () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/ListView/utils/buildQueryString.js b/packages/core/admin/admin/src/content-manager/pages/ListView/utils/buildQueryString.js index 68981a6356..6fe2ad8f3b 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListView/utils/buildQueryString.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListView/utils/buildQueryString.js @@ -1,5 +1,6 @@ -import { stringify } from 'qs'; import set from 'lodash/set'; +import { stringify } from 'qs'; + import createPluginsFilter from './createPluginsFilter'; /** diff --git a/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js b/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js index 5038761b57..fbee02b5dc 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js @@ -1,9 +1,10 @@ import React, { memo, useMemo } from 'react'; -import PropTypes from 'prop-types'; -import { useRBAC, LoadingIndicatorPage, difference } from '@strapi/helper-plugin'; -import ListView from '../ListView'; +import { difference, LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + import { generatePermissionsObject } from '../../utils'; +import ListView from '../ListView'; const Permissions = (props) => { const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]); diff --git a/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/index.js b/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/index.js index ffcc1c7876..870de7b975 100644 --- a/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/ListViewLayoutManager/index.js @@ -1,10 +1,13 @@ import React, { useEffect } from 'react'; -import { useDispatch } from 'react-redux'; -import PropTypes from 'prop-types'; -import { useHistory } from 'react-router-dom'; + import { useQueryParams } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useDispatch } from 'react-redux'; +import { useHistory } from 'react-router-dom'; + import { useFindRedirectionLink, useSyncRbac } from '../../hooks'; import { resetProps, setLayout } from '../ListView/actions'; + import Permissions from './Permissions'; const ListViewLayout = ({ layout, ...props }) => { diff --git a/packages/core/admin/admin/src/content-manager/pages/NoContentType/index.js b/packages/core/admin/admin/src/content-manager/pages/NoContentType/index.js index 4094837610..117c8e46a8 100644 --- a/packages/core/admin/admin/src/content-manager/pages/NoContentType/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/NoContentType/index.js @@ -1,8 +1,10 @@ import React from 'react'; -import { useFocusWhenNavigate, LinkButton } from '@strapi/helper-plugin'; -import { Main, ContentLayout, HeaderLayout, EmptyStateLayout } from '@strapi/design-system'; -import { Plus, EmptyDocuments } from '@strapi/icons'; + +import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system'; +import { LinkButton, useFocusWhenNavigate } from '@strapi/helper-plugin'; +import { EmptyDocuments, Plus } from '@strapi/icons'; import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; const NoContentType = () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/NoContentType/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/NoContentType/tests/index.test.js index f896175ae8..fca9b1786c 100644 --- a/packages/core/admin/admin/src/content-manager/pages/NoContentType/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/NoContentType/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + import Theme from '../../../../components/Theme'; import ThemeToggleProvider from '../../../../components/ThemeToggleProvider'; import NoContentType from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/pages/NoPermissions/index.js b/packages/core/admin/admin/src/content-manager/pages/NoPermissions/index.js index a15ba98d25..cf21c1d736 100644 --- a/packages/core/admin/admin/src/content-manager/pages/NoPermissions/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/NoPermissions/index.js @@ -1,7 +1,9 @@ import React from 'react'; -import { useFocusWhenNavigate, NoPermissions as NoPermissionsCompo } from '@strapi/helper-plugin'; -import { Main, ContentLayout, HeaderLayout } from '@strapi/design-system'; + +import { ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; +import { NoPermissions as NoPermissionsCompo, useFocusWhenNavigate } from '@strapi/helper-plugin'; import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; const NoPermissions = () => { diff --git a/packages/core/admin/admin/src/content-manager/pages/NoPermissions/tests/index.test.js b/packages/core/admin/admin/src/content-manager/pages/NoPermissions/tests/index.test.js index c1c624b038..cb50174020 100644 --- a/packages/core/admin/admin/src/content-manager/pages/NoPermissions/tests/index.test.js +++ b/packages/core/admin/admin/src/content-manager/pages/NoPermissions/tests/index.test.js @@ -5,9 +5,11 @@ */ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + import Theme from '../../../../components/Theme'; import ThemeToggleProvider from '../../../../components/ThemeToggleProvider'; import NoPermissions from '../index'; diff --git a/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js b/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js index cca5838216..f13304e8b4 100644 --- a/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js +++ b/packages/core/admin/admin/src/content-manager/pages/SingleTypeRecursivePath/index.js @@ -1,13 +1,15 @@ import React, { memo, useMemo } from 'react'; -import { Switch, Route } from 'react-router-dom'; + +import { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import { LoadingIndicatorPage, CheckPagePermissions } from '@strapi/helper-plugin'; +import { Route, Switch } from 'react-router-dom'; + import permissions from '../../../permissions'; import { ContentTypeLayoutContext } from '../../contexts'; import { useFetchContentTypeLayout } from '../../hooks'; import { formatLayoutToApi } from '../../utils'; -import EditViewLayoutManager from '../EditViewLayoutManager'; import EditSettingsView from '../EditSettingsView'; +import EditViewLayoutManager from '../EditViewLayoutManager'; const cmPermissions = permissions.contentManager; diff --git a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/actions.js b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/actions.js index 6ab1651c05..bccfd30ac2 100644 --- a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/actions.js +++ b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/actions.js @@ -1,4 +1,5 @@ import { + CLEAR_SET_MODIFIED_DATA_ONLY, GET_DATA, GET_DATA_SUCCEEDED, INIT_FORM, @@ -6,7 +7,6 @@ import { SET_DATA_STRUCTURES, SET_STATUS, SUBMIT_SUCCEEDED, - CLEAR_SET_MODIFIED_DATA_ONLY, } from './constants'; export const getData = () => { diff --git a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/reducer.js b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/reducer.js index ba6d2106b1..1fc2d508d6 100644 --- a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/reducer.js +++ b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/reducer.js @@ -6,7 +6,6 @@ import produce from 'immer'; // and force us to either disable the linter for the hooks dependencies array rule or // require us to add the dispatch to the array wich is not wanted. This refacto does not require us to // to do any of this. - import { CLEAR_SET_MODIFIED_DATA_ONLY, GET_DATA, diff --git a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/tests/crudReducer.test.js b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/tests/crudReducer.test.js index df6a724ba5..688f8b3d29 100644 --- a/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/tests/crudReducer.test.js +++ b/packages/core/admin/admin/src/content-manager/sharedReducers/crudReducer/tests/crudReducer.test.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import { GET_DATA, GET_DATA_SUCCEEDED, diff --git a/packages/core/admin/admin/src/content-manager/testUtils/index.js b/packages/core/admin/admin/src/content-manager/testUtils/index.js index 7af64950a3..bf330bd6b4 100644 --- a/packages/core/admin/admin/src/content-manager/testUtils/index.js +++ b/packages/core/admin/admin/src/content-manager/testUtils/index.js @@ -1,3 +1,3 @@ import testData, { permissions } from './data'; -export { testData, permissions }; +export { permissions, testData }; diff --git a/packages/core/admin/admin/src/content-manager/utils/index.js b/packages/core/admin/admin/src/content-manager/utils/index.js index d7acba69a7..299703b1ab 100644 --- a/packages/core/admin/admin/src/content-manager/utils/index.js +++ b/packages/core/admin/admin/src/content-manager/utils/index.js @@ -1,22 +1,15 @@ export { default as arrayMoveItem } from './arrayMoveItem'; - export { default as checkIfAttributeIsDisplayable } from './checkIfAttributeIsDisplayable'; export { composeRefs } from './composeRefs'; export { default as createDefaultForm } from './createDefaultForm'; - export { default as formatLayoutToApi } from './formatLayoutToApi'; - export { default as generatePermissionsObject } from './generatePermissionsObject'; export { default as getFieldName } from './getFieldName'; export { default as getMaxTempKey } from './getMaxTempKey'; export { default as getRequestUrl } from './getRequestUrl'; export { default as getTrad } from './getTrad'; - export { default as ItemTypes } from './ItemTypes'; - export { default as mergeMetasWithSchema } from './mergeMetasWithSchema'; - export { default as removeKeyInObject } from './removeKeyInObject'; export { default as removePasswordFieldsFromData } from './removePasswordFieldsFromData'; - export { default as createYupSchema } from './schema'; diff --git a/packages/core/admin/admin/src/content-manager/utils/removePasswordFieldsFromData.js b/packages/core/admin/admin/src/content-manager/utils/removePasswordFieldsFromData.js index 39bd8a5011..850142efb4 100644 --- a/packages/core/admin/admin/src/content-manager/utils/removePasswordFieldsFromData.js +++ b/packages/core/admin/admin/src/content-manager/utils/removePasswordFieldsFromData.js @@ -1,5 +1,5 @@ +import { getOtherInfos, getType } from '@strapi/helper-plugin'; import get from 'lodash/get'; -import { getType, getOtherInfos } from '@strapi/helper-plugin'; const removePasswordFieldsFromData = (data, contentTypeSchema, componentSchema) => { const recursiveCleanData = (data, schema) => { diff --git a/packages/core/admin/admin/src/content-manager/utils/schema.js b/packages/core/admin/admin/src/content-manager/utils/schema.js index d58e4bdd50..a42e2b4c6d 100644 --- a/packages/core/admin/admin/src/content-manager/utils/schema.js +++ b/packages/core/admin/admin/src/content-manager/utils/schema.js @@ -1,11 +1,10 @@ +import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; import get from 'lodash/get'; import isBoolean from 'lodash/isBoolean'; import isEmpty from 'lodash/isEmpty'; import isNaN from 'lodash/isNaN'; import toNumber from 'lodash/toNumber'; - import * as yup from 'yup'; -import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; import isFieldTypeNumber from './isFieldTypeNumber'; diff --git a/packages/core/admin/admin/src/contexts/ApiTokenPermissions/index.js b/packages/core/admin/admin/src/contexts/ApiTokenPermissions/index.js index 3697825046..e41506aae4 100644 --- a/packages/core/admin/admin/src/contexts/ApiTokenPermissions/index.js +++ b/packages/core/admin/admin/src/contexts/ApiTokenPermissions/index.js @@ -1,4 +1,5 @@ import React, { createContext, useContext } from 'react'; + import PropTypes from 'prop-types'; const ApiTokenPermissionsContext = createContext({}); diff --git a/packages/core/admin/admin/src/contexts/MarketPlace/index.js b/packages/core/admin/admin/src/contexts/MarketPlace/index.js index 830222b934..30b2b9370b 100644 --- a/packages/core/admin/admin/src/contexts/MarketPlace/index.js +++ b/packages/core/admin/admin/src/contexts/MarketPlace/index.js @@ -1,4 +1,5 @@ import React, { createContext, useContext } from 'react'; + import PropTypes from 'prop-types'; const MarketPlaceContext = createContext({}); diff --git a/packages/core/admin/admin/src/core/apis/index.js b/packages/core/admin/admin/src/core/apis/index.js index 621ebdf8d9..cd77555b27 100644 --- a/packages/core/admin/admin/src/core/apis/index.js +++ b/packages/core/admin/admin/src/core/apis/index.js @@ -1,6 +1,6 @@ -export { default as Fields } from './Fields'; export { default as Components } from './Components'; +export { default as customFields } from './CustomFields'; +export { default as Fields } from './Fields'; export { default as Middlewares } from './Middlewares'; export { default as Plugin } from './Plugin'; export { default as Reducers } from './Reducers'; -export { default as customFields } from './CustomFields'; diff --git a/packages/core/admin/admin/src/core/store/configureStore.js b/packages/core/admin/admin/src/core/store/configureStore.js index a25be1a4f5..f881dbebcf 100644 --- a/packages/core/admin/admin/src/core/store/configureStore.js +++ b/packages/core/admin/admin/src/core/store/configureStore.js @@ -1,4 +1,4 @@ -import { createStore, applyMiddleware, compose, combineReducers } from 'redux'; +import { applyMiddleware, combineReducers, compose, createStore } from 'redux'; const configureStore = (appMiddlewares, appReducers) => { let composeEnhancers = compose; diff --git a/packages/core/admin/admin/src/hooks/index.js b/packages/core/admin/admin/src/hooks/index.js index c740cd9d75..d315aac478 100644 --- a/packages/core/admin/admin/src/hooks/index.js +++ b/packages/core/admin/admin/src/hooks/index.js @@ -2,13 +2,13 @@ export { default as useConfigurations } from './useConfigurations'; export { useContentTypes } from './useContentTypes'; export { default as useFetchPermissionsLayout } from './useFetchPermissionsLayout'; export { default as useFetchRole } from './useFetchRole'; -export { default as useMenu } from './useMenu'; -export { default as useRolesList } from './useRolesList'; -export { default as useSettingsMenu } from './useSettingsMenu'; -export { default as useSettingsForm } from './useSettingsForm'; -export { default as usePermissionsDataManager } from './usePermissionsDataManager'; -export { default as useReleaseNotification } from './useReleaseNotification'; -export { default as useThemeToggle } from './useThemeToggle'; -export { default as useRegenerate } from './useRegenerate'; -export { default as useLicenseLimit } from './useLicenseLimits'; export { default as useLicenseLimitNotification } from './useLicenseLimitNotification'; +export { default as useLicenseLimit } from './useLicenseLimits'; +export { default as useMenu } from './useMenu'; +export { default as usePermissionsDataManager } from './usePermissionsDataManager'; +export { default as useRegenerate } from './useRegenerate'; +export { default as useReleaseNotification } from './useReleaseNotification'; +export { default as useRolesList } from './useRolesList'; +export { default as useSettingsForm } from './useSettingsForm'; +export { default as useSettingsMenu } from './useSettingsMenu'; +export { default as useThemeToggle } from './useThemeToggle'; diff --git a/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplacePlugins/index.js b/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplacePlugins/index.js index 75a39fd7cb..5731e6dc97 100644 --- a/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplacePlugins/index.js +++ b/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplacePlugins/index.js @@ -1,6 +1,7 @@ -import { useQuery } from 'react-query'; import { useNotification } from '@strapi/helper-plugin'; import qs from 'qs'; +import { useQuery } from 'react-query'; + import { MARKETPLACE_API_URL } from '../constants'; const fetchMarketplacePlugins = async (params = {}) => { diff --git a/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplaceProviders/index.js b/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplaceProviders/index.js index bb67bc83c8..613ddce059 100644 --- a/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplaceProviders/index.js +++ b/packages/core/admin/admin/src/hooks/marketplace/useFetchMarketplaceProviders/index.js @@ -1,6 +1,7 @@ -import { useQuery } from 'react-query'; import { useNotification } from '@strapi/helper-plugin'; import qs from 'qs'; +import { useQuery } from 'react-query'; + import { MARKETPLACE_API_URL } from '../constants'; const fetchMarketplaceProviders = async (params = {}) => { diff --git a/packages/core/admin/admin/src/hooks/useAdminUsers/tests/useAdminUsers.test.js b/packages/core/admin/admin/src/hooks/useAdminUsers/tests/useAdminUsers.test.js index 4a465f10cf..d289c6d635 100644 --- a/packages/core/admin/admin/src/hooks/useAdminUsers/tests/useAdminUsers.test.js +++ b/packages/core/admin/admin/src/hooks/useAdminUsers/tests/useAdminUsers.test.js @@ -1,7 +1,8 @@ import * as React from 'react'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; + import { renderHook, waitFor } from '@testing-library/react'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; diff --git a/packages/core/admin/admin/src/hooks/useAdminUsers/useAdminUsers.js b/packages/core/admin/admin/src/hooks/useAdminUsers/useAdminUsers.js index 89bd5e0547..6ee7e79693 100644 --- a/packages/core/admin/admin/src/hooks/useAdminUsers/useAdminUsers.js +++ b/packages/core/admin/admin/src/hooks/useAdminUsers/useAdminUsers.js @@ -1,6 +1,6 @@ -import { useQuery } from 'react-query'; import { useFetchClient } from '@strapi/helper-plugin'; import { stringify } from 'qs'; +import { useQuery } from 'react-query'; export function useAdminUsers(params = {}, queryOptions = {}) { const { id = '', ...queryParams } = params; diff --git a/packages/core/admin/admin/src/hooks/useConfigurations/index.js b/packages/core/admin/admin/src/hooks/useConfigurations/index.js index 2c276eed65..6ef64a6a56 100644 --- a/packages/core/admin/admin/src/hooks/useConfigurations/index.js +++ b/packages/core/admin/admin/src/hooks/useConfigurations/index.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { ConfigurationsContext } from '../../contexts'; const useConfigurations = () => { diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js b/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js index 5eed3b6b58..5e9e3665c2 100644 --- a/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js +++ b/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js @@ -1,7 +1,8 @@ import * as React from 'react'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; + import { renderHook, waitFor } from '@testing-library/react'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; diff --git a/packages/core/admin/admin/src/hooks/useDebounce/index.js b/packages/core/admin/admin/src/hooks/useDebounce/index.js index 34257f7879..a03e8f6290 100644 --- a/packages/core/admin/admin/src/hooks/useDebounce/index.js +++ b/packages/core/admin/admin/src/hooks/useDebounce/index.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useEffect, useState } from 'react'; const useDebounce = (value, delay) => { const [debouncedValue, setDebouncedValue] = useState(value); diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/index.js b/packages/core/admin/admin/src/hooks/useEnterprise/index.js new file mode 100644 index 0000000000..72bb02a9a4 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useEnterprise/index.js @@ -0,0 +1 @@ +export * from './useEnterprise'; diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js b/packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js new file mode 100644 index 0000000000..47a8d20824 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useEnterprise/tests/useEnterprise.test.js @@ -0,0 +1,66 @@ +import { renderHook, waitFor } from '@testing-library/react'; + +import { useEnterprise } from '../useEnterprise'; + +const CE_DATA_FIXTURE = ['CE']; +const EE_DATA_FIXTURE = ['EE']; + +function setup(...args) { + return renderHook(() => useEnterprise(...args)); +} + +describe('useEnterprise (CE)', () => { + test('Returns CE data', async () => { + const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE); + + expect(result.current).toBe(CE_DATA_FIXTURE); + }); +}); + +describe('useEnterprise (EE)', () => { + beforeAll(() => { + window.strapi.isEE = true; + }); + + afterAll(() => { + window.strapi.isEE = false; + }); + + test('Returns default data on first render and EE data on second', async () => { + const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE); + + expect(result.current).toBe(null); + + await waitFor(() => expect(result.current).toBe(EE_DATA_FIXTURE)); + }); + + test('Combines CE and EE data', async () => { + const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE, { + combine(ceData, eeData) { + return [...ceData, ...eeData]; + }, + }); + + expect(result.current).toBe(null); + + await waitFor(() => + expect(result.current).toStrictEqual([...CE_DATA_FIXTURE, ...EE_DATA_FIXTURE]) + ); + }); + + test('Returns EE data without custom combine', async () => { + const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE); + + await waitFor(() => expect(result.current).toStrictEqual(EE_DATA_FIXTURE)); + }); + + test('Returns a custom defaultValue on first render followed by the EE data', async () => { + const { result } = setup(CE_DATA_FIXTURE, async () => EE_DATA_FIXTURE, { + defaultValue: false, + }); + + expect(result.current).toBe(false); + + await waitFor(() => expect(result.current).toStrictEqual(EE_DATA_FIXTURE)); + }); +}); diff --git a/packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js b/packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js new file mode 100644 index 0000000000..97688cd872 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useEnterprise/useEnterprise.js @@ -0,0 +1,36 @@ +import * as React from 'react'; + +import { useCallbackRef } from '@strapi/helper-plugin'; + +function isEnterprise() { + return window.strapi.isEE; +} + +export function useEnterprise( + ceData, + eeCallback, + { defaultValue = null, combine = (ceData, eeData) => eeData } = {} +) { + const eeCallbackRef = useCallbackRef(eeCallback); + const combineCallbackRef = useCallbackRef(combine); + + // We have to use a nested object here, because functions (e.g. Components) + // can not be stored as value directly + const [{ data }, setData] = React.useState({ + data: isEnterprise() ? defaultValue : ceData, + }); + + React.useEffect(() => { + async function importEE() { + const eeData = await eeCallbackRef(); + + setData({ data: combineCallbackRef(ceData, eeData) }); + } + + if (isEnterprise()) { + importEE(); + } + }, [ceData, eeCallbackRef, combineCallbackRef]); + + return data; +} diff --git a/packages/core/admin/admin/src/hooks/useFetchEnabledPlugins/index.js b/packages/core/admin/admin/src/hooks/useFetchEnabledPlugins/index.js index fbf4d84ddf..2e43a0427e 100644 --- a/packages/core/admin/admin/src/hooks/useFetchEnabledPlugins/index.js +++ b/packages/core/admin/admin/src/hooks/useFetchEnabledPlugins/index.js @@ -1,5 +1,6 @@ -import { useQuery } from 'react-query'; import { useNotification } from '@strapi/helper-plugin'; +import { useQuery } from 'react-query'; + import { fetchEnabledPlugins } from './utils/api'; const useFetchEnabledPlugins = (notifyLoad) => { diff --git a/packages/core/admin/admin/src/hooks/useFetchPermissionsLayout/index.js b/packages/core/admin/admin/src/hooks/useFetchPermissionsLayout/index.js index e38f7fc9a0..5db7e0a78c 100644 --- a/packages/core/admin/admin/src/hooks/useFetchPermissionsLayout/index.js +++ b/packages/core/admin/admin/src/hooks/useFetchPermissionsLayout/index.js @@ -1,4 +1,5 @@ import { useEffect, useReducer } from 'react'; + import { useFetchClient } from '@strapi/helper-plugin'; import reducer, { initialState } from './reducer'; diff --git a/packages/core/admin/admin/src/hooks/useFetchRole/index.js b/packages/core/admin/admin/src/hooks/useFetchRole/index.js index 633126ee66..c50649fb65 100644 --- a/packages/core/admin/admin/src/hooks/useFetchRole/index.js +++ b/packages/core/admin/admin/src/hooks/useFetchRole/index.js @@ -1,5 +1,7 @@ -import { useCallback, useReducer, useEffect } from 'react'; +import { useCallback, useEffect, useReducer } from 'react'; + import { useFetchClient, useNotification } from '@strapi/helper-plugin'; + import reducer, { initialState } from './reducer'; const useFetchRole = (id) => { diff --git a/packages/core/admin/admin/src/hooks/useInjectReducer/tests/useInjectReducer.test.js b/packages/core/admin/admin/src/hooks/useInjectReducer/tests/useInjectReducer.test.js index 49292b1b09..4510852a39 100644 --- a/packages/core/admin/admin/src/hooks/useInjectReducer/tests/useInjectReducer.test.js +++ b/packages/core/admin/admin/src/hooks/useInjectReducer/tests/useInjectReducer.test.js @@ -1,6 +1,7 @@ import React from 'react'; -import { Provider } from 'react-redux'; + import { renderHook } from '@testing-library/react'; +import { Provider } from 'react-redux'; import configureStore from '../../../core/store/configureStore'; import { useInjectReducer } from '../useInjectReducer'; diff --git a/packages/core/admin/admin/src/hooks/useInjectReducer/useInjectReducer.js b/packages/core/admin/admin/src/hooks/useInjectReducer/useInjectReducer.js index 0229250ec5..6ada2674ba 100644 --- a/packages/core/admin/admin/src/hooks/useInjectReducer/useInjectReducer.js +++ b/packages/core/admin/admin/src/hooks/useInjectReducer/useInjectReducer.js @@ -1,4 +1,5 @@ import { useEffect } from 'react'; + import { useStore } from 'react-redux'; /** diff --git a/packages/core/admin/admin/src/hooks/useMenu/index.js b/packages/core/admin/admin/src/hooks/useMenu/index.js index 4bf7c5f5bf..f216f691fe 100644 --- a/packages/core/admin/admin/src/hooks/useMenu/index.js +++ b/packages/core/admin/admin/src/hooks/useMenu/index.js @@ -1,8 +1,10 @@ import { useEffect, useReducer, useRef } from 'react'; -import { useRBACProvider, useAppInfo, useStrapiApp } from '@strapi/helper-plugin'; -import getPluginSectionLinks from './utils/getPluginSectionLinks'; -import getGeneralLinks from './utils/getGeneralLinks'; + +import { useAppInfo, useRBACProvider, useStrapiApp } from '@strapi/helper-plugin'; + import reducer, { initialState } from './reducer'; +import getGeneralLinks from './utils/getGeneralLinks'; +import getPluginSectionLinks from './utils/getPluginSectionLinks'; const useMenu = () => { const [state, dispatch] = useReducer(reducer, initialState); diff --git a/packages/core/admin/admin/src/hooks/useMenu/reducer.js b/packages/core/admin/admin/src/hooks/useMenu/reducer.js index 77d27379e2..cbc9577d37 100644 --- a/packages/core/admin/admin/src/hooks/useMenu/reducer.js +++ b/packages/core/admin/admin/src/hooks/useMenu/reducer.js @@ -1,6 +1,7 @@ /* eslint-disable consistent-return */ -import produce from 'immer'; import { Cog, Puzzle, ShoppingCart } from '@strapi/icons'; +import produce from 'immer'; + import adminPermissions from '../../permissions'; const initialState = { diff --git a/packages/core/admin/admin/src/hooks/useMenu/utils/getGeneralLinks.js b/packages/core/admin/admin/src/hooks/useMenu/utils/getGeneralLinks.js index a7e30f8a01..7e1a37d7b1 100644 --- a/packages/core/admin/admin/src/hooks/useMenu/utils/getGeneralLinks.js +++ b/packages/core/admin/admin/src/hooks/useMenu/utils/getGeneralLinks.js @@ -1,4 +1,5 @@ import cloneDeep from 'lodash/cloneDeep'; + import checkPermissions from './checkPermissions'; const getGeneralLinks = async (permissions, generalSectionRawLinks, shouldUpdateStrapi) => { diff --git a/packages/core/admin/admin/src/hooks/useMenu/utils/tests/getGeneralLinks.test.js b/packages/core/admin/admin/src/hooks/useMenu/utils/tests/getGeneralLinks.test.js index 59f0f35245..1f58125c5b 100644 --- a/packages/core/admin/admin/src/hooks/useMenu/utils/tests/getGeneralLinks.test.js +++ b/packages/core/admin/admin/src/hooks/useMenu/utils/tests/getGeneralLinks.test.js @@ -1,4 +1,5 @@ import { hasPermissions } from '@strapi/helper-plugin'; + import getGeneralLinks from '../getGeneralLinks'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js b/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js index 353d6b9e65..4b08738f0a 100644 --- a/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js +++ b/packages/core/admin/admin/src/hooks/useNavigatorOnLine/tests/index.test.js @@ -1,4 +1,5 @@ -import { renderHook, act, waitFor } from '@testing-library/react'; +import { act, renderHook, waitFor } from '@testing-library/react'; + import useNavigatorOnLine from '../index'; describe('useNavigatorOnLine', () => { diff --git a/packages/core/admin/admin/src/hooks/usePermissionsDataManager/index.js b/packages/core/admin/admin/src/hooks/usePermissionsDataManager/index.js index de407e5227..39f4d2c5f7 100644 --- a/packages/core/admin/admin/src/hooks/usePermissionsDataManager/index.js +++ b/packages/core/admin/admin/src/hooks/usePermissionsDataManager/index.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { PermissionsDataManagerContext } from '../../contexts'; const usePermissionsDataManager = () => useContext(PermissionsDataManagerContext); diff --git a/packages/core/admin/admin/src/hooks/useRegenerate/index.js b/packages/core/admin/admin/src/hooks/useRegenerate/index.js index bb64fbd436..b8b7e34285 100644 --- a/packages/core/admin/admin/src/hooks/useRegenerate/index.js +++ b/packages/core/admin/admin/src/hooks/useRegenerate/index.js @@ -1,5 +1,6 @@ import { useState } from 'react'; -import { useFetchClient, useNotification, useAPIErrorHandler } from '@strapi/helper-plugin'; + +import { useAPIErrorHandler, useFetchClient, useNotification } from '@strapi/helper-plugin'; const useRegenerate = (url, id, onRegenerate, onError) => { const [isLoadingConfirmation, setIsLoadingConfirmation] = useState(false); diff --git a/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js b/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js index ecf6478bd5..8b698f257c 100644 --- a/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js +++ b/packages/core/admin/admin/src/hooks/useRegenerate/tests/index.test.js @@ -1,6 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; + import { renderHook } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; + import useRegenerate from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/hooks/useReleaseNotification/index.js b/packages/core/admin/admin/src/hooks/useReleaseNotification/index.js index 26e4db1b2a..bd3a0ffb81 100644 --- a/packages/core/admin/admin/src/hooks/useReleaseNotification/index.js +++ b/packages/core/admin/admin/src/hooks/useReleaseNotification/index.js @@ -1,4 +1,5 @@ import { useEffect } from 'react'; + import { useAppInfo, useNotification } from '@strapi/helper-plugin'; const showUpdateNotif = !JSON.parse(localStorage.getItem('STRAPI_UPDATE_NOTIF')); diff --git a/packages/core/admin/admin/src/hooks/useRolesList/index.js b/packages/core/admin/admin/src/hooks/useRolesList/index.js index f35c1692de..42df7617d7 100644 --- a/packages/core/admin/admin/src/hooks/useRolesList/index.js +++ b/packages/core/admin/admin/src/hooks/useRolesList/index.js @@ -1,6 +1,8 @@ -import { useEffect, useReducer, useCallback } from 'react'; +import { useCallback, useEffect, useReducer } from 'react'; + import { getFetchClient, useNotification } from '@strapi/helper-plugin'; import get from 'lodash/get'; + import init from './init'; import reducer, { initialState } from './reducer'; diff --git a/packages/core/admin/admin/src/hooks/useSettingsForm/index.js b/packages/core/admin/admin/src/hooks/useSettingsForm/index.js index ce832d47ad..fe1d05911b 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsForm/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsForm/index.js @@ -1,9 +1,12 @@ import { useEffect, useReducer } from 'react'; + import { useFetchClient, useNotification, useOverlayBlocker } from '@strapi/helper-plugin'; import omit from 'lodash/omit'; + import { checkFormValidity, formatAPIErrors } from '../../utils'; -import { initialState, reducer } from './reducer'; + import init from './init'; +import { initialState, reducer } from './reducer'; /** * TODO: refactor this, it's confusing and hard to read. diff --git a/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js b/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js index 35891fae23..8e436fb4ea 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js +++ b/packages/core/admin/admin/src/hooks/useSettingsForm/tests/index.test.js @@ -1,6 +1,7 @@ -import { setupServer } from 'msw/node'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { rest } from 'msw'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { setupServer } from 'msw/node'; + import useSettingsForm from '../index'; const toggleNotification = jest.fn(); diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/constants.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/constants.js new file mode 100644 index 0000000000..6f3af0ed3c --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useSettingsMenu/constants.js @@ -0,0 +1,46 @@ +import adminPermissions from '../../permissions'; + +export const LINKS_CE = { + global: [ + { + intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' }, + to: '/settings/application-infos', + id: '000-application-infos', + permissions: [], + }, + { + intlLabel: { id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' }, + to: '/settings/webhooks', + id: 'webhooks', + permissions: adminPermissions.settings.webhooks.main, + }, + { + intlLabel: { id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' }, + to: '/settings/api-tokens?sort=name:ASC', + id: 'api-tokens', + permissions: adminPermissions.settings['api-tokens'].main, + }, + { + intlLabel: { id: 'Settings.transferTokens.title', defaultMessage: 'Transfer Tokens' }, + to: '/settings/transfer-tokens?sort=name:ASC', + id: 'transfer-tokens', + permissions: adminPermissions.settings['transfer-tokens'].main, + }, + ], + + admin: [ + { + intlLabel: { id: 'global.roles', defaultMessage: 'Roles' }, + to: '/settings/roles', + id: 'roles', + permissions: adminPermissions.settings.roles.main, + }, + { + intlLabel: { id: 'global.users' }, + // Init the search params directly + to: '/settings/users?pageSize=10&page=1&sort=firstname', + id: 'users', + permissions: adminPermissions.settings.users.main, + }, + ], +}; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js index 442eadecbc..170f827101 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js @@ -1,55 +1,95 @@ -import { useEffect, useReducer } from 'react'; +import { useState, useEffect } from 'react'; + import { hasPermissions, useRBACProvider, useStrapiApp, useAppInfo } from '@strapi/helper-plugin'; -import reducer, { initialState } from './reducer'; -import init from './init'; +import { useEnterprise } from '../useEnterprise'; -const useSettingsMenu = (noCheck = false) => { +import { LINKS_CE } from './constants'; +import formatLinks from './utils/formatLinks'; +import sortLinks from './utils/sortLinks'; + +const useSettingsMenu = () => { + const [{ isLoading, menu }, setData] = useState({ + isLoading: true, + menu: [], + }); const { allPermissions: permissions } = useRBACProvider(); const { shouldUpdateStrapi } = useAppInfo(); const { settings } = useStrapiApp(); - - const [{ isLoading, menu }, dispatch] = useReducer(reducer, initialState, () => - init(initialState, { settings, shouldUpdateStrapi }) + const { global: globalLinks, admin: adminLinks } = useEnterprise( + LINKS_CE, + async () => (await import('../../../../ee/admin/hooks/useSettingsMenu/constants')).LINKS_EE, + { + combine(ceLinks, eeLinks) { + return { + admin: [...eeLinks.admin, ...ceLinks.admin], + global: [...ceLinks.global, ...eeLinks.global], + }; + }, + defaultValue: { + admin: [], + global: [], + }, + } ); useEffect(() => { const getData = async () => { - const checkPermissions = async (permissionsToCheck, path) => { - const hasPermission = await hasPermissions(permissions, permissionsToCheck); + const buildMenuPermissions = (sections) => + Promise.all( + sections.reduce((acc, section, sectionIndex) => { + const buildMenuPermissions = (links) => + links.map(async (link, linkIndex) => ({ + hasPermission: await hasPermissions(permissions, link.permissions), + sectionIndex, + linkIndex, + })); - return { hasPermission, path }; - }; + return [...acc, ...buildMenuPermissions(section.links)]; + }, []) + ); - const generateArrayOfPromises = (array) => { - return array.reduce((acc, current, sectionIndex) => { - const generateArrayOfPromises = (array) => - array.map((link, index) => - checkPermissions(array[index].permissions, `${sectionIndex}.links.${index}`) + const menuPermissions = await buildMenuPermissions(sections); + + setData((prev) => ({ + ...prev, + isLoading: false, + menu: sections.map((section, sectionIndex) => ({ + ...section, + links: section.links.map((link, linkIndex) => { + const permission = menuPermissions.find( + (permission) => + permission.sectionIndex === sectionIndex && permission.linkIndex === linkIndex ); - return [...acc, ...generateArrayOfPromises(current.links)]; - }, []); - }; - - const generalSectionLinksArrayOfPromises = generateArrayOfPromises(menu); - - const data = await Promise.all(generalSectionLinksArrayOfPromises); - - dispatch({ - type: 'CHECK_PERMISSIONS_SUCCEEDED', - data, - }); + return { + ...link, + isDisplayed: Boolean(permission.hasPermission), + }; + }), + })), + })); }; - // This hook is also used by the main LeftMenu component in order to know which sections it needs to display/hide - // Therefore, we don't need to make the checking all the times when the hook is used. - if (!noCheck) { - getData(); - } + const { global, ...otherSections } = settings; + const sections = formatLinks([ + { + ...settings.global, + links: sortLinks([...settings.global.links, ...globalLinks]).map((link) => ({ + ...link, + hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, + })), + }, + { + id: 'permissions', + intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' }, + links: adminLinks, + }, + ...Object.values(otherSections), + ]); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [permissions, noCheck]); + getData(); + }, [adminLinks, globalLinks, permissions, settings, shouldUpdateStrapi]); return { isLoading, menu }; }; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/init.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/init.js deleted file mode 100644 index a017f6d7c3..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/init.js +++ /dev/null @@ -1,34 +0,0 @@ -import omit from 'lodash/omit'; -import sortLinks from './utils/sortLinks'; -import formatLinks from './utils/formatLinks'; -import adminLinks from './utils/adminLinks'; -import globalLinks from './utils/globalLinks'; - -const init = (initialState, { settings, shouldUpdateStrapi }) => { - // Retrieve the links that will be injected into the global section - const pluginsGlobalLinks = settings.global.links; - // Sort the links by name - const sortedGlobalLinks = sortLinks([...pluginsGlobalLinks, ...globalLinks]).map((link) => ({ - ...link, - hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, - })); - - const otherSections = Object.values(omit(settings, 'global')); - - const menu = [ - { - ...settings.global, - links: sortedGlobalLinks, - }, - { - id: 'permissions', - intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' }, - links: adminLinks, - }, - ...otherSections, - ]; - - return { ...initialState, menu: formatLinks(menu) }; -}; - -export default init; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/reducer.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/reducer.js deleted file mode 100644 index 9da7aba16f..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/reducer.js +++ /dev/null @@ -1,41 +0,0 @@ -import produce from 'immer'; -import set from 'lodash/set'; - -const initialState = { - menu: [], - isLoading: true, -}; - -const reducer = (state, action) => - // eslint-disable-next-line consistent-return - produce(state, (draftState) => { - switch (action.type) { - case 'CHECK_PERMISSIONS_SUCCEEDED': { - action.data.forEach((checkedPermissions) => { - if (checkedPermissions.hasPermission) { - set( - draftState, - ['menu', ...checkedPermissions.path.split('.'), 'isDisplayed'], - checkedPermissions.hasPermission - ); - } - }); - - // Remove the not needed links in each section - draftState.menu.forEach((section, sectionIndex) => { - draftState.menu[sectionIndex].links = section.links.filter( - (link) => link.isDisplayed === true - ); - }); - - draftState.isLoading = false; - break; - } - - default: - return draftState; - } - }); - -export default reducer; -export { initialState }; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/tests/reducer.test.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/tests/reducer.test.js deleted file mode 100644 index 5f5ca4328e..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/tests/reducer.test.js +++ /dev/null @@ -1,116 +0,0 @@ -import reducer from '../reducer'; - -describe('ADMIN | hooks | useSettingsMenu | reducer', () => { - describe('DEFAULT_ACTION', () => { - it('should return the state', () => { - const initialState = { - ok: true, - }; - const expected = { - ok: true, - }; - - expect(reducer(initialState, {})).toEqual(expected); - }); - }); - - describe('CHECK_PERMISSIONS_SUCCEEDED', () => { - it('should set the permissions correctly', () => { - const initialState = { - isLoading: true, - menu: [ - { - id: 'global', - links: [ - { - to: 'global.test', - isDisplayed: false, - }, - { - to: 'global.test2', - isDisplayed: false, - }, - ], - }, - { - id: 'test', - links: [ - { - to: 'test.test', - isDisplayed: false, - }, - { - to: 'test.test2', - isDisplayed: false, - }, - { - to: 'test.test3', - isDisplayed: false, - }, - ], - }, - { - id: 'test1', - links: [ - { - to: 'test1.test', - isDisplayed: false, - }, - { - to: 'test1.test2', - isDisplayed: false, - }, - { - to: 'test1.test3', - isDisplayed: false, - }, - ], - }, - ], - }; - const action = { - type: 'CHECK_PERMISSIONS_SUCCEEDED', - data: [ - { hasPermission: true, path: '1.links.0' }, - { hasPermission: true, path: '1.links.1' }, - { hasPermission: true, path: '0.links.1' }, - { hasPermission: undefined, path: '2.links.0' }, - ], - }; - - const expected = { - isLoading: false, - menu: [ - { - id: 'global', - links: [ - { - to: 'global.test2', - isDisplayed: true, - }, - ], - }, - { - id: 'test', - links: [ - { - to: 'test.test', - isDisplayed: true, - }, - { - to: 'test.test2', - isDisplayed: true, - }, - ], - }, - { - id: 'test1', - links: [], - }, - ], - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); -}); diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/adminLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/adminLinks.js deleted file mode 100644 index b4a2b02cf1..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/adminLinks.js +++ /dev/null @@ -1,4 +0,0 @@ -import customAdminLinks from 'ee_else_ce/hooks/useSettingsMenu/utils/customAdminLinks'; -import defaultAdminLinks from './defaultAdminLinks'; - -export default [...customAdminLinks, ...defaultAdminLinks]; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customAdminLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customAdminLinks.js deleted file mode 100644 index d6d1738de6..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customAdminLinks.js +++ /dev/null @@ -1 +0,0 @@ -export default []; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customGlobalLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customGlobalLinks.js deleted file mode 100644 index d6d1738de6..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/customGlobalLinks.js +++ /dev/null @@ -1 +0,0 @@ -export default []; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultAdminLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultAdminLinks.js deleted file mode 100644 index 28d0644fb0..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultAdminLinks.js +++ /dev/null @@ -1,21 +0,0 @@ -import adminPermissions from '../../../permissions'; - -const defaultAdminLinks = [ - { - intlLabel: { id: 'global.roles', defaultMessage: 'Roles' }, - to: '/settings/roles', - id: 'roles', - isDisplayed: false, - permissions: adminPermissions.settings.roles.main, - }, - { - intlLabel: { id: 'global.users' }, - // Init the search params directly - to: '/settings/users?pageSize=10&page=1&sort=firstname', - id: 'users', - isDisplayed: false, - permissions: adminPermissions.settings.users.main, - }, -]; - -export default defaultAdminLinks; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js deleted file mode 100644 index fee1aedc0b..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js +++ /dev/null @@ -1,34 +0,0 @@ -import adminPermissions from '../../../permissions'; - -const defaultGlobalLinks = [ - { - intlLabel: { id: 'Settings.application.title', defaultMessage: 'Overview' }, - to: '/settings/application-infos', - id: '000-application-infos', - isDisplayed: false, - permissions: [], - }, - { - intlLabel: { id: 'Settings.webhooks.title', defaultMessage: 'Webhooks' }, - to: '/settings/webhooks', - id: 'webhooks', - isDisplayed: false, - permissions: adminPermissions.settings.webhooks.main, - }, - { - intlLabel: { id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' }, - to: '/settings/api-tokens?sort=name:ASC', - id: 'api-tokens', - isDisplayed: false, - permissions: adminPermissions.settings['api-tokens'].main, - }, - { - intlLabel: { id: 'Settings.transferTokens.title', defaultMessage: 'Transfer Tokens' }, - to: '/settings/transfer-tokens?sort=name:ASC', - id: 'transfer-tokens', - isDisplayed: false, - permissions: adminPermissions.settings['transfer-tokens'].main, - }, -]; - -export default defaultGlobalLinks; diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/globalLinks.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/globalLinks.js deleted file mode 100644 index 32c1aef5cd..0000000000 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/utils/globalLinks.js +++ /dev/null @@ -1,4 +0,0 @@ -import customGlobalLinks from 'ee_else_ce/hooks/useSettingsMenu/utils/customGlobalLinks'; -import defaultGlobalLinks from './defaultGlobalLinks'; - -export default [...defaultGlobalLinks, ...customGlobalLinks]; diff --git a/packages/core/admin/admin/src/hooks/useThemeToggle/index.js b/packages/core/admin/admin/src/hooks/useThemeToggle/index.js index f58821c628..b78226b3e0 100644 --- a/packages/core/admin/admin/src/hooks/useThemeToggle/index.js +++ b/packages/core/admin/admin/src/hooks/useThemeToggle/index.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { ThemeToggleContext } from '../../contexts'; const useThemeToggle = () => { diff --git a/packages/core/admin/admin/src/index.js b/packages/core/admin/admin/src/index.js index fe95c7a121..65efa9596f 100644 --- a/packages/core/admin/admin/src/index.js +++ b/packages/core/admin/admin/src/index.js @@ -1,5 +1,6 @@ import { getFetchClient } from '@strapi/helper-plugin'; import { createRoot } from 'react-dom/client'; + import appCustomisations from './app'; import { Components, Fields, Middlewares, Reducers } from './core/apis'; // eslint-disable-next-line import/extensions diff --git a/packages/core/admin/admin/src/layouts/AppLayout/index.js b/packages/core/admin/admin/src/layouts/AppLayout/index.js index ab38827530..e8b44639ec 100644 --- a/packages/core/admin/admin/src/layouts/AppLayout/index.js +++ b/packages/core/admin/admin/src/layouts/AppLayout/index.js @@ -1,8 +1,9 @@ import React from 'react'; + import { Box, Flex, SkipToContent } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const FlexBox = styled(Box)` flex: 1; diff --git a/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js b/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js index 2fc7aefbb3..2228f517b2 100644 --- a/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js +++ b/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/LocaleToggle/index.js @@ -5,8 +5,10 @@ */ import React from 'react'; + +import { MenuItem, SimpleMenu } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import { SimpleMenu, MenuItem } from '@strapi/design-system'; + import useLocalesProvider from '../../../components/LocalesProvider/useLocalesProvider'; const LocaleToggle = () => { diff --git a/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/index.js b/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/index.js index e302298fb8..d1a599e835 100644 --- a/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/index.js +++ b/packages/core/admin/admin/src/layouts/UnauthenticatedLayout/index.js @@ -1,7 +1,9 @@ import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; + import LocaleToggle from './LocaleToggle'; const Wrapper = styled(Box)` diff --git a/packages/core/admin/admin/src/pages/Admin/Onboarding/index.js b/packages/core/admin/admin/src/pages/Admin/Onboarding/index.js index e0f25a7207..054249f958 100644 --- a/packages/core/admin/admin/src/pages/Admin/Onboarding/index.js +++ b/packages/core/admin/admin/src/pages/Admin/Onboarding/index.js @@ -1,22 +1,24 @@ import React, { useRef, useState } from 'react'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { useAppInfo } from '@strapi/helper-plugin'; + import { Box, Button, Divider, Flex, Icon, - Portal, PopoverPrimitives, + Portal, Typography, VisuallyHidden, } from '@strapi/design-system'; +import { useAppInfo } from '@strapi/helper-plugin'; import { Cross, Message, Play, Question } from '@strapi/icons'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import onboardingPreview from '../../../assets/images/onboarding-preview.png'; -import { VIDEO_LINKS, DOCUMENTATION_LINKS, WATCH_MORE } from './constants'; + +import { DOCUMENTATION_LINKS, VIDEO_LINKS, WATCH_MORE } from './constants'; // TODO: use new Button props derived from Box props with next DS release const HelperButton = styled(Button)` diff --git a/packages/core/admin/admin/src/pages/Admin/Onboarding/tests/index.test.js b/packages/core/admin/admin/src/pages/Admin/Onboarding/tests/index.test.js index 5efe4e0e2d..f0fc382f8d 100644 --- a/packages/core/admin/admin/src/pages/Admin/Onboarding/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/Admin/Onboarding/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useAppInfo } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { IntlProvider } from 'react-intl'; -import { useAppInfo } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import Onboarding from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/pages/Admin/index.js b/packages/core/admin/admin/src/pages/Admin/index.js index f9264d2118..9b22045af3 100644 --- a/packages/core/admin/admin/src/pages/Admin/index.js +++ b/packages/core/admin/admin/src/pages/Admin/index.js @@ -4,19 +4,21 @@ * */ -import React, { Suspense, useEffect, useMemo, lazy } from 'react'; -import { Switch, Route } from 'react-router-dom'; -import { useTracking, LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin'; -import { useDispatch, useSelector } from 'react-redux'; +import React, { lazy, Suspense, useEffect, useMemo } from 'react'; + +import { LoadingIndicatorPage, useStrapiApp, useTracking } from '@strapi/helper-plugin'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { useDispatch, useSelector } from 'react-redux'; +import { Route, Switch } from 'react-router-dom'; import GuidedTourModal from '../../components/GuidedTour/Modal'; import LeftMenu from '../../components/LeftMenu'; +import { useConfigurations, useMenu } from '../../hooks'; import AppLayout from '../../layouts/AppLayout'; -import { useMenu, useConfigurations } from '../../hooks'; import { createRoute } from '../../utils'; import { SET_APP_RUNTIME_STATUS } from '../App/constants'; + import Onboarding from './Onboarding'; const CM = lazy(() => diff --git a/packages/core/admin/admin/src/pages/Admin/tests/index.test.js b/packages/core/admin/admin/src/pages/Admin/tests/index.test.js index 86a29c05a4..7bab863979 100644 --- a/packages/core/admin/admin/src/pages/Admin/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/Admin/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; -import { Router } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useStrapiApp } from '@strapi/helper-plugin'; import { render, screen, waitFor } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; -import { useStrapiApp } from '@strapi/helper-plugin'; +import { Router } from 'react-router-dom'; + import { useMenu } from '../../../hooks'; import Admin from '../index'; diff --git a/packages/core/admin/admin/src/pages/Admin/tests/useTrackUsage.test.js b/packages/core/admin/admin/src/pages/Admin/tests/useTrackUsage.test.js index 47e25a0ddb..196db07a35 100644 --- a/packages/core/admin/admin/src/pages/Admin/tests/useTrackUsage.test.js +++ b/packages/core/admin/admin/src/pages/Admin/tests/useTrackUsage.test.js @@ -1,4 +1,5 @@ import { renderHook } from '@testing-library/react'; + import { useTrackUsage } from '../index'; const trackUsageMock = jest.fn(); diff --git a/packages/core/admin/admin/src/pages/App/constants.js b/packages/core/admin/admin/src/pages/App/constants.js index c714ab8592..863003a1b9 100644 --- a/packages/core/admin/admin/src/pages/App/constants.js +++ b/packages/core/admin/admin/src/pages/App/constants.js @@ -1 +1,3 @@ export const SET_APP_RUNTIME_STATUS = 'StrapiAdmin/APP/SET_APP_RUNTIME_STATUS'; + +export const ROUTES_CE = []; diff --git a/packages/core/admin/admin/src/pages/App/index.js b/packages/core/admin/admin/src/pages/App/index.js index 438c3d800a..90dcb1875c 100644 --- a/packages/core/admin/admin/src/pages/App/index.js +++ b/packages/core/admin/admin/src/pages/App/index.js @@ -4,33 +4,44 @@ * */ -import React, { useEffect, useState, useMemo, lazy, Suspense } from 'react'; -import { Switch, Route } from 'react-router-dom'; +import React, { lazy, Suspense, useEffect, useMemo, useState } from 'react'; + +import { SkipToContent } from '@strapi/design-system'; import { - LoadingIndicatorPage, auth, - useNotification, - TrackingProvider, + LoadingIndicatorPage, prefixFileUrlWithBackendUrl, + TrackingProvider, useAppInfo, useFetchClient, + useNotification, } from '@strapi/helper-plugin'; -import { SkipToContent } from '@strapi/design-system'; import { useIntl } from 'react-intl'; +import { Route, Switch } from 'react-router-dom'; + import PrivateRoute from '../../components/PrivateRoute'; +import { useConfigurations } from '../../hooks'; +import { useEnterprise } from '../../hooks/useEnterprise'; import { createRoute, makeUniqueRoutes } from '../../utils'; import AuthPage from '../AuthPage'; import NotFoundPage from '../NotFoundPage'; import UseCasePage from '../UseCasePage'; + +import { ROUTES_CE } from './constants'; import { getUID } from './utils'; -import routes from './utils/routes'; -import { useConfigurations } from '../../hooks'; const AuthenticatedApp = lazy(() => import(/* webpackChunkName: "Admin-authenticatedApp" */ '../../components/AuthenticatedApp') ); function App() { + const routes = useEnterprise( + ROUTES_CE, + async () => (await import('../../../../ee/admin/pages/App/constants')).ROUTES_EE, + { + defaultValue: [], + } + ); const toggleNotification = useNotification(); const { updateProjectSettings } = useConfigurations(); const { formatMessage } = useIntl(); @@ -45,7 +56,7 @@ function App() { return makeUniqueRoutes( routes.map(({ to, Component, exact }) => createRoute(Component, to, exact)) ); - }, []); + }, [routes]); const [telemetryProperties, setTelemetryProperties] = useState(null); @@ -99,15 +110,24 @@ function App() { setTelemetryProperties(properties); try { - await post('https://analytics.strapi.io/api/v2/track', { - // This event is anonymous - event: 'didInitializeAdministration', - userId: '', - deviceId, - eventPropeties: {}, - userProperties: { environment: appInfo.currentEnvironment }, - groupProperties: { ...properties, projectId: uuid }, - }); + const event = 'didInitializeAdministration'; + await post( + 'https://analytics.strapi.io/api/v2/track', + { + // This event is anonymous + event, + userId: '', + deviceId, + eventPropeties: {}, + userProperties: { environment: appInfo.currentEnvironment }, + groupProperties: { ...properties, projectId: uuid }, + }, + { + headers: { + 'X-Strapi-Event': event, + }, + } + ); } catch (e) { // Silent. } diff --git a/packages/core/admin/admin/src/pages/App/reducer.js b/packages/core/admin/admin/src/pages/App/reducer.js index 6e4a54a887..117ed9f6d8 100644 --- a/packages/core/admin/admin/src/pages/App/reducer.js +++ b/packages/core/admin/admin/src/pages/App/reducer.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import { SET_APP_RUNTIME_STATUS } from './constants'; const initialState = { diff --git a/packages/core/admin/admin/src/pages/App/utils/customRoutes.js b/packages/core/admin/admin/src/pages/App/utils/customRoutes.js deleted file mode 100644 index 090dc83436..0000000000 --- a/packages/core/admin/admin/src/pages/App/utils/customRoutes.js +++ /dev/null @@ -1,3 +0,0 @@ -const customRoutes = []; - -export default customRoutes; diff --git a/packages/core/admin/admin/src/pages/App/utils/defaultRoutes.js b/packages/core/admin/admin/src/pages/App/utils/defaultRoutes.js deleted file mode 100644 index a8ac1b41be..0000000000 --- a/packages/core/admin/admin/src/pages/App/utils/defaultRoutes.js +++ /dev/null @@ -1,3 +0,0 @@ -const defaultRoutes = []; - -export default defaultRoutes; diff --git a/packages/core/admin/admin/src/pages/App/utils/index.js b/packages/core/admin/admin/src/pages/App/utils/index.js index e554a192a4..bb5c7e9658 100644 --- a/packages/core/admin/admin/src/pages/App/utils/index.js +++ b/packages/core/admin/admin/src/pages/App/utils/index.js @@ -1,3 +1,3 @@ /* eslint-disable import/prefer-default-export */ + export { default as getUID } from './unique-identifier'; -export { default as routes } from './routes'; diff --git a/packages/core/admin/admin/src/pages/App/utils/routes.js b/packages/core/admin/admin/src/pages/App/utils/routes.js deleted file mode 100644 index 11d425c416..0000000000 --- a/packages/core/admin/admin/src/pages/App/utils/routes.js +++ /dev/null @@ -1,4 +0,0 @@ -import customRoutes from 'ee_else_ce/pages/App/utils/customRoutes'; -import defaultRoutes from './defaultRoutes'; - -export default [...customRoutes, ...defaultRoutes]; diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/FieldActionWrapper/index.js b/packages/core/admin/admin/src/pages/AuthPage/components/FieldActionWrapper/index.js index f3f6623524..ccaccf4080 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/FieldActionWrapper/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/FieldActionWrapper/index.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { FieldAction } from '@strapi/design-system'; +import styled from 'styled-components'; const FieldActionWrapper = styled(FieldAction)` svg { diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPassword/index.js b/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPassword/index.js index 00e3ea407d..3871e6c7e2 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPassword/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPassword/index.js @@ -1,14 +1,16 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + +import { Box, Button, Flex, Main, TextInput, Typography } from '@strapi/design-system'; import { Form, Link } from '@strapi/helper-plugin'; -import { Box, Flex, Main, Button, TextInput, Typography } from '@strapi/design-system'; import { Formik } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + +import Logo from '../../../../components/UnauthenticatedLogo'; import UnauthenticatedLayout, { Column, LayoutContent, } from '../../../../layouts/UnauthenticatedLayout'; -import Logo from '../../../../components/UnauthenticatedLogo'; const ForgotPassword = ({ onSubmit, schema }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js b/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js index 49428c0146..40c8dd23a6 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/ForgotPasswordSuccess/index.js @@ -1,12 +1,14 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Main, Typography } from '@strapi/design-system'; import { Link } from '@strapi/helper-plugin'; -import { Box, Main, Flex, Typography } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + +import Logo from '../../../../components/UnauthenticatedLogo'; import UnauthenticatedLayout, { Column, LayoutContent, } from '../../../../layouts/UnauthenticatedLayout'; -import Logo from '../../../../components/UnauthenticatedLogo'; const ForgotPasswordSuccess = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/Login/BaseLogin.js b/packages/core/admin/admin/src/pages/AuthPage/components/Login/BaseLogin.js index 811a1a9492..66f21f3e90 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/Login/BaseLogin.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/Login/BaseLogin.js @@ -1,13 +1,15 @@ import React, { useState } from 'react'; + +import { Box, Button, Checkbox, Flex, Main, TextInput, Typography } from '@strapi/design-system'; import { Form, Link } from '@strapi/helper-plugin'; -import { EyeStriked, Eye } from '@strapi/icons'; -import { Box, Main, Flex, Button, TextInput, Checkbox, Typography } from '@strapi/design-system'; +import { Eye, EyeStriked } from '@strapi/icons'; +import { Formik } from 'formik'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { Formik } from 'formik'; -import { Column, LayoutContent } from '../../../../layouts/UnauthenticatedLayout'; + import Logo from '../../../../components/UnauthenticatedLogo'; +import { Column, LayoutContent } from '../../../../layouts/UnauthenticatedLayout'; import FieldActionWrapper from '../FieldActionWrapper'; const PasswordInput = styled(TextInput)` diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/Login/index.js b/packages/core/admin/admin/src/pages/AuthPage/components/Login/index.js index 84c066ecf6..37fef863ca 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/Login/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/Login/index.js @@ -1,8 +1,11 @@ import React from 'react'; + import PropTypes from 'prop-types'; -import BaseLogin from './BaseLogin'; + import UnauthenticatedLayout from '../../../../layouts/UnauthenticatedLayout'; +import BaseLogin from './BaseLogin'; + const Login = (loginProps) => { return ( diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/Login/tests/BaseLogin.test.js b/packages/core/admin/admin/src/pages/AuthPage/components/Login/tests/BaseLogin.test.js index 56f789e427..281b586e7a 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/Login/tests/BaseLogin.test.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/Login/tests/BaseLogin.test.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { Router } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import * as yup from 'yup'; import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; +import { Router } from 'react-router-dom'; +import * as yup from 'yup'; + import BaseLogin from '../BaseLogin'; jest.mock('../../../../../hooks/useConfigurations', () => () => ({ @@ -624,6 +626,10 @@ describe('ADMIN | PAGES | AUTH | BaseLogin', () => { border: 2px solid #4945ff; } + .c5 { + height: 4.5rem; + } + .c2 { margin: 0 auto; width: 552px; @@ -635,10 +641,6 @@ describe('ADMIN | PAGES | AUTH | BaseLogin', () => { flex-direction: column; } - .c5 { - height: 4.5rem; - } - .c26 svg { height: 1rem; width: 1rem; diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/Oops/index.js b/packages/core/admin/admin/src/pages/AuthPage/components/Oops/index.js index 8450e363f6..b618816f30 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/Oops/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/Oops/index.js @@ -1,12 +1,14 @@ import React from 'react'; + +import { Box, Flex, Main, Typography } from '@strapi/design-system'; +import { Link, useQuery } from '@strapi/helper-plugin'; import { useIntl } from 'react-intl'; -import { useQuery, Link } from '@strapi/helper-plugin'; -import { Box, Main, Flex, Typography } from '@strapi/design-system'; + +import Logo from '../../../../components/UnauthenticatedLogo'; import UnauthenticatedLayout, { Column, LayoutContent, } from '../../../../layouts/UnauthenticatedLayout'; -import Logo from '../../../../components/UnauthenticatedLogo'; const Oops = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/AuthPage/components/Oops/tests/index.test.js b/packages/core/admin/admin/src/pages/AuthPage/components/Oops/tests/index.test.js index b2f9e5aae5..5a74776069 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/components/Oops/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/AuthPage/components/Oops/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; +import { Router } from 'react-router-dom'; + import Oops from '..'; jest.mock('../../../../../components/LocalesProvider/useLocalesProvider', () => () => ({ @@ -349,6 +351,10 @@ describe('ADMIN | PAGES | AUTH | Oops', () => { border: 2px solid #4945ff; } + .c15 { + height: 4.5rem; + } + .c13 { margin: 0 auto; width: 552px; @@ -360,10 +366,6 @@ describe('ADMIN | PAGES | AUTH | Oops', () => { flex-direction: column; } - .c15 { - height: 4.5rem; - } -
() => ({ @@ -586,6 +588,10 @@ describe('ADMIN | PAGES | AUTH | ResetPassword', () => { border: 2px solid #4945ff; } + .c15 { + height: 4.5rem; + } + .c13 { margin: 0 auto; width: 552px; @@ -597,10 +603,6 @@ describe('ADMIN | PAGES | AUTH | ResetPassword', () => { flex-direction: column; } - .c15 { - height: 4.5rem; - } - .c32 svg { height: 1rem; width: 1rem; diff --git a/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js b/packages/core/admin/admin/src/pages/AuthPage/constants.js similarity index 92% rename from packages/core/admin/admin/src/pages/AuthPage/utils/forms.js rename to packages/core/admin/admin/src/pages/AuthPage/constants.js index ec4239ee34..9c22bfadd8 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/utils/forms.js +++ b/packages/core/admin/admin/src/pages/AuthPage/constants.js @@ -1,13 +1,14 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; import Login from 'ee_else_ce/pages/AuthPage/components/Login'; -import ForgotPassword from '../components/ForgotPassword'; -import ForgotPasswordSuccess from '../components/ForgotPasswordSuccess'; -import Oops from '../components/Oops'; -import Register from '../components/Register'; -import ResetPassword from '../components/ResetPassword'; +import * as yup from 'yup'; -const forms = { +import ForgotPassword from './components/ForgotPassword'; +import ForgotPasswordSuccess from './components/ForgotPasswordSuccess'; +import Oops from './components/Oops'; +import Register from './components/Register'; +import ResetPassword from './components/ResetPassword'; + +export const FORMS = { 'forgot-password': { Component: ForgotPassword, endPoint: 'forgot-password', @@ -118,5 +119,3 @@ const forms = { }), }, }; - -export default forms; diff --git a/packages/core/admin/admin/src/pages/AuthPage/index.js b/packages/core/admin/admin/src/pages/AuthPage/index.js index 361e114e5c..a49c60ed87 100644 --- a/packages/core/admin/admin/src/pages/AuthPage/index.js +++ b/packages/core/admin/admin/src/pages/AuthPage/index.js @@ -1,15 +1,19 @@ import React, { useEffect, useReducer } from 'react'; + +import { auth, useFetchClient, useGuidedTour, useQuery, useTracking } from '@strapi/helper-plugin'; import axios from 'axios'; import camelCase from 'lodash/camelCase'; import get from 'lodash/get'; import omit from 'lodash/omit'; -import { Redirect, useRouteMatch, useHistory } from 'react-router-dom'; -import { auth, useQuery, useGuidedTour, useTracking, useFetchClient } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import forms from 'ee_else_ce/pages/AuthPage/utils/forms'; +import { Redirect, useHistory, useRouteMatch } from 'react-router-dom'; + import persistStateToLocaleStorage from '../../components/GuidedTour/utils/persistStateToLocaleStorage'; import useLocalesProvider from '../../components/LocalesProvider/useLocalesProvider'; +import { useEnterprise } from '../../hooks/useEnterprise'; import formatAPIErrors from '../../utils/formatAPIErrors'; + +import { FORMS } from './constants'; import init from './init'; import { initialState, reducer } from './reducer'; @@ -25,10 +29,19 @@ const AuthPage = ({ hasAdmin, setHasAdmin }) => { params: { authType }, } = useRouteMatch('/auth/:authType'); const query = useQuery(); - const { Component, endPoint, fieldsToDisable, fieldsToOmit, inputsPrefix, schema, ...rest } = get( - forms, - authType, - {} + const forms = useEnterprise( + FORMS, + async () => (await import('../../../../ee/admin/pages/AuthPage/constants')).FORMS, + { + combine(ceForms, eeForms) { + return { + ...ceForms, + ...eeForms, + }; + }, + + defaultValue: FORMS, + } ); const [{ formErrors, modifiedData, requestError }, dispatch] = useReducer( reducer, @@ -37,6 +50,8 @@ const AuthPage = ({ hasAdmin, setHasAdmin }) => { ); const CancelToken = axios.CancelToken; const source = CancelToken.source(); + const { Component, endPoint, fieldsToDisable, fieldsToOmit, inputsPrefix, schema, ...rest } = + forms?.[authType] ?? {}; useEffect(() => { // Cancel request on unmount diff --git a/packages/core/admin/admin/src/pages/AuthPage/utils/index.js b/packages/core/admin/admin/src/pages/AuthPage/utils/index.js deleted file mode 100644 index 67c9083218..0000000000 --- a/packages/core/admin/admin/src/pages/AuthPage/utils/index.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable import/prefer-default-export */ -export { default as forms } from './forms'; diff --git a/packages/core/admin/admin/src/pages/HomePage/CloudBox.js b/packages/core/admin/admin/src/pages/HomePage/CloudBox.js index c05aada847..f67b7a0a7c 100644 --- a/packages/core/admin/admin/src/pages/HomePage/CloudBox.js +++ b/packages/core/admin/admin/src/pages/HomePage/CloudBox.js @@ -1,11 +1,13 @@ import React from 'react'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { useTracking, pxToRem } from '@strapi/helper-plugin'; + import { Box, Flex, Typography } from '@strapi/design-system'; +import { pxToRem, useTracking } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import cloudIconBackgroundImage from './assets/strapi-cloud-background.png'; -import cloudIcon from './assets/strapi-cloud-icon.svg'; import cloudFlagsImage from './assets/strapi-cloud-flags.svg'; +import cloudIcon from './assets/strapi-cloud-icon.svg'; const BlockLink = styled.a` text-decoration: none; diff --git a/packages/core/admin/admin/src/pages/HomePage/ContentBlocks.js b/packages/core/admin/admin/src/pages/HomePage/ContentBlocks.js index a1cb3c8183..84ec0ac4fe 100644 --- a/packages/core/admin/admin/src/pages/HomePage/ContentBlocks.js +++ b/packages/core/admin/admin/src/pages/HomePage/ContentBlocks.js @@ -1,9 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { ContentBox, useTracking } from '@strapi/helper-plugin'; + import { Flex } from '@strapi/design-system'; -import { InformationSquare, CodeSquare, PlaySquare, FeatherSquare } from '@strapi/icons'; +import { ContentBox, useTracking } from '@strapi/helper-plugin'; +import { CodeSquare, FeatherSquare, InformationSquare, PlaySquare } from '@strapi/icons'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import CloudBox from './CloudBox'; const BlockLink = styled.a` diff --git a/packages/core/admin/admin/src/pages/HomePage/HomeHeader.js b/packages/core/admin/admin/src/pages/HomePage/HomeHeader.js index 1ec96b456d..8fb94c5a9e 100644 --- a/packages/core/admin/admin/src/pages/HomePage/HomeHeader.js +++ b/packages/core/admin/admin/src/pages/HomePage/HomeHeader.js @@ -1,10 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { Typography, Box, Button, Flex } from '@strapi/design-system'; + +import { Box, Button, Flex, Typography } from '@strapi/design-system'; import { Link } from '@strapi/design-system/v2'; import { ArrowRight } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const WordWrap = styled(Typography)` word-break: break-word; diff --git a/packages/core/admin/admin/src/pages/HomePage/SocialLinks.js b/packages/core/admin/admin/src/pages/HomePage/SocialLinks.js index affc7304f4..e290ab2c42 100644 --- a/packages/core/admin/admin/src/pages/HomePage/SocialLinks.js +++ b/packages/core/admin/admin/src/pages/HomePage/SocialLinks.js @@ -4,12 +4,13 @@ */ import React from 'react'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { useAppInfo } from '@strapi/helper-plugin'; -import { Typography, Box, Flex, Grid, GridItem } from '@strapi/design-system'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import { Link, LinkButton } from '@strapi/design-system/v2'; -import { ExternalLink, Github, Discord, Reddit, Strapi, Twitter, Discourse } from '@strapi/icons'; +import { useAppInfo } from '@strapi/helper-plugin'; +import { Discord, Discourse, ExternalLink, Github, Reddit, Strapi, Twitter } from '@strapi/icons'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const StyledDiscord = styled(Discord)` path { diff --git a/packages/core/admin/admin/src/pages/HomePage/index.js b/packages/core/admin/admin/src/pages/HomePage/index.js index af0b084c04..2d44595f5c 100644 --- a/packages/core/admin/admin/src/pages/HomePage/index.js +++ b/packages/core/admin/admin/src/pages/HomePage/index.js @@ -4,21 +4,23 @@ */ import React, { memo, useMemo } from 'react'; -import { FormattedMessage } from 'react-intl'; -import styled from 'styled-components'; -import { Helmet } from 'react-helmet'; -import { useHistory } from 'react-router-dom'; + +import { Box, Grid, GridItem, Layout, Main } from '@strapi/design-system'; import { LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin'; -import { Layout, Main, Box, Grid, GridItem } from '@strapi/design-system'; import useLicenseLimitNotification from 'ee_else_ce/hooks/useLicenseLimitNotification'; +import { Helmet } from 'react-helmet'; +import { FormattedMessage } from 'react-intl'; +import { useHistory } from 'react-router-dom'; +import styled from 'styled-components'; + +import GuidedTourHomepage from '../../components/GuidedTour/Homepage'; +import isGuidedTourCompleted from '../../components/GuidedTour/utils/isGuidedTourCompleted'; +import { useContentTypes } from '../../hooks/useContentTypes'; import cornerOrnamentPath from './assets/corner-ornament.svg'; -import { useContentTypes } from '../../hooks/useContentTypes'; -import isGuidedTourCompleted from '../../components/GuidedTour/utils/isGuidedTourCompleted'; -import GuidedTourHomepage from '../../components/GuidedTour/Homepage'; -import SocialLinks from './SocialLinks'; -import HomeHeader from './HomeHeader'; import ContentBlocks from './ContentBlocks'; +import HomeHeader from './HomeHeader'; +import SocialLinks from './SocialLinks'; const LogoContainer = styled(Box)` position: absolute; diff --git a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js index d7628fa989..6fe68eaea2 100644 --- a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js @@ -1,12 +1,14 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useAppInfo } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; -import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; -import { useAppInfo } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import HomePage from '../index'; +import { Router } from 'react-router-dom'; + import { useContentTypes } from '../../../hooks/useContentTypes'; +import HomePage from '../index'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/pages/InstalledPluginsPage/Plugins.js b/packages/core/admin/admin/src/pages/InstalledPluginsPage/Plugins.js index 06dfbf5027..4dfc60a9ba 100644 --- a/packages/core/admin/admin/src/pages/InstalledPluginsPage/Plugins.js +++ b/packages/core/admin/admin/src/pages/InstalledPluginsPage/Plugins.js @@ -1,20 +1,22 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { LoadingIndicatorPage, useFocusWhenNavigate } from '@strapi/helper-plugin'; + import { - useNotifyAT, - Layout, - HeaderLayout, ContentLayout, + HeaderLayout, + Layout, Main, - Typography, Table, - Thead, Tbody, - Tr, Td, Th, + Thead, + Tr, + Typography, + useNotifyAT, } from '@strapi/design-system'; +import { LoadingIndicatorPage, useFocusWhenNavigate } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; + import useFetchEnabledPlugins from '../../hooks/useFetchEnabledPlugins'; const Plugins = () => { diff --git a/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js b/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js index 5a9932b349..f158486493 100644 --- a/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js +++ b/packages/core/admin/admin/src/pages/InstalledPluginsPage/index.js @@ -1,8 +1,11 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; + import adminPermissions from '../../permissions'; + import Plugins from './Plugins'; const InstalledPluginsPage = () => { diff --git a/packages/core/admin/admin/src/pages/InternalErrorPage/index.js b/packages/core/admin/admin/src/pages/InternalErrorPage/index.js index 8444c2a285..030b408e49 100644 --- a/packages/core/admin/admin/src/pages/InternalErrorPage/index.js +++ b/packages/core/admin/admin/src/pages/InternalErrorPage/index.js @@ -5,9 +5,10 @@ * */ import React from 'react'; -import { useFocusWhenNavigate, LinkButton } from '@strapi/helper-plugin'; -import { Main, ContentLayout, HeaderLayout, EmptyStateLayout } from '@strapi/design-system'; -import { EmptyPictures, ArrowRight } from '@strapi/icons'; + +import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system'; +import { LinkButton, useFocusWhenNavigate } from '@strapi/helper-plugin'; +import { ArrowRight, EmptyPictures } from '@strapi/icons'; import { useIntl } from 'react-intl'; const InternalErrorPage = () => { diff --git a/packages/core/admin/admin/src/pages/InternalErrorPage/tests/index.test.js b/packages/core/admin/admin/src/pages/InternalErrorPage/tests/index.test.js index 3104f41cad..a0ea8beddd 100644 --- a/packages/core/admin/admin/src/pages/InternalErrorPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/InternalErrorPage/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { Router } from 'react-router-dom'; + import InternalErrorPage from '../index'; const history = createMemoryHistory(); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/EmptyNpmPackageGrid.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/EmptyNpmPackageGrid.js index 68a8aafd2b..47b58fb633 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/EmptyNpmPackageGrid.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/EmptyNpmPackageGrid.js @@ -1,6 +1,7 @@ import React from 'react'; -import styled from 'styled-components'; + import { Box, GridLayout } from '@strapi/design-system'; +import styled from 'styled-components'; const EmptyPluginCard = styled(Box)` background: ${({ theme }) => diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/index.js index 674c0d4d85..9ee608e02d 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/index.js @@ -1,7 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Typography, Box, Flex, Icon } from '@strapi/design-system'; + +import { Box, Flex, Icon, Typography } from '@strapi/design-system'; import { EmptyDocuments } from '@strapi/icons'; +import PropTypes from 'prop-types'; + import { EmptyNpmPackageGrid } from './EmptyNpmPackageGrid'; const EmptyNpmPackageSearch = ({ content }) => { diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js index b1782b5a49..1a2ecd84b6 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/MissingPluginBanner/index.js @@ -1,8 +1,9 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { ContentBox, useTracking } from '@strapi/helper-plugin'; -import { GlassesSquare, ExternalLink } from '@strapi/icons'; + import { Icon } from '@strapi/design-system'; +import { ContentBox, useTracking } from '@strapi/helper-plugin'; +import { ExternalLink, GlassesSquare } from '@strapi/icons'; +import { useIntl } from 'react-intl'; const MissingPluginBanner = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/CardButton.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/CardButton.js index 77c9b75a3d..9555e1ce3c 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/CardButton.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/CardButton.js @@ -1,9 +1,10 @@ import React from 'react'; -import semver from 'semver'; + +import { Box, Button, Tooltip } from '@strapi/design-system'; +import { Duplicate } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Tooltip, Button, Box } from '@strapi/design-system'; -import { Duplicate } from '@strapi/icons'; +import semver from 'semver'; const TooltipButton = ({ description, installMessage, disabled, handleCopy, pluginName }) => ( diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js index 6450c627fe..40fd5ae5df 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { Box, Icon, Typography } from '@strapi/design-system'; +import { useClipboard, useNotification, useTracking } from '@strapi/helper-plugin'; +import { Check } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useNotification, useTracking, useClipboard } from '@strapi/helper-plugin'; -import { Box, Icon, Typography } from '@strapi/design-system'; -import { Check } from '@strapi/icons'; + import CardButton from './CardButton'; const InstallPluginButton = ({ diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/PackageStats.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/PackageStats.js index 78505aee89..0e6254e092 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/PackageStats.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/PackageStats.js @@ -1,10 +1,11 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { Typography, Icon, Divider, Flex } from '@strapi/design-system'; -import { Github, Download, Star } from '@strapi/icons'; + +import { Divider, Flex, Icon, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; +import { Download, Github, Star } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const VerticalDivider = styled(Divider)` width: ${pxToRem(12)}; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/index.js index b4d9e59dd4..e9cb6ebe54 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/index.js @@ -1,13 +1,16 @@ import React from 'react'; + +import { Box, Flex, Icon, Tooltip, Typography } from '@strapi/design-system'; +import { LinkButton } from '@strapi/design-system/v2'; +import { useTracking } from '@strapi/helper-plugin'; +import { CheckCircle, ExternalLink } from '@strapi/icons'; +import pluralize from 'pluralize'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import pluralize from 'pluralize'; -import { Box, Typography, Flex, Icon, Tooltip } from '@strapi/design-system'; -import { LinkButton } from '@strapi/design-system/v2'; -import { ExternalLink, CheckCircle } from '@strapi/icons'; -import { useTracking } from '@strapi/helper-plugin'; + import StrapiLogo from '../../../../assets/images/logo-strapi-2022.svg'; + import InstallPluginButton from './InstallPluginButton'; import PackageStats from './PackageStats'; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FilterSelect.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FilterSelect.js index eb716a1ed8..384cf169b1 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FilterSelect.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FilterSelect.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Select, Option } from '@strapi/design-system'; const FilterSelect = ({ message, value, onChange, possibleFilters, onClear, customizeContent }) => { const computeFilterMessage = (filterName, count) => { diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FiltersPopover.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FiltersPopover.js index 48e131d010..1a49ee16b7 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FiltersPopover.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/FiltersPopover.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { Flex, Popover } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Popover, Flex } from '@strapi/design-system'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import FilterSelect from './FilterSelect'; const FiltersPopover = ({ diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/index.js index 4134658bd6..082d5aac47 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesFilters/index.js @@ -1,9 +1,11 @@ -import React, { useState, useRef } from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; +import React, { useRef, useState } from 'react'; + import { Box, Button, Tag } from '@strapi/design-system'; import { Cross, Filter } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import FiltersPopover from './FiltersPopover'; const FilterTag = ({ name, handleRemove }) => { diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js index dbbf8f5862..633402b4a1 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js @@ -1,10 +1,12 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Grid, GridItem, Flex, Loader } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; + +import { Flex, Grid, GridItem, Loader } from '@strapi/design-system'; import { AnErrorOccurred } from '@strapi/helper-plugin'; -import NpmPackageCard from '../NpmPackageCard'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import EmptyNpmPackageSearch from '../EmptyNpmPackageSearch'; +import NpmPackageCard from '../NpmPackageCard'; const NpmPackagesGrid = ({ status, diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesPagination/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesPagination/index.js index 5850b8c744..a23fff2de3 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesPagination/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackagesPagination/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; -import { PaginationURLQuery, PageSizeURLQuery } from '@strapi/helper-plugin'; +import { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; const NpmPackagesPagination = ({ pagination }) => { return ( diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/OfflineLayout/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/OfflineLayout/index.js index 1a8983c20f..c9046ccc56 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/OfflineLayout/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/OfflineLayout/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Layout, Main, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; -import { Box, Flex, Typography, Layout, Main } from '@strapi/design-system'; -import PageHeader from '../PageHeader'; +import { useIntl } from 'react-intl'; + import offlineCloud from '../../../../assets/images/icon_offline-cloud.svg'; +import PageHeader from '../PageHeader'; const OfflineLayout = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/PageHeader/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/PageHeader/index.js index dd964ba412..759cafc0d6 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/PageHeader/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/PageHeader/index.js @@ -1,10 +1,11 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { HeaderLayout } from '@strapi/design-system'; import { LinkButton } from '@strapi/design-system/v2'; -import { Upload } from '@strapi/icons'; import { useTracking } from '@strapi/helper-plugin'; +import { Upload } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const PageHeader = ({ isOnline, npmPackageType }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/SortSelect/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/SortSelect/index.js index 0d2ca89744..a07e76b0ea 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/SortSelect/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/SortSelect/index.js @@ -1,8 +1,9 @@ import React from 'react'; -import styled from 'styled-components'; -import { Select, Option, Box } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; + +import { Box, Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const SelectWrapper = styled(Box)` font-weight: ${({ theme }) => theme.fontWeights.semiBold}; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/index.js b/packages/core/admin/admin/src/pages/MarketplacePage/index.js index 74a3253050..ec2b3ceda1 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/index.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/index.js @@ -1,38 +1,40 @@ import React, { useEffect, useRef, useState } from 'react'; -import { useIntl } from 'react-intl'; -import { Helmet } from 'react-helmet'; + import { - CheckPagePermissions, - useFocusWhenNavigate, - useTracking, - useNotification, - useAppInfo, - useQueryParams, -} from '@strapi/helper-plugin'; -import { - Layout, + Box, ContentLayout, + Flex, + Layout, Main, Searchbar, - Box, - Flex, - Tabs, Tab, TabGroup, - TabPanels, TabPanel, + TabPanels, + Tabs, } from '@strapi/design-system'; +import { + CheckPagePermissions, + useAppInfo, + useFocusWhenNavigate, + useNotification, + useQueryParams, + useTracking, +} from '@strapi/helper-plugin'; +import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; -import PageHeader from './components/PageHeader'; -import adminPermissions from '../../permissions'; -import useNavigatorOnLine from '../../hooks/useNavigatorOnLine'; -import MissingPluginBanner from './components/MissingPluginBanner'; -import NpmPackagesGrid from './components/NpmPackagesGrid'; -import SortSelect from './components/SortSelect'; -import NpmPackagesFilters from './components/NpmPackagesFilters'; -import NpmPackagesPagination from './components/NpmPackagesPagination'; import useDebounce from '../../hooks/useDebounce'; +import useNavigatorOnLine from '../../hooks/useNavigatorOnLine'; +import adminPermissions from '../../permissions'; + +import MissingPluginBanner from './components/MissingPluginBanner'; +import NpmPackagesFilters from './components/NpmPackagesFilters'; +import NpmPackagesGrid from './components/NpmPackagesGrid'; +import NpmPackagesPagination from './components/NpmPackagesPagination'; import OfflineLayout from './components/OfflineLayout'; +import PageHeader from './components/PageHeader'; +import SortSelect from './components/SortSelect'; import useMarketplaceData from './utils/useMarketplaceData'; const MarketPlacePage = () => { diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/__snapshots__/index.test.js.snap b/packages/core/admin/admin/src/pages/MarketplacePage/tests/__snapshots__/index.test.js.snap index dcbae9aac9..75e2cdfb09 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/__snapshots__/index.test.js.snap +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/__snapshots__/index.test.js.snap @@ -1135,6 +1135,10 @@ exports[`Marketplace page - layout renders the online layout 1`] = ` word-break: break-all; } +.c54 { + height: 2rem; +} + .c70 { width: 0.75rem; -webkit-transform: rotate(90deg); @@ -1169,10 +1173,6 @@ exports[`Marketplace page - layout renders the online layout 1`] = ` width: 1px; } -.c54 { - height: 2rem; -} - @media (max-width:68.75rem) { .c57 { grid-column: span 6; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js index 2f7237a815..4280fabff3 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/index.test.js @@ -1,14 +1,17 @@ import React from 'react'; -import { render, screen, fireEvent, within } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider, useAppInfo, useTracking } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useTracking, useAppInfo, TrackingProvider } from '@strapi/helper-plugin'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; + import useNavigatorOnLine from '../../../hooks/useNavigatorOnLine'; import MarketPlacePage from '../index'; + import server from './server'; const toggleNotification = jest.fn(); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js index 3836938df5..75baacedf8 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/plugins.test.js @@ -1,13 +1,16 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider } from '@strapi/helper-plugin'; import { render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { TrackingProvider } from '@strapi/helper-plugin'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; + import MarketPlacePage from '../index'; + import server from './server'; // Increase the jest timeout to accommodate long running tests diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js index 489cdf7530..b32edc81ad 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/providers.test.js @@ -1,15 +1,16 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider } from '@strapi/helper-plugin'; import { render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { TrackingProvider } from '@strapi/helper-plugin'; - import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; import MarketPlacePage from '../index'; + import server from './server'; // Increase the jest timeout to accommodate long running tests diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/tests/server.js b/packages/core/admin/admin/src/pages/MarketplacePage/tests/server.js index 57e94c26d4..09c9d84fff 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/tests/server.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/tests/server.js @@ -1,6 +1,7 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; import qs from 'qs'; + import { responses as pluginResponses } from './mocks/plugins'; import { responses as providerResponses } from './mocks/providers'; diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js b/packages/core/admin/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js index 983200c6ca..e338ec0ae2 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js @@ -1,6 +1,8 @@ -import { useState, useEffect } from 'react'; -import { useIntl } from 'react-intl'; +import { useEffect, useState } from 'react'; + import { useNotifyAT } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import useFetchMarketplacePlugins from '../../../hooks/marketplace/useFetchMarketplacePlugins'; import useFetchMarketplaceProviders from '../../../hooks/marketplace/useFetchMarketplaceProviders'; diff --git a/packages/core/admin/admin/src/pages/NotFoundPage/index.js b/packages/core/admin/admin/src/pages/NotFoundPage/index.js index 739658ba9e..a48d81b1b2 100644 --- a/packages/core/admin/admin/src/pages/NotFoundPage/index.js +++ b/packages/core/admin/admin/src/pages/NotFoundPage/index.js @@ -5,9 +5,10 @@ * */ import React from 'react'; -import { useFocusWhenNavigate, LinkButton } from '@strapi/helper-plugin'; -import { Main, ContentLayout, HeaderLayout, EmptyStateLayout } from '@strapi/design-system'; -import { EmptyPictures, ArrowRight } from '@strapi/icons'; + +import { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system'; +import { LinkButton, useFocusWhenNavigate } from '@strapi/helper-plugin'; +import { ArrowRight, EmptyPictures } from '@strapi/icons'; import { useIntl } from 'react-intl'; const NoContentType = () => { diff --git a/packages/core/admin/admin/src/pages/NotFoundPage/tests/index.test.js b/packages/core/admin/admin/src/pages/NotFoundPage/tests/index.test.js index 3b563eac6f..028c91b616 100644 --- a/packages/core/admin/admin/src/pages/NotFoundPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/NotFoundPage/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { Router } from 'react-router-dom'; + import NotFoundPage from '../index'; const history = createMemoryHistory(); diff --git a/packages/core/admin/admin/src/pages/ProfilePage/components/Password/index.js b/packages/core/admin/admin/src/pages/ProfilePage/components/Password/index.js index 9a42ee9691..1a44387205 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/components/Password/index.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/components/Password/index.js @@ -1,18 +1,19 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; + import { - Typography, Box, + FieldAction, + Flex, Grid, GridItem, - Flex, - FieldAction, TextInput, + Typography, } from '@strapi/design-system'; -import { Eye, EyeStriked } from '@strapi/icons'; -import { useIntl } from 'react-intl'; import { pxToRem } from '@strapi/helper-plugin'; +import { Eye, EyeStriked } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const PasswordInput = styled(TextInput)` ::-ms-reveal { diff --git a/packages/core/admin/admin/src/pages/ProfilePage/components/Preferences/index.js b/packages/core/admin/admin/src/pages/ProfilePage/components/Preferences/index.js index 9ce72a602e..fc39f4fc01 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/components/Preferences/index.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/components/Preferences/index.js @@ -1,8 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Typography, Box, Grid, GridItem, Flex, Select, Option } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Grid, GridItem, Option, Select, Typography } from '@strapi/design-system'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const Preferences = ({ onChange, values, localeNames, allApplicationThemes }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/ProfilePage/components/UserInfo/index.js b/packages/core/admin/admin/src/pages/ProfilePage/components/UserInfo/index.js index 670f1b592a..739d589623 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/components/UserInfo/index.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/components/UserInfo/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import { GenericInput } from '@strapi/helper-plugin'; -import { Typography, Box, Grid, GridItem, Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; const UserInfo = ({ errors, onChange, values }) => { diff --git a/packages/core/admin/admin/src/pages/ProfilePage/index.js b/packages/core/admin/admin/src/pages/ProfilePage/index.js index eb0dd53731..4382f2f4ef 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/index.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/index.js @@ -1,37 +1,40 @@ import React from 'react'; + import { + Box, + Button, + ContentLayout, + Flex, + HeaderLayout, + Main, + useNotifyAT, +} from '@strapi/design-system'; +import { + auth, Form, LoadingIndicatorPage, useAppInfo, + useFetchClient, useFocusWhenNavigate, useNotification, useOverlayBlocker, - auth, useTracking, - useFetchClient, } from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; -import { Formik } from 'formik'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { Helmet } from 'react-helmet'; -import { - Main, - Box, - ContentLayout, - HeaderLayout, - Button, - Flex, - useNotifyAT, -} from '@strapi/design-system'; import { Check } from '@strapi/icons'; -import UserInfo from './components/UserInfo'; -import Preferences from './components/Preferences'; -import Password from './components/Password'; +import { Formik } from 'formik'; +import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; + import useLocalesProvider from '../../components/LocalesProvider/useLocalesProvider'; import { useThemeToggle } from '../../hooks'; -import schema from './utils/schema'; import { getFullName } from '../../utils'; +import Password from './components/Password'; +import Preferences from './components/Preferences'; +import UserInfo from './components/UserInfo'; +import schema from './utils/schema'; + const ProfilePage = () => { const { changeLocale, localeNames } = useLocalesProvider(); const { setUserDisplayName } = useAppInfo(); diff --git a/packages/core/admin/admin/src/pages/ProfilePage/tests/index.test.js b/packages/core/admin/admin/src/pages/ProfilePage/tests/index.test.js index 33a4a47ea8..7bc06d6cce 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/tests/index.test.js @@ -1,13 +1,16 @@ import React from 'react'; -import { render, waitFor, screen } from '@testing-library/react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + +import Theme from '../../../components/Theme'; +import ThemeToggleProvider from '../../../components/ThemeToggleProvider'; import ProfilePage from '../index'; + import server from './utils/server'; import serverLockedSSO from './utils/serverLockedSSO'; -import ThemeToggleProvider from '../../../components/ThemeToggleProvider'; -import Theme from '../../../components/Theme'; jest.mock('../../../components/LocalesProvider/useLocalesProvider'); diff --git a/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/server.js b/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/server.js index e91c9ac520..1f52b32791 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/server.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/me', (req, res, ctx) => { diff --git a/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/serverLockedSSO.js b/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/serverLockedSSO.js index dfc1cdfc24..ec1b2ba569 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/serverLockedSSO.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/tests/utils/serverLockedSSO.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/me', (req, res, ctx) => { diff --git a/packages/core/admin/admin/src/pages/ProfilePage/utils/schema.js b/packages/core/admin/admin/src/pages/ProfilePage/utils/schema.js index c9d0f6963c..dba5a0d276 100644 --- a/packages/core/admin/admin/src/pages/ProfilePage/utils/schema.js +++ b/packages/core/admin/admin/src/pages/ProfilePage/utils/schema.js @@ -1,4 +1,5 @@ import * as yup from 'yup'; + import { profileValidation } from '../../SettingsPage/pages/Users/utils/validations/users'; const schema = yup.object().shape(profileValidation); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Filters/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Filters/index.js index 48e851f492..4232fddd8d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Filters/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Filters/index.js @@ -1,9 +1,10 @@ import React, { useRef, useState } from 'react'; + +import { Box, Button } from '@strapi/design-system'; +import { FilterListURLQuery, FilterPopoverURLQuery } from '@strapi/helper-plugin'; +import { Filter } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Button, Box } from '@strapi/design-system'; -import { Filter } from '@strapi/icons'; -import { FilterListURLQuery, FilterPopoverURLQuery } from '@strapi/helper-plugin'; const Filters = ({ displayedFilters }) => { const [isVisible, setIsVisible] = useState(false); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js index 73511c98fa..1ceea2a1ad 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js @@ -1,15 +1,17 @@ import React from 'react'; -import { NavLink, useLocation } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { useTracking } from '@strapi/helper-plugin'; + import { SubNav, SubNavHeader, + SubNavLink, SubNavSection, SubNavSections, - SubNavLink, } from '@strapi/design-system/v2'; +import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { NavLink, useLocation } from 'react-router-dom'; + import { getSectionsToDisplay } from '../../utils'; const SettingsNav = ({ menu }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js index c503ff095a..fe32c197da 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import SettingsNav from '../index'; const menu = [ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js index deb1df8307..a62118928e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + +import { Button, Flex, HeaderLayout } from '@strapi/design-system'; import { Link } from '@strapi/helper-plugin'; import { ArrowLeft, Check } from '@strapi/icons'; -import { Button, HeaderLayout, Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import Regenerate from '../Regenerate'; const FormHead = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js index 45492e2b88..72b901ddb8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { Option, Select, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option, Typography } from '@strapi/design-system'; + import { getDateOfExpiration } from '../../../pages/ApiTokens/EditView/utils'; const LifeSpanInput = ({ token, errors, values, onChange, isCreating }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js index 33fb99ddac..e232566eb3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js @@ -1,9 +1,11 @@ import React, { useState } from 'react'; + +import { Button } from '@strapi/design-system'; +import { ConfirmDialog } from '@strapi/helper-plugin'; +import { Refresh } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Button } from '@strapi/design-system'; -import { Refresh } from '@strapi/icons'; -import { ConfirmDialog } from '@strapi/helper-plugin'; + import { useRegenerate } from '../../../../../hooks'; export const Regenerate = ({ onRegenerate, idToRegenerate, backUrl, onError }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DefaultButton/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DefaultButton/index.js index e49dd1de84..121e31433b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DefaultButton/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DefaultButton/index.js @@ -1,9 +1,10 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Link } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import styled from 'styled-components'; -import { Link } from '@strapi/helper-plugin'; const MESSAGES_MAP = { edit: { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/index.js index 926c70a373..8803f70bc8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/index.js @@ -1,9 +1,10 @@ import React, { useState } from 'react'; + +import { Box, IconButton } from '@strapi/design-system'; +import { ConfirmDialog, useTracking } from '@strapi/helper-plugin'; import { Trash } from '@strapi/icons'; -import { IconButton, Box } from '@strapi/design-system'; -import { useTracking, ConfirmDialog } from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const DeleteButton = ({ tokenName, onClickDelete, tokenType }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/tests/DeleteButton.test.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/tests/DeleteButton.test.js index 3a4ba74cee..1ae78f0ec5 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/tests/DeleteButton.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/DeleteButton/tests/DeleteButton.test.js @@ -1,8 +1,9 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; import { act, fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { NotificationsProvider } from '@strapi/helper-plugin'; import DeleteButton from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/ReadButton/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/ReadButton/index.js index c94a763ce9..b018d85762 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/ReadButton/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/ReadButton/index.js @@ -1,6 +1,8 @@ import React from 'react'; + import { Eye } from '@strapi/icons'; import PropTypes from 'prop-types'; + import DefaultButton from '../DefaultButton'; const ReadButton = ({ tokenName, tokenId }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/UpdateButton/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/UpdateButton/index.js index f732c32c3d..73ef82fb22 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/UpdateButton/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/UpdateButton/index.js @@ -1,6 +1,8 @@ import React from 'react'; + import { Pencil } from '@strapi/icons'; import PropTypes from 'prop-types'; + import DefaultButton from '../DefaultButton'; const UpdateButton = ({ tokenName, tokenId }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/index.js index f46a0765a3..d585534f75 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/Table/index.js @@ -1,18 +1,20 @@ import React from 'react'; -import { useHistory } from 'react-router-dom'; -import PropTypes from 'prop-types'; -import { Typography, Flex, Tbody, Tr, Td } from '@strapi/design-system'; + +import { Flex, Tbody, Td, Tr, Typography } from '@strapi/design-system'; import { - RelativeTime, + DynamicTable, onRowClick, pxToRem, - DynamicTable, + RelativeTime, useQueryParams, useTracking, } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useHistory } from 'react-router-dom'; + import DeleteButton from './DeleteButton'; -import UpdateButton from './UpdateButton'; import ReadButton from './ReadButton'; +import UpdateButton from './UpdateButton'; const Table = ({ permissions, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js index 62b24d4ff2..b624ef1f06 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js @@ -1,9 +1,10 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { ContentBox, useNotification, useTracking, useClipboard } from '@strapi/helper-plugin'; + import { IconButton } from '@strapi/design-system'; +import { ContentBox, useClipboard, useNotification, useTracking } from '@strapi/helper-plugin'; import { Duplicate, Key } from '@strapi/icons'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const TokenBox = ({ token, tokenType }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js index a329e5452e..59b22bbb07 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Textarea } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Textarea } from '@strapi/design-system'; const TokenDescription = ({ errors, values, onChange, canEditInputs }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js index 47cc2b8f6a..942f1065f6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { TextInput } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { TextInput } from '@strapi/design-system'; const TokenName = ({ errors, values, onChange, canEditInputs }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js index 83ef6cb546..85637a356e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js @@ -1,9 +1,9 @@ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option } from '@strapi/design-system'; - const TokenTypeSelect = ({ name, errors, values, onChange, canEditInputs, options, label }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js b/packages/core/admin/admin/src/pages/SettingsPage/constants.js similarity index 64% rename from packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js rename to packages/core/admin/admin/src/pages/SettingsPage/constants.js index 4e07a98a7d..8c9c255bc6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/defaultRoutes.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/constants.js @@ -1,8 +1,8 @@ -const defaultRoutes = [ +export const ROUTES_CE = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-roles-list" */ '../pages/Roles/ProtectedListPage' + /* webpackChunkName: "admin-roles-list" */ './pages/Roles/ProtectedListPage' ); return component; @@ -13,7 +13,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-edit-roles-page" */ '../pages/Roles/CreatePage' + /* webpackChunkName: "admin-edit-roles-page" */ './pages/Roles/CreatePage' ); return component; @@ -24,7 +24,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-edit-roles-page" */ '../pages/Roles/CreatePage' + /* webpackChunkName: "admin-edit-roles-page" */ './pages/Roles/CreatePage' ); return component; @@ -35,7 +35,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-edit-roles-page" */ '../pages/Roles/ProtectedEditPage' + /* webpackChunkName: "admin-edit-roles-page" */ './pages/Roles/ProtectedEditPage' ); return component; @@ -46,7 +46,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-users" */ '../pages/Users/ProtectedListPage' + /* webpackChunkName: "admin-users" */ './pages/Users/ProtectedListPage' ); return component; @@ -57,7 +57,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "admin-edit-users" */ '../pages/Users/ProtectedEditPage' + /* webpackChunkName: "admin-edit-users" */ './pages/Users/ProtectedEditPage' ); return component; @@ -68,7 +68,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "webhook-edit-page" */ '../pages/Webhooks/ProtectedCreateView' + /* webpackChunkName: "webhook-edit-page" */ './pages/Webhooks/ProtectedCreateView' ); return component; @@ -79,7 +79,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "webhook-edit-page" */ '../pages/Webhooks/ProtectedEditView' + /* webpackChunkName: "webhook-edit-page" */ './pages/Webhooks/ProtectedEditView' ); return component; @@ -90,7 +90,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "webhook-list-page" */ '../pages/Webhooks/ProtectedListView' + /* webpackChunkName: "webhook-list-page" */ './pages/Webhooks/ProtectedListView' ); return component; @@ -101,7 +101,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "api-tokens-list-page" */ '../pages/ApiTokens/ProtectedListView' + /* webpackChunkName: "api-tokens-list-page" */ './pages/ApiTokens/ProtectedListView' ); return component; @@ -112,7 +112,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "api-tokens-create-page" */ '../pages/ApiTokens/ProtectedCreateView' + /* webpackChunkName: "api-tokens-create-page" */ './pages/ApiTokens/ProtectedCreateView' ); return component; @@ -123,7 +123,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "api-tokens-edit-page" */ '../pages/ApiTokens/ProtectedEditView' + /* webpackChunkName: "api-tokens-edit-page" */ './pages/ApiTokens/ProtectedEditView' ); return component; @@ -134,7 +134,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "transfer-tokens-create-page" */ '../pages/TransferTokens/ProtectedCreateView' + /* webpackChunkName: "transfer-tokens-create-page" */ './pages/TransferTokens/ProtectedCreateView' ); return component; @@ -145,7 +145,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "transfer-tokens-list-page" */ '../pages/TransferTokens/ProtectedListView' + /* webpackChunkName: "transfer-tokens-list-page" */ './pages/TransferTokens/ProtectedListView' ); return component; @@ -156,7 +156,7 @@ const defaultRoutes = [ { async Component() { const component = await import( - /* webpackChunkName: "transfer-tokens-edit-page" */ '../pages/TransferTokens/ProtectedEditView' + /* webpackChunkName: "transfer-tokens-edit-page" */ './pages/TransferTokens/ProtectedEditView' ); return component; @@ -165,5 +165,3 @@ const defaultRoutes = [ exact: true, }, ]; - -export default defaultRoutes; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/index.js index 4c01daca6a..8cb573afe8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/index.js @@ -10,29 +10,44 @@ // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED import React, { memo, useMemo } from 'react'; -import { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin'; -import { Switch, Redirect, Route, useParams } from 'react-router-dom'; + import { Layout } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; +import { LoadingIndicatorPage, useStrapiApp } from '@strapi/helper-plugin'; import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; +import { Redirect, Route, Switch, useParams } from 'react-router-dom'; + import { useSettingsMenu } from '../../hooks'; +import { useEnterprise } from '../../hooks/useEnterprise'; import { createRoute, makeUniqueRoutes } from '../../utils'; -import ApplicationInfosPage from './pages/ApplicationInfosPage'; -import { createSectionsRoutes, routes } from './utils'; + import SettingsNav from './components/SettingsNav'; +import { ROUTES_CE } from './constants'; +import ApplicationInfosPage from './pages/ApplicationInfosPage'; +import { createSectionsRoutes } from './utils'; function SettingsPage() { const { settingId } = useParams(); const { settings } = useStrapiApp(); const { formatMessage } = useIntl(); const { isLoading, menu } = useSettingsMenu(); + const routes = useEnterprise( + ROUTES_CE, + async () => (await import('../../../../ee/admin/pages/SettingsPage/constants')).ROUTES_EE, + { + combine(ceRoutes, eeRoutes) { + return [...ceRoutes, ...eeRoutes]; + }, + defaultValue: [], + } + ); // Creates the admin routes const adminRoutes = useMemo(() => { return makeUniqueRoutes( routes.map(({ to, Component, exact }) => createRoute(Component, to, exact)) ); - }, []); + }, [routes]); const pluginsRoutes = createSectionsRoutes(settings); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js index 5217eb4662..75542b39ac 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { Flex, GridItem, Typography } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import { Typography, Flex, GridItem } from '@strapi/design-system'; -import BoundRoute from '../BoundRoute'; + import { useApiTokenPermissionsContext } from '../../../../../../../contexts/ApiTokenPermissions'; +import BoundRoute from '../BoundRoute'; const ActionBoundRoutes = () => { const { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js index 8168db7da3..0f3467bc5a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js @@ -1,10 +1,12 @@ import React from 'react'; -import styled from 'styled-components'; -import { Flex, Box, Typography } from '@strapi/design-system'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import map from 'lodash/map'; import tail from 'lodash/tail'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import getMethodColor from './getMethodColor'; const MethodBox = styled(Box)` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js index 5a1b456336..e3165e258d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js @@ -1,5 +1,5 @@ -import styled, { css } from 'styled-components'; import { Box } from '@strapi/design-system'; +import styled, { css } from 'styled-components'; const activeCheckboxWrapperStyles = css` background: ${(props) => props.theme.colors.primary100}; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js index 87288b7484..147720b84e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js @@ -1,21 +1,24 @@ -import React, { useState, useEffect } from 'react'; -import capitalize from 'lodash/capitalize'; -import { useIntl } from 'react-intl'; +import React, { useEffect, useState } from 'react'; + import { Accordion, - AccordionToggle, AccordionContent, + AccordionToggle, + Box, Checkbox, + Flex, Grid, GridItem, Typography, - Box, - Flex, } from '@strapi/design-system'; import { Cog } from '@strapi/icons'; -import styled from 'styled-components'; +import capitalize from 'lodash/capitalize'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { useApiTokenPermissionsContext } from '../../../../../../../contexts/ApiTokenPermissions'; + import CheckboxWrapper from './CheckBoxWrapper'; const Border = styled.div` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js index 5339c7d550..c9e4383654 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js @@ -1,6 +1,8 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import CollapsableContentType from '../CollapsableContentType'; const ContentTypesSection = ({ section, ...props }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js index 3994cdc415..f0bfe1ea20 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js @@ -1,10 +1,12 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, Grid, GridItem, Flex, Typography } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import LifeSpanInput from '../../../../../components/Tokens/LifeSpanInput'; -import TokenName from '../../../../../components/Tokens/TokenName'; import TokenDescription from '../../../../../components/Tokens/TokenDescription'; +import TokenName from '../../../../../components/Tokens/TokenName'; import TokenTypeSelect from '../../../../../components/Tokens/TokenTypeSelect'; const FormApiTokenContainer = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js index 92d8157bf1..6c01c069b7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/LoadingView/index.js @@ -1,13 +1,14 @@ import React from 'react'; + +import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; import { - SettingsPageTitle, LoadingIndicatorPage, + SettingsPageTitle, useFocusWhenNavigate, } from '@strapi/helper-plugin'; -import { HeaderLayout, ContentLayout, Main, Button } from '@strapi/design-system'; import { Check } from '@strapi/icons'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const LoadingView = ({ apiTokenName }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js index 2d13a5c889..11bc80363a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js @@ -1,9 +1,11 @@ import React, { memo } from 'react'; + +import { Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import { Typography, Flex, Grid, GridItem } from '@strapi/design-system'; -import ContentTypesSection from '../ContenTypesSection'; -import ActionBoundRoutes from '../ActionBoundRoutes'; + import { useApiTokenPermissionsContext } from '../../../../../../../contexts/ApiTokenPermissions'; +import ActionBoundRoutes from '../ActionBoundRoutes'; +import ContentTypesSection from '../ContenTypesSection'; const Permissions = ({ ...props }) => { const { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js index fc2cfa6df9..99a56a9f04 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js @@ -1,9 +1,11 @@ import React, { useState } from 'react'; + +import { Button } from '@strapi/design-system'; +import { ConfirmDialog } from '@strapi/helper-plugin'; +import { Refresh } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Button } from '@strapi/design-system'; -import { Refresh } from '@strapi/icons'; -import { ConfirmDialog } from '@strapi/helper-plugin'; + import { useRegenerate } from '../../../../../../../hooks'; export const Regenerate = ({ onRegenerate, idToRegenerate }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js index 1445e1e7a2..06481fe9be 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js @@ -1,32 +1,35 @@ -import React, { useEffect, useState, useRef, useReducer } from 'react'; -import { useIntl } from 'react-intl'; +import React, { useEffect, useReducer, useRef, useState } from 'react'; + +import { ContentLayout, Flex, Main } from '@strapi/design-system'; import { - SettingsPageTitle, - useFocusWhenNavigate, Form, - useOverlayBlocker, - useNotification, - useTracking, - useGuidedTour, - useRBAC, + SettingsPageTitle, useFetchClient, + useFocusWhenNavigate, + useGuidedTour, + useNotification, + useOverlayBlocker, + useRBAC, + useTracking, } from '@strapi/helper-plugin'; -import { Main, ContentLayout, Flex } from '@strapi/design-system'; import { Formik } from 'formik'; -import { useRouteMatch, useHistory } from 'react-router-dom'; +import { useIntl } from 'react-intl'; import { useQuery } from 'react-query'; -import { formatAPIErrors } from '../../../../../utils'; -import { schema } from './utils'; -import LoadingView from './components/LoadingView'; -import adminPermissions from '../../../../../permissions'; +import { useHistory, useRouteMatch } from 'react-router-dom'; + import { ApiTokenPermissionsContextProvider } from '../../../../../contexts/ApiTokenPermissions'; +import adminPermissions from '../../../../../permissions'; +import { formatAPIErrors } from '../../../../../utils'; +import { API_TOKEN_TYPE } from '../../../components/Tokens/constants'; +import FormHead from '../../../components/Tokens/FormHead'; +import TokenBox from '../../../components/Tokens/TokenBox'; + +import FormApiTokenContainer from './components/FormApiTokenContainer'; +import LoadingView from './components/LoadingView'; +import Permissions from './components/Permissions'; import init from './init'; import reducer, { initialState } from './reducer'; -import Permissions from './components/Permissions'; -import FormApiTokenContainer from './components/FormApiTokenContainer'; -import TokenBox from '../../../components/Tokens/TokenBox'; -import FormHead from '../../../components/Tokens/FormHead'; -import { API_TOKEN_TYPE } from '../../../components/Tokens/constants'; +import { schema } from './utils'; const MSG_ERROR_NAME_TAKEN = 'Name already taken'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js index d094d822d4..160a505186 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js @@ -1,6 +1,7 @@ /* eslint-disable consistent-return */ import produce from 'immer'; import pull from 'lodash/pull'; + import { transformPermissionsData } from './utils'; export const initialState = { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/index.test.js index 45b2b0b0b6..668bcef1c0 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { act, render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Route } from 'react-router-dom'; import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Route, Router } from 'react-router-dom'; + import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; import EditView from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/reducer.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/reducer.test.js index b026d2781c..bf0690f65b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/reducer.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/tests/reducer.test.js @@ -1,6 +1,6 @@ +import init from '../init'; import reducer from '../reducer'; import { data } from '../utils/tests/dataMock'; -import init from '../init'; describe('ADMIN | Pages | API TOKENS | EditView | reducer', () => { const initialState = init({}, data.data); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js index 626080eef1..5e1621102f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ name: yup.string(translatedErrors.string).max(100).required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/tests/transformPermissionsData.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/tests/transformPermissionsData.test.js index a9f82074ef..af7f99984d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/tests/transformPermissionsData.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/tests/transformPermissionsData.test.js @@ -1,4 +1,5 @@ import transformPermissionsData from '../transformPermissionsData'; + import { data } from './dataMock'; describe('ADMIN | Container | SettingsPage | ApiTokens | EditView | utils | transformPermissionsData', () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js index ba8437c608..f54788c6d4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js @@ -1,28 +1,29 @@ import React, { useEffect, useRef } from 'react'; -import { useIntl } from 'react-intl'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { useHistory } from 'react-router-dom'; -import qs from 'qs'; +import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; import { - SettingsPageTitle, - useFocusWhenNavigate, - useNotification, - NoPermissions, - useRBAC, - NoContent, - useTracking, - useGuidedTour, - useFetchClient, LinkButton, + NoContent, + NoPermissions, + SettingsPageTitle, + useFetchClient, + useFocusWhenNavigate, + useGuidedTour, + useNotification, + useRBAC, + useTracking, } from '@strapi/helper-plugin'; -import { HeaderLayout, ContentLayout, Main, Button } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import qs from 'qs'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useHistory } from 'react-router-dom'; import adminPermissions from '../../../../../permissions'; -import tableHeaders from './utils/tableHeaders'; -import Table from '../../../components/Tokens/Table'; import { API_TOKEN_TYPE } from '../../../components/Tokens/constants'; +import Table from '../../../components/Tokens/Table'; + +import tableHeaders from './utils/tableHeaders'; const ApiTokenListView = () => { useFocusWhenNavigate(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js index 8c641b1535..40be385278 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/tests/index.test.js @@ -1,11 +1,13 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { act, render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Route } from 'react-router-dom'; import { createMemoryHistory } from 'history'; -import { useRBAC, TrackingProvider } from '@strapi/helper-plugin'; +import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Route, Router } from 'react-router-dom'; + import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; import ListView from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js index 447ecda79c..2360543456 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedCreateView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js index b4ed12240d..1fae7471f6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js index b73a6fe69f..6483ef73c7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedListView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import ListView from '../ListView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js index 9e7ae414f0..7ed6b7f0e9 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js @@ -1,13 +1,16 @@ -import React, { useReducer, forwardRef, useImperativeHandle } from 'react'; +import React, { forwardRef, useImperativeHandle, useReducer } from 'react'; + +import { Box, Grid, GridItem, Typography } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useTracking } from '@strapi/helper-plugin'; -import { Grid, GridItem, Box, Typography } from '@strapi/design-system'; + import { useConfigurations } from '../../../../../../hooks'; import { DIMENSION, SIZE } from '../../utils/constants'; import LogoInput from '../LogoInput'; -import reducer, { initialState } from './reducer'; + import init from './init'; +import reducer, { initialState } from './reducer'; const CustomizationInfos = forwardRef(({ canUpdate, projectSettingsStored }, ref) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/tests/index.test.js index 46e3a2fbf7..4a2134e120 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/tests/index.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; import CustomizationInfos from '..'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js index bb5cee5e5e..f29e8170ae 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js @@ -1,15 +1,18 @@ import React, { useReducer } from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { + Box, + CarouselActions, CarouselInput, CarouselSlide, - CarouselActions, IconButton, - Box, } from '@strapi/design-system'; import { Plus, Refresh } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import LogoModalStepper from '../LogoModalStepper'; + import reducer, { initialState } from './reducer'; import stepper from './stepper'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/tests/index.test.js index daebbd969c..f04101b1ec 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/tests/index.test.js @@ -1,8 +1,9 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { render as renderTL, fireEvent, screen, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { getFetchClient } from '@strapi/helper-plugin'; +import { fireEvent, render as renderTL, screen, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; import LogoInput from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js index 5068f78343..53a4b5588b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/AddLogoDialog.js @@ -1,7 +1,9 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Box, Divider, Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Tabs, Tab, TabGroup, TabPanels, TabPanel, Box, Divider } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import FromComputerForm from './FromComputerForm'; import FromUrlForm from './FromUrlForm'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js index 5dd0c20c92..ff22e1462b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromComputerForm.js @@ -1,21 +1,23 @@ -import React, { useState, useRef } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import styled from 'styled-components'; +import React, { useRef, useState } from 'react'; + import { Box, - Flex, - Icon, - Typography, - ModalFooter, Button, Field, FieldError, FieldInput, + Flex, + Icon, + ModalFooter, + Typography, } from '@strapi/design-system'; import { PicturePlus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + +import { ACCEPTED_FORMAT, DIMENSION, SIZE } from '../../utils/constants'; import { parseFileMetadatas } from '../../utils/parseFileMetadatas'; -import { ACCEPTED_FORMAT, SIZE, DIMENSION } from '../../utils/constants'; const FileInput = styled(FieldInput)` opacity: 0; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js index 3086d8b82f..3fdbed7439 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/FromUrlForm.js @@ -1,10 +1,12 @@ import React, { useState } from 'react'; + +import { Box, Button, ModalFooter, TextInput } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Box, Button, TextInput, ModalFooter } from '@strapi/design-system'; -import urlToFile from '../../utils/urlToFile'; + +import { DIMENSION, SIZE } from '../../utils/constants'; import { parseFileMetadatas } from '../../utils/parseFileMetadatas'; -import { SIZE, DIMENSION } from '../../utils/constants'; +import urlToFile from '../../utils/urlToFile'; const FromUrlForm = ({ goTo, next, onClose, setLocalImage }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js index 77376aeec6..89b53132d7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/ImageCardAsset.js @@ -1,6 +1,5 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Card, CardAsset, @@ -8,9 +7,11 @@ import { CardBody, CardContent, CardHeader, - CardTitle, CardSubtitle, + CardTitle, } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const ImageCardAsset = ({ asset }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js index 0b11708d5b..c4f71eb490 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { pxToRem } from '@strapi/helper-plugin'; -import { Box, Flex, Button, ModalFooter, Typography } from '@strapi/design-system'; + import ImageCardAsset from './ImageCardAsset'; const PendingLogoDialog = ({ onClose, asset, prev, next, goTo, setLocalImage, onChangeLogo }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js index e9a28ac0d0..2b173562d4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/index.js @@ -1,7 +1,9 @@ import React, { useReducer } from 'react'; + +import { ModalHeader, ModalLayout, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { ModalLayout, ModalHeader, Typography } from '@strapi/design-system'; + import reducer, { initialState } from './reducer'; const LogoModalStepper = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/AddLogoDialog.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/AddLogoDialog.test.js index d5c642f8f6..49af2a4268 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/AddLogoDialog.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/AddLogoDialog.test.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render as renderTL } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { render as renderTL, fireEvent } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import AddLogoDialog from '../AddLogoDialog'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/ImageCardAsset.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/ImageCardAsset.test.js index 1c150e1957..7185860872 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/ImageCardAsset.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/ImageCardAsset.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; import ImageCardAsset from '../ImageCardAsset'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/PendingLogoDialog.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/PendingLogoDialog.test.js index 3d0a6e2526..2b09bc2b55 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/PendingLogoDialog.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/tests/PendingLogoDialog.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render as renderTL } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; import PendingLogoDialog from '../PendingLogoDialog'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js index c951df3203..0ffbb6b3d8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js @@ -1,14 +1,5 @@ import React, { useRef } from 'react'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { useIntl } from 'react-intl'; -import { - useAppInfo, - SettingsPageTitle, - useFocusWhenNavigate, - useNotification, - useRBAC, - useTracking, -} from '@strapi/helper-plugin'; + import { Button, ContentLayout, @@ -21,11 +12,22 @@ import { Main, Typography, } from '@strapi/design-system'; -import { ExternalLink, Check } from '@strapi/icons'; +import { + SettingsPageTitle, + useAppInfo, + useFocusWhenNavigate, + useNotification, + useRBAC, + useTracking, +} from '@strapi/helper-plugin'; +import { Check, ExternalLink } from '@strapi/icons'; import AdminSeatInfo from 'ee_else_ce/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; -import adminPermissions from '../../../../permissions'; import { useConfigurations } from '../../../../hooks'; +import adminPermissions from '../../../../permissions'; + import CustomizationInfos from './components/CustomizationInfos'; import { fetchProjectSettings, postProjectSettings } from './utils/api'; import getFormData from './utils/getFormData'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/index.test.js index 413c7497df..f785a38ee1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/index.test.js @@ -1,10 +1,13 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider, useAppInfo, useRBAC } from '@strapi/helper-plugin'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; -import { QueryClientProvider, QueryClient } from 'react-query'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useAppInfo, useRBAC, TrackingProvider } from '@strapi/helper-plugin'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import ApplicationInfosPage from '../index'; + import server from './server'; const updateProjectSettingsSpy = jest.fn(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/server.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/server.js index d32d4fbca8..cbd74bffef 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/server.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/tests/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/project-settings', (req, res, ctx) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js index e6ad1ef604..e82ae1ae3a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import prefixAllUrls from './prefixAllUrls'; const fetchProjectSettings = async () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js index c2e20f7e48..105e6bc00c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/parseFileMetadatas.js @@ -1,4 +1,4 @@ -import { DIMENSION, SIZE, ACCEPTED_FORMAT } from './constants'; +import { ACCEPTED_FORMAT, DIMENSION, SIZE } from './constants'; const FILE_FORMAT_ERROR_MESSAGE = { id: 'Settings.application.customization.modal.upload.error-format', diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js index d820fd3a9a..b4836a3312 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js @@ -1,5 +1,5 @@ -import transform from 'lodash/transform'; import { prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin'; +import transform from 'lodash/transform'; const prefixAllUrls = (data) => transform( diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js index 407c79ca68..a14b1456bc 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js @@ -1,39 +1,42 @@ import React, { useRef, useState } from 'react'; -import { format } from 'date-fns'; + +import { + Box, + Button, + ContentLayout, + Flex, + Grid, + GridItem, + HeaderLayout, + Main, + Textarea, + TextInput, + Typography, +} from '@strapi/design-system'; import { CheckPagePermissions, Form, + Link, LoadingIndicatorPage, SettingsPageTitle, useFetchClient, useNotification, useOverlayBlocker, useTracking, - Link, } from '@strapi/helper-plugin'; -import { - Box, - Button, - ContentLayout, - HeaderLayout, - Grid, - GridItem, - Main, - Flex, - Typography, - TextInput, - Textarea, -} from '@strapi/design-system'; import { ArrowLeft } from '@strapi/icons'; +import { format } from 'date-fns'; import { Formik } from 'formik'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import { useIntl } from 'react-intl'; import { useHistory, useRouteMatch } from 'react-router-dom'; import styled from 'styled-components'; -import Permissions from '../EditPage/components/Permissions'; + import { useFetchPermissionsLayout, useFetchRole } from '../../../../../hooks'; import adminPermissions from '../../../../../permissions'; +import Permissions from '../EditPage/components/Permissions'; + import schema from './utils/schema'; const UsersRoleNumber = styled.div` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/tests/index.test.js index 7d7fbb7239..0e13ba1678 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/tests/index.test.js @@ -5,11 +5,12 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { MemoryRouter, Switch, Route } from 'react-router-dom'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { NotificationsProvider } from '@strapi/helper-plugin'; +import { MemoryRouter, Route, Switch } from 'react-router-dom'; import { CreatePage } from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js index 5e2ac5c5af..c3bcd9cf28 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ name: yup.string().required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/CollapseLabel/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/CollapseLabel/index.js index c03814209c..7ec3f6ac7d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/CollapseLabel/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/CollapseLabel/index.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { Flex } from '@strapi/design-system'; +import styled from 'styled-components'; const CollapseLabel = styled(Flex)` padding-right: ${({ theme }) => theme.spaces[2]}; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js index e92f1a82ec..c26c1e76e9 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsButton/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Cog } from '@strapi/icons'; + import { Button } from '@strapi/design-system'; +import { Cog } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/index.js index 697304e51d..35de800aea 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/index.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Box, Flex, MultiSelectNested, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, Flex, Typography, MultiSelectNested } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import { getNestedOptions, getSelectedValues, getNewStateFromChangedValues } from './utils/options'; +import { getNestedOptions, getNewStateFromChangedValues, getSelectedValues } from './utils/options'; const ActionRow = ({ arrayOfOptionsGroupedByCategory, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/options.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/options.js index 16dac1dad6..4a5cedb8f8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/options.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/options.js @@ -28,4 +28,4 @@ const getNewStateFromChangedValues = (options, changedValues) => .flat() .reduce((acc, curr) => ({ [curr.id]: changedValues.includes(curr.id), ...acc }), {}); -export { getNestedOptions, getSelectedValues, getNewStateFromChangedValues }; +export { getNestedOptions, getNewStateFromChangedValues, getSelectedValues }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/tests/options.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/tests/options.test.js index 93ce0fa98b..5327394435 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/tests/options.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/tests/options.test.js @@ -1,4 +1,4 @@ -import { getSelectedValues, getNestedOptions, getNewStateFromChangedValues } from '../options'; +import { getNestedOptions, getNewStateFromChangedValues, getSelectedValues } from '../options'; describe('ActionRow | utils | getSelectedValues', () => { test('should reduce the default values to a flat array', () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/index.js index 86e732f63c..b1cd781b5f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/index.js @@ -1,11 +1,11 @@ import React, { useMemo, useState } from 'react'; -import PropTypes from 'prop-types'; + import { Button, + ModalBody, ModalFooter, ModalHeader, ModalLayout, - ModalBody, Typography, } from '@strapi/design-system'; import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; @@ -13,8 +13,11 @@ import produce from 'immer'; import get from 'lodash/get'; import groupBy from 'lodash/groupBy'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import { usePermissionsDataManager } from '../../../../../../../hooks'; + import ActionRow from './ActionRow'; import createDefaultConditionsForm from './utils/createDefaultConditionsForm'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/createDefaultConditionsForm.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/createDefaultConditionsForm.js index 8d30cb1c66..95c07b46e1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/createDefaultConditionsForm.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/createDefaultConditionsForm.js @@ -44,4 +44,4 @@ const createDefaultConditionsForm = ( }; export default createDefaultConditionsForm; -export { createConditionsForm, createCategoryForm }; +export { createCategoryForm, createConditionsForm }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/tests/createDefaultConditionsForm.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/tests/createDefaultConditionsForm.test.js index eea4a19278..1a9fc3ad05 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/tests/createDefaultConditionsForm.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/utils/tests/createDefaultConditionsForm.test.js @@ -1,6 +1,6 @@ import createDefaultConditionsForm, { - createConditionsForm, createCategoryForm, + createConditionsForm, } from '../createDefaultConditionsForm'; describe('ADMIN | COMPONENTS | Roles | ConditionsModale | utils ', () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/index.js index 93db5b5a3c..689c8a9cfb 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/index.js @@ -1,11 +1,13 @@ import React, { useMemo, useState } from 'react'; -import PropTypes from 'prop-types'; -import { ChevronDown, ChevronUp } from '@strapi/icons'; + import { BaseCheckbox, Box, Flex } from '@strapi/design-system'; +import { ChevronDown, ChevronUp } from '@strapi/icons'; import get from 'lodash/get'; import omit from 'lodash/omit'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; + import { usePermissionsDataManager } from '../../../../../../../../hooks'; import ConditionsButton from '../../ConditionsButton'; import ConditionsModal from '../../ConditionsModal'; @@ -13,9 +15,10 @@ import HiddenAction from '../../HiddenAction'; import { cellWidth, rowHeight } from '../../Permissions/utils/constants'; import RowLabelWithCheckbox from '../../RowLabelWithCheckbox'; import { getCheckboxState } from '../../utils'; -import generateCheckboxesActions from './utils/generateCheckboxesActions'; import activeStyle from '../utils/activeStyle'; +import generateCheckboxesActions from './utils/generateCheckboxesActions'; + const activeRowStyle = (theme, isActive) => ` ${Wrapper} { background-color: ${theme.colors.primary100}; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/generateCheckboxesActions.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/generateCheckboxesActions.js index 1aed3b9d54..84c5461fc4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/generateCheckboxesActions.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/generateCheckboxesActions.js @@ -1,5 +1,6 @@ import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; + import { createArrayOfValues, getCheckboxState } from '../../../utils'; const generateCheckboxesActions = (availableActions, modifiedData, pathToData) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/index.js index a9c4a6c8b6..da4a6ef581 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/index.js @@ -1,9 +1,11 @@ import React, { memo, useCallback, useMemo, useState } from 'react'; + +import { BaseCheckbox, Flex } from '@strapi/design-system'; +import get from 'lodash/get'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { BaseCheckbox, Flex } from '@strapi/design-system'; -import get from 'lodash/get'; + import { usePermissionsDataManager } from '../../../../../../../../../hooks'; import HiddenAction from '../../../HiddenAction'; import { cellWidth, rowHeight } from '../../../Permissions/utils/constants'; @@ -13,6 +15,7 @@ import { getCheckboxState } from '../../../utils'; import { activeStyle } from '../../utils'; import CarretIcon from '../CarretIcon'; import SubActionRow from '../SubActionRow'; + import getRowLabelCheckboxeState from './utils/getRowLabelCheckboxeState'; const Cell = styled(Flex)` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/CarretIcon/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/CarretIcon/index.js index 9dd9ccea62..3800a4db5e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/CarretIcon/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/CarretIcon/index.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { CarretDown } from '@strapi/icons'; +import styled from 'styled-components'; const CarretIcon = styled(CarretDown)` display: none; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/Header/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/Header/index.js index da8064940d..c40e31890c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/Header/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/Header/index.js @@ -1,8 +1,10 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { Flex, Typography } from '@strapi/design-system'; + import { cellWidth, firstRowWidth, rowHeight } from '../../../Permissions/utils/constants'; const HeaderLabel = styled(Flex)` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/index.js index bc7e456d12..656f46900e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/index.js @@ -1,10 +1,12 @@ import React, { memo, useMemo, useState } from 'react'; -import PropTypes from 'prop-types'; + +import { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system'; import get from 'lodash/get'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system'; + import { usePermissionsDataManager } from '../../../../../../../../../hooks'; import CollapseLabel from '../../../CollapseLabel'; import Curve from '../../../Curve'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/index.js index a05dd12fcb..84db09bce1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/index.js @@ -1,10 +1,12 @@ import React, { useMemo } from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; -import generateHeadersFromActions from './utils/generateHeadersFromActions'; -import Header from './Header'; + import ActionRow from './ActionRow'; +import Header from './Header'; +import generateHeadersFromActions from './utils/generateHeadersFromActions'; const Wrapper = styled.div` display: inline-flex; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/index.js index 3f4f98b4ea..80b0124084 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/index.js @@ -1,6 +1,8 @@ -import PropTypes from 'prop-types'; import React, { useCallback, useMemo } from 'react'; + +import PropTypes from 'prop-types'; import styled from 'styled-components'; + import Collapse from './Collapse'; import CollapsePropertyMatrix from './CollapsePropertyMatrix'; import { getAvailableActions } from './utils'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/utils/activeStyle.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/utils/activeStyle.js index 2ad6aceda6..276bf7734b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/utils/activeStyle.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/utils/activeStyle.js @@ -1,4 +1,5 @@ import { Typography } from '@strapi/design-system'; + import CarretIcon from '../CollapsePropertyMatrix/CarretIcon'; const activeStyle = (theme) => ` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapses/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapses/index.js index ca12e2f6f2..4f7cd4a065 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapses/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapses/index.js @@ -1,5 +1,7 @@ import React, { memo, useState } from 'react'; + import PropTypes from 'prop-types'; + import ContentTypeCollapse from '../ContentTypeCollapse'; const ContentTypeCollapses = ({ actions, isFormDisabled, pathToData, subjects }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypes/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypes/index.js index 5a86350c4a..ecb08ca370 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypes/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypes/index.js @@ -1,8 +1,10 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; -import styled from 'styled-components'; import sortBy from 'lodash/sortBy'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; + import ContentTypeCollapses from '../ContentTypeCollapses'; import GlobalActions from '../GlobalActions'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Curve/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Curve/index.js index de5b5bbbec..9578e8975b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Curve/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Curve/index.js @@ -1,7 +1,8 @@ import React, { memo } from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; const StyledBox = styled(Box)` transform: translate(-4px, -12px); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/index.js index cea8626830..a033b2dcb5 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/index.js @@ -1,11 +1,14 @@ import React, { memo, useMemo } from 'react'; -import PropTypes from 'prop-types'; + import { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system'; -import styled from 'styled-components'; import get from 'lodash/get'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { usePermissionsDataManager } from '../../../../../../../hooks'; import { cellWidth, firstRowWidth } from '../Permissions/utils/constants'; + import { findDisplayedActions, getCheckboxesState } from './utils'; const CenteredStack = styled(Flex)` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/getRowLabelCheckboxesState.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/getRowLabelCheckboxesState.js index 36c5222936..a61bbff15c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/getRowLabelCheckboxesState.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/getRowLabelCheckboxesState.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import { getCheckboxState, removeConditionKeyFromData } from '../../utils'; const getActionsIds = (array) => array.map(({ actionId }) => actionId); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/HiddenAction/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/HiddenAction/index.js index d796f48457..a3525831dd 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/HiddenAction/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/HiddenAction/index.js @@ -1,4 +1,5 @@ import styled from 'styled-components'; + import { cellWidth } from '../Permissions/utils/constants'; const HiddenAction = styled.div` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/index.js index 48cf188e9e..04b0264922 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/index.js @@ -1,13 +1,16 @@ import React, { forwardRef, memo, useCallback, useImperativeHandle, useReducer } from 'react'; -import PropTypes from 'prop-types'; -import { difference } from '@strapi/helper-plugin'; + import { Tab, TabGroup, TabPanel, TabPanels, Tabs } from '@strapi/design-system'; +import { difference } from '@strapi/helper-plugin'; import has from 'lodash/has'; import isEmpty from 'lodash/isEmpty'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import ContentTypes from '../ContentTypes'; import PermissionsDataManagerProvider from '../PermissionsDataManagerProvider'; import PluginsAndSettings from '../PluginsAndSettings'; + import init from './init'; import reducer, { initialState } from './reducer'; import formatPermissionsToAPI from './utils/formatPermissionsToAPI'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/reducer.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/reducer.js index 75f00cb306..cc8eb57fde 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/reducer.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/reducer.js @@ -1,8 +1,8 @@ import produce from 'immer'; import cloneDeep from 'lodash/cloneDeep'; +import get from 'lodash/get'; import has from 'lodash/has'; import isObject from 'lodash/isObject'; -import get from 'lodash/get'; import set from 'lodash/set'; import updateConditionsToFalse from './utils/updateConditionsToFalse'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultCTFormFromLayout.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultCTFormFromLayout.js index 317ad7bc18..b9a49e8ade 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultCTFormFromLayout.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultCTFormFromLayout.js @@ -176,7 +176,7 @@ const createDefaultCTFormFromLayout = ( export default createDefaultCTFormFromLayout; export { createDefaultConditionsForm, - createDefaultPropertyForms, createDefaultPropertiesForm, + createDefaultPropertyForms, findLayouts, }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultPluginsFormFromLayout.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultPluginsFormFromLayout.js index abc665a375..68136cf642 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultPluginsFormFromLayout.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/createDefaultPluginsFormFromLayout.js @@ -45,4 +45,4 @@ const createDefaultPluginsFormFromLayout = (pluginsLayout, conditions, initialPe }; export default createDefaultPluginsFormFromLayout; -export { createSubCategoryForm, createChildrenDefaultForm }; +export { createChildrenDefaultForm, createSubCategoryForm }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/formatContentTypesPermissionToAPI.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/formatContentTypesPermissionToAPI.js index b1d48cbb33..518566593c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/formatContentTypesPermissionToAPI.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/formatContentTypesPermissionToAPI.js @@ -1,5 +1,7 @@ import isObject from 'lodash/isObject'; + import { createArrayOfValues } from '../../utils'; + import { createConditionsArray } from './formatSettingsPermissionsToAPI'; /** @@ -119,4 +121,4 @@ const formatContentTypesPermissionToAPI = (contentTypesPermissions) => { }; export default formatContentTypesPermissionToAPI; -export { createPropertyArray, createPermissionWithProperties }; +export { createPermissionWithProperties, createPropertyArray }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultCTFormFromLayout.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultCTFormFromLayout.test.js index 8c83e2ae48..bb6a6cb5f9 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultCTFormFromLayout.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultCTFormFromLayout.test.js @@ -1,7 +1,7 @@ import createDefaultCTFormFromLayout, { createDefaultConditionsForm, - createDefaultPropertyForms, createDefaultPropertiesForm, + createDefaultPropertyForms, findLayouts, } from '../createDefaultCTFormFromLayout'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultPluginsFormFromLayout.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultPluginsFormFromLayout.test.js index 792a50f2a9..4099205b83 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultPluginsFormFromLayout.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/createDefaultPluginsFormFromLayout.test.js @@ -1,6 +1,6 @@ import createDefaultPluginsFormFromLayout, { - createSubCategoryForm, createChildrenDefaultForm, + createSubCategoryForm, } from '../createDefaultPluginsFormFromLayout'; const conditions = [ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/formatLayoutForSettingsAndPlugins.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/formatLayoutForSettingsAndPlugins.test.js index 1ff77e9e62..9bca80a9c4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/formatLayoutForSettingsAndPlugins.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/tests/formatLayoutForSettingsAndPlugins.test.js @@ -1,4 +1,5 @@ import formatLayoutForSettingsAndPlugins from '../formatLayoutForSettingsAndPlugins'; + import permissionsLayout from './data'; describe('ADMIN | COMPONENTS | ROLE | PluginsAndSettings | formatLayoutForSettingsAndPlugins', () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateConditionsToFalse.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateConditionsToFalse.js index 19fbabcf88..9ebbb7cbf0 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateConditionsToFalse.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/Permissions/utils/updateConditionsToFalse.js @@ -1,5 +1,5 @@ -import isObject from 'lodash/isObject'; import has from 'lodash/has'; +import isObject from 'lodash/isObject'; import omit from 'lodash/omit'; import { createArrayOfValues } from '../../utils'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PermissionsDataManagerProvider/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PermissionsDataManagerProvider/index.js index 6522a6484b..2ce8e94b0b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PermissionsDataManagerProvider/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PermissionsDataManagerProvider/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import { PermissionsDataManagerContext } from '../../../../../../../contexts'; const PermissionsDataManagerProvider = ({ children, value }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/Row/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/Row/index.js index c112684a2e..78ec7ab0b0 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/Row/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/Row/index.js @@ -1,8 +1,10 @@ import React, { useMemo } from 'react'; -import PropTypes from 'prop-types'; + import { Accordion, AccordionContent, AccordionToggle, Box } from '@strapi/design-system'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import SubCategory from '../SubCategory'; const PermissionRow = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/index.js index 9a81fff6d1..68599d849b 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/index.js @@ -1,13 +1,16 @@ import React, { useMemo, useState } from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import { Grid, GridItem, Box, Checkbox, Flex, Typography } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; + +import { Box, Checkbox, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import get from 'lodash/get'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { usePermissionsDataManager } from '../../../../../../../../hooks'; -import { getCheckboxState, removeConditionKeyFromData } from '../../utils'; import ConditionsButton from '../../ConditionsButton'; import ConditionsModal from '../../ConditionsModal'; +import { getCheckboxState, removeConditionKeyFromData } from '../../utils'; + import { formatActions, getConditionsButtonState } from './utils'; const Border = styled.div` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/formatActions.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/formatActions.js index ba202954db..f1811b16ac 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/formatActions.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/formatActions.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import { createArrayOfValues } from '../../../utils'; /** diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/index.js index a668ecce5a..8326ab27d1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/index.js @@ -1,6 +1,8 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import PermissionRow from './Row'; const PluginsAndSettingsPermissions = ({ isFormDisabled, kind, layout }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RequiredSign/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RequiredSign/index.js index 4d3bfa3ed5..b6443f0772 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RequiredSign/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RequiredSign/index.js @@ -1,4 +1,5 @@ import React from 'react'; + import styled from 'styled-components'; const Required = styled.span` diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js index 8e077d2ba5..866338179f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js @@ -1,13 +1,14 @@ import React from 'react'; + import { Box, + Button, + Flex, Grid, GridItem, - Flex, - Typography, Textarea, TextInput, - Button, + Typography, } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RowLabelWithCheckbox/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RowLabelWithCheckbox/index.js index 36aafd12f0..8aff106547 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RowLabelWithCheckbox/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RowLabelWithCheckbox/index.js @@ -1,8 +1,10 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; + import { BaseCheckbox, Box, Flex, Typography } from '@strapi/design-system'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import CollapseLabel from '../CollapseLabel'; import { firstRowWidth } from '../Permissions/utils/constants'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/utils/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/utils/index.js index b972a728f1..e043770098 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/utils/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/utils/index.js @@ -1,3 +1,3 @@ -export { default as getCheckboxState } from './getCheckboxState'; export { default as createArrayOfValues } from './createArrayOfValues'; +export { default as getCheckboxState } from './getCheckboxState'; export { default as removeConditionKeyFromData } from './removeConditionKeyFromData'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js index 8ba6a28e6f..642f3edca1 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js @@ -1,21 +1,24 @@ import React, { useRef, useState } from 'react'; + +import { Box, Button, ContentLayout, Flex, HeaderLayout, Main } from '@strapi/design-system'; import { + Link, + LoadingIndicatorPage, + SettingsPageTitle, useFetchClient, useNotification, useOverlayBlocker, useTracking, - LoadingIndicatorPage, - SettingsPageTitle, - Link, } from '@strapi/helper-plugin'; -import { Box, Button, ContentLayout, HeaderLayout, Main, Flex } from '@strapi/design-system'; -import { Formik } from 'formik'; import { ArrowLeft } from '@strapi/icons'; +import { Formik } from 'formik'; import get from 'lodash/get'; import { useIntl } from 'react-intl'; import { useRouteMatch } from 'react-router-dom'; -import { Permissions, RoleForm } from './components'; + import { useFetchPermissionsLayout, useFetchRole } from '../../../../../hooks'; + +import { Permissions, RoleForm } from './components'; import schema from './utils/schema'; const EditPage = () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/tests/index.test.js index 1bfa81fb5d..778932fff6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/tests/index.test.js @@ -5,14 +5,15 @@ */ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { act, render } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Switch, Route } from 'react-router-dom'; import { createMemoryHistory } from 'history'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; +import { Route, Router, Switch } from 'react-router-dom'; + import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; - import EditPage from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js index 7fc1ec4d10..ce269199b4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/EditPage/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ name: yup.string().required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js index 8d8042e164..990656846e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Box, Flex, IconButton, Td, Tr, Typography } from '@strapi/design-system'; +import { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import { Box, Flex, Td, Tr, Typography, IconButton } from '@strapi/design-system'; -import { stopPropagation, onRowClick, pxToRem } from '@strapi/helper-plugin'; import { useIntl } from 'react-intl'; const RoleRow = ({ id, name, description, usersCount, icons, rowIndex, canUpdate }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js index a421df11bb..a559521381 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js @@ -1,38 +1,41 @@ import React, { useCallback, useEffect, useReducer, useState } from 'react'; + import { - ConfirmDialog, - LoadingIndicatorPage, - SearchURLQuery, - SettingsPageTitle, - getFetchClient, - useNotification, - useQueryParams, - useRBAC, - useFocusWhenNavigate, - useFilter, - useCollator, -} from '@strapi/helper-plugin'; -import { Plus, Trash, Duplicate, Pencil } from '@strapi/icons'; -import { - Button, ActionLayout, + Button, ContentLayout, HeaderLayout, Main, Table, Tbody, TFooter, - Thead, Th, + Thead, Tr, Typography, VisuallyHidden, } from '@strapi/design-system'; +import { + ConfirmDialog, + getFetchClient, + LoadingIndicatorPage, + SearchURLQuery, + SettingsPageTitle, + useCollator, + useFilter, + useFocusWhenNavigate, + useNotification, + useQueryParams, + useRBAC, +} from '@strapi/helper-plugin'; +import { Duplicate, Pencil, Plus, Trash } from '@strapi/icons'; import get from 'lodash/get'; import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; + import { useRolesList } from '../../../../../hooks'; import adminPermissions from '../../../../../permissions'; + import EmptyRole from './components/EmptyRole'; import BaseRoleRow from './components/RoleRow'; import reducer, { initialState } from './reducer'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/tests/index.test.js index 3272054d19..d15c664f17 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ListPage/tests/index.test.js @@ -5,16 +5,17 @@ */ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { render, screen } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import { Router } from 'react-router-dom'; import { IntlProvider } from 'react-intl'; -import { useRBAC, TrackingProvider } from '@strapi/helper-plugin'; -import { lightTheme, darkTheme } from '@strapi/design-system'; -import { useRolesList } from '../../../../../../hooks'; +import { Router } from 'react-router-dom'; import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; +import { useRolesList } from '../../../../../../hooks'; import ListPage from '../index'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js index c5aba5cb81..f4ab8ecb2f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedEditPage/index.js @@ -1,6 +1,8 @@ import React, { useMemo } from 'react'; -import { useRBAC, LoadingIndicatorPage } from '@strapi/helper-plugin'; + +import { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin'; import { Redirect } from 'react-router-dom'; + import adminPermissions from '../../../../../permissions'; import EditPage from '../EditPage'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js index 0747478537..084fa74caf 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import ListPage from '../ListPage'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js index b84b609cbe..b560bea0f3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js @@ -1,10 +1,12 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, Grid, GridItem, Flex, Typography } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import LifeSpanInput from '../../../../../components/Tokens/LifeSpanInput'; -import TokenName from '../../../../../components/Tokens/TokenName'; import TokenDescription from '../../../../../components/Tokens/TokenDescription'; +import TokenName from '../../../../../components/Tokens/TokenName'; import TokenTypeSelect from '../../../../../components/Tokens/TokenTypeSelect'; const FormTransferTokenContainer = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js index c8af253616..b80b300b07 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js @@ -1,13 +1,14 @@ import React from 'react'; + +import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; import { - SettingsPageTitle, LoadingIndicatorPage, + SettingsPageTitle, useFocusWhenNavigate, } from '@strapi/helper-plugin'; -import { HeaderLayout, ContentLayout, Main, Button } from '@strapi/design-system'; import { Check } from '@strapi/icons'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const LoadingView = ({ transferTokenName }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js index 6c46562bfe..feed282045 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js @@ -1,29 +1,32 @@ -import React, { useState, useRef, useEffect } from 'react'; -import { useIntl } from 'react-intl'; -import { Formik } from 'formik'; -import { useRouteMatch, useHistory } from 'react-router-dom'; -import { useQuery } from 'react-query'; +import React, { useEffect, useRef, useState } from 'react'; + +import { ContentLayout, Flex, Main } from '@strapi/design-system'; import { - SettingsPageTitle, - useFocusWhenNavigate, Form, - useOverlayBlocker, - useNotification, - useTracking, - useGuidedTour, - useRBAC, - useFetchClient, + SettingsPageTitle, useAPIErrorHandler, + useFetchClient, + useFocusWhenNavigate, + useGuidedTour, + useNotification, + useOverlayBlocker, + useRBAC, + useTracking, } from '@strapi/helper-plugin'; -import { ContentLayout, Main, Flex } from '@strapi/design-system'; -import { formatAPIErrors } from '../../../../../utils'; -import { schema } from './utils'; -import LoadingView from './components/LoadingView'; +import { Formik } from 'formik'; +import { useIntl } from 'react-intl'; +import { useQuery } from 'react-query'; +import { useHistory, useRouteMatch } from 'react-router-dom'; + import adminPermissions from '../../../../../permissions'; -import FormTransferTokenContainer from './components/FormTransferTokenContainer'; -import TokenBox from '../../../components/Tokens/TokenBox'; -import FormHead from '../../../components/Tokens/FormHead'; +import { formatAPIErrors } from '../../../../../utils'; import { TRANSFER_TOKEN_TYPE } from '../../../components/Tokens/constants'; +import FormHead from '../../../components/Tokens/FormHead'; +import TokenBox from '../../../components/Tokens/TokenBox'; + +import FormTransferTokenContainer from './components/FormTransferTokenContainer'; +import LoadingView from './components/LoadingView'; +import { schema } from './utils'; const MSG_ERROR_NAME_TAKEN = 'Name already taken'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/tests/index.test.js index 7b171277c1..f7ff016c86 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Route } from 'react-router-dom'; import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Route, Router } from 'react-router-dom'; + import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; import EditView from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js index de47da07c7..f212ed8d1f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ name: yup.string(translatedErrors.string).max(100).required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js index fa7196ddf5..ea9f76a8ba 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js @@ -1,28 +1,29 @@ import React, { useEffect, useRef } from 'react'; -import { useIntl } from 'react-intl'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { useHistory } from 'react-router-dom'; -import qs from 'qs'; +import { Button, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; import { - SettingsPageTitle, - useFocusWhenNavigate, - useNotification, - NoPermissions, - useRBAC, - NoContent, - useTracking, - useGuidedTour, LinkButton, + NoContent, + NoPermissions, + SettingsPageTitle, useFetchClient, + useFocusWhenNavigate, + useGuidedTour, + useNotification, + useRBAC, + useTracking, } from '@strapi/helper-plugin'; -import { HeaderLayout, ContentLayout, Main, Button } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import qs from 'qs'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useHistory } from 'react-router-dom'; import adminPermissions from '../../../../../permissions'; -import tableHeaders from './utils/tableHeaders'; -import Table from '../../../components/Tokens/Table'; import { TRANSFER_TOKEN_TYPE } from '../../../components/Tokens/constants'; +import Table from '../../../components/Tokens/Table'; + +import tableHeaders from './utils/tableHeaders'; const TransferTokenListView = () => { useFocusWhenNavigate(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/tests/index.test.js index 892d0d65db..95a01a14bf 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/tests/index.test.js @@ -1,11 +1,13 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Route } from 'react-router-dom'; import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { useRBAC, TrackingProvider } from '@strapi/helper-plugin'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Route, Router } from 'react-router-dom'; + import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; import ListView from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js index 04c7e6efc5..f4a5b17af7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js index 9fc9feaf06..ff665e31d3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js index e749f6176c..f2a00b43c8 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import ListView from '../ListView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js index 9996782c6d..dbfec9e2f5 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/EditPage/index.js @@ -1,43 +1,45 @@ import React from 'react'; -import { useRouteMatch, useHistory } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import pick from 'lodash/pick'; -import get from 'lodash/get'; -import omit from 'lodash/omit'; + import { + Box, + Button, + ContentLayout, + Flex, + Grid, + GridItem, + HeaderLayout, + Main, + Typography, +} from '@strapi/design-system'; +import { + auth, Form, GenericInput, + Link, + LoadingIndicatorPage, SettingsPageTitle, - auth, useAppInfo, useFocusWhenNavigate, useNotification, useOverlayBlocker, - LoadingIndicatorPage, - Link, } from '@strapi/helper-plugin'; -import { Formik } from 'formik'; -import { - Box, - Button, - Grid, - GridItem, - HeaderLayout, - ContentLayout, - Typography, - Main, - Flex, -} from '@strapi/design-system'; import { ArrowLeft, Check } from '@strapi/icons'; import MagicLink from 'ee_else_ce/pages/SettingsPage/pages/Users/components/MagicLink'; +import { Formik } from 'formik'; +import get from 'lodash/get'; +import omit from 'lodash/omit'; +import pick from 'lodash/pick'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useHistory, useRouteMatch } from 'react-router-dom'; +import { useAdminUsers } from '../../../../../hooks/useAdminUsers'; import { formatAPIErrors, getFullName } from '../../../../../utils'; +import SelectRoles from '../components/SelectRoles'; +import { editValidation } from '../utils/validations/users'; + import { putUser } from './utils/api'; import layout from './utils/layout'; -import { editValidation } from '../utils/validations/users'; -import SelectRoles from '../components/SelectRoles'; -import { useAdminUsers } from '../../../../../hooks/useAdminUsers'; const fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles']; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js index c51dbaa419..85f045cefb 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js @@ -1,8 +1,9 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Button } from '@strapi/design-system'; import { Envelop } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const CreateAction = ({ onClick }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/tests/index.test.js index dddb6dd5ec..06a5bec5e4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/CreateAction/tests/index.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import CreateAction from '..'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js index 75e1eeaf53..b4d44601d7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/DynamicTable/TableRows/index.js @@ -1,19 +1,21 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { BaseCheckbox, Box, - IconButton, Flex, - Typography, + IconButton, Tbody, Td, Tr, + Typography, } from '@strapi/design-system'; +import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; import { Pencil, Trash } from '@strapi/icons'; -import { useHistory } from 'react-router-dom'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { stopPropagation, onRowClick } from '@strapi/helper-plugin'; +import { useHistory } from 'react-router-dom'; + import { getFullName } from '../../../../../../../utils'; const TableRows = ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js index 7b4a7df28e..3d65d81798 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js @@ -1,34 +1,35 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { - ModalLayout, - ModalHeader, - ModalFooter, - ModalBody, - Grid, - GridItem, Box, Button, Flex, + Grid, + GridItem, + ModalBody, + ModalFooter, + ModalHeader, + ModalLayout, Typography, } from '@strapi/design-system'; import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; -import { Formik } from 'formik'; import { Form, GenericInput, + useFetchClient, useNotification, useOverlayBlocker, - useFetchClient, } from '@strapi/helper-plugin'; -import { useMutation } from 'react-query'; - +import MagicLink from 'ee_else_ce/pages/SettingsPage/pages/Users/components/MagicLink'; import formDataModel from 'ee_else_ce/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/formDataModel'; import roleSettingsForm from 'ee_else_ce/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/roleSettingsForm'; -import MagicLink from 'ee_else_ce/pages/SettingsPage/pages/Users/components/MagicLink'; +import { Formik } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useMutation } from 'react-query'; import SelectRoles from '../../components/SelectRoles'; + import layout from './utils/layout'; import schema from './utils/schema'; import stepper from './utils/stepper'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js index adf046691b..f35757e80e 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ firstname: yup.string().trim().required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/index.js index 489d9644e2..3acb87b598 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; -import { PaginationURLQuery, PageSizeURLQuery } from '@strapi/helper-plugin'; +import { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; const PaginationFooter = ({ pagination }) => { return ( diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/index.test.js index a91248f80a..06c3eb991a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/PaginationFooter/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; -import { act, render } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { createMemoryHistory } from 'history'; -import { Router, Route } from 'react-router-dom'; -import { lightTheme, darkTheme } from '@strapi/design-system'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; import { TrackingProvider } from '@strapi/helper-plugin'; +import { act, render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; +import { Route, Router } from 'react-router-dom'; + import Theme from '../../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../../components/ThemeToggleProvider'; import PaginationFooter from '../index'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js index 9a168f78c9..fb60fdbd35 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js @@ -1,27 +1,29 @@ import React, { useState } from 'react'; -import qs from 'qs'; + +import { ActionLayout, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; import { DynamicTable, + NoPermissions, SearchURLQuery, SettingsPageTitle, - useRBAC, - useNotification, - useFocusWhenNavigate, - NoPermissions, useAPIErrorHandler, useFetchClient, + useFocusWhenNavigate, + useNotification, + useRBAC, } from '@strapi/helper-plugin'; -import { ActionLayout, ContentLayout, HeaderLayout, Main } from '@strapi/design-system'; -import { useLocation } from 'react-router-dom'; +import useLicenseLimitNotification from 'ee_else_ce/hooks/useLicenseLimitNotification'; +import CreateAction from 'ee_else_ce/pages/SettingsPage/pages/Users/ListPage/CreateAction'; +import qs from 'qs'; import { useIntl } from 'react-intl'; import { useMutation, useQueryClient } from 'react-query'; -import CreateAction from 'ee_else_ce/pages/SettingsPage/pages/Users/ListPage/CreateAction'; -import useLicenseLimitNotification from 'ee_else_ce/hooks/useLicenseLimitNotification'; +import { useLocation } from 'react-router-dom'; import { useAdminUsers } from '../../../../../hooks/useAdminUsers'; import adminPermissions from '../../../../../permissions'; -import TableRows from './DynamicTable/TableRows'; import Filters from '../../../components/Filters'; + +import TableRows from './DynamicTable/TableRows'; import ModalForm from './ModalForm'; import PaginationFooter from './PaginationFooter'; import displayedFilters from './utils/displayedFilters'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/tests/index.test.js index d39d538c75..f779a1d005 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/tests/index.test.js @@ -1,11 +1,12 @@ import React from 'react'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { TrackingProvider, useRBAC } from '@strapi/helper-plugin'; import { act, render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Router, Route } from 'react-router-dom'; -import { QueryClient, QueryClientProvider } from 'react-query'; import { createMemoryHistory } from 'history'; -import { useRBAC, TrackingProvider } from '@strapi/helper-plugin'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Route, Router } from 'react-router-dom'; import Theme from '../../../../../../components/Theme'; import ThemeToggleProvider from '../../../../../../components/ThemeToggleProvider'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js index 203d1873ad..e846a82f06 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/tableHeaders.js @@ -1,4 +1,5 @@ import React from 'react'; + import { Flex, Typography } from '@strapi/design-system'; import { Status } from '@strapi/helper-plugin'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js index 5e0357d693..c74c2c35bb 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedEditPage/index.js @@ -1,5 +1,6 @@ import React, { useEffect, useMemo } from 'react'; -import { useRBAC, LoadingIndicatorPage, useNotification } from '@strapi/helper-plugin'; + +import { LoadingIndicatorPage, useNotification, useRBAC } from '@strapi/helper-plugin'; import { Redirect, useLocation } from 'react-router-dom'; import adminPermissions from '../../../../../permissions'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js index 74bede9b9b..99d2953665 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/ProtectedListPage/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import ListPage from '../ListPage'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js index 3e9d3667df..ef283c58ff 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js @@ -1,8 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { IconButton } from '@strapi/design-system'; -import { useNotification, ContentBox, useClipboard } from '@strapi/helper-plugin'; +import { ContentBox, useClipboard, useNotification } from '@strapi/helper-plugin'; import { Duplicate } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; const MagicLinkWrapper = ({ children, target }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js index e7bd4f7294..f7ba8435c7 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/index.js @@ -1,7 +1,10 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import basename from '../../../../../../core/utils/basename'; + import MagicLinkWrapper from './MagicLinkWrapper'; const MagicLink = ({ registrationToken }) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js index 92f200207b..e58e895aee 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js @@ -1,11 +1,12 @@ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; +import { getFetchClient } from '@strapi/helper-plugin'; +import { Loader as LoadingIcon } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option } from '@strapi/design-system'; import { useQuery } from 'react-query'; import styled, { keyframes } from 'styled-components'; -import { Loader as LoadingIcon } from '@strapi/icons'; -import { getFetchClient } from '@strapi/helper-plugin'; const rotation = keyframes` from { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/edit.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/edit.js index 80db038e7c..9a4372e5c6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/edit.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/edit.js @@ -1,4 +1,5 @@ import * as yup from 'yup'; + import { commonUserSchema } from './profile'; import rolesValidation from './roles'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/profile.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/profile.js index 69b5a14668..d4bdb006f3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/profile.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/profile.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; export const commonUserSchema = { firstname: yup.string().trim().required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/roles.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/roles.js index 879cd04b7f..acfe69a94f 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/roles.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/utils/validations/users/roles.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = { roles: yup.array().min(1, translatedErrors.required).required(translatedErrors.required), diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events/index.js index 34082ed4e9..c6cc77b251 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events/index.js @@ -1,24 +1,24 @@ import * as React from 'react'; -import PropTypes from 'prop-types'; -import { useFormikContext } from 'formik'; -import { useIntl } from 'react-intl'; -import styled from 'styled-components'; import { - FieldLabel, - Flex, - Typography, BaseCheckbox, Checkbox, + FieldLabel, + Flex, Loader, RawTable as Table, - RawTh as Th, - RawTd as Td, - RawTr as Tr, - RawThead as Thead, RawTbody as Tbody, + RawTd as Td, + RawTh as Th, + RawThead as Thead, + RawTr as Tr, + Typography, VisuallyHidden, } from '@strapi/design-system'; +import { useFormikContext } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { useContentTypes } from '../../../../../../../hooks/useContentTypes'; @@ -54,8 +54,8 @@ const StyledTable = styled(Table)` } tbody tr td:first-child { - // Add padding to the start of the first column to avoid the checkbox appearing - // too close to the edge of the table + /* Add padding to the start of the first column to avoid the checkbox + appearing too close to the edge of the table */ padding-inline-start: ${({ theme }) => theme.spaces[2]}; } `; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/Combobox.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/Combobox.js index ff35616073..68e5dbdbcd 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/Combobox.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/Combobox.js @@ -1,7 +1,8 @@ -import React, { useState, useEffect } from 'react'; -import PropTypes from 'prop-types'; -import { useFormikContext } from 'formik'; +import React, { useEffect, useState } from 'react'; + import { ComboboxOption, CreatableCombobox } from '@strapi/design-system'; +import { useFormikContext } from 'formik'; +import PropTypes from 'prop-types'; const HTTP_HEADERS = [ 'A-IM', diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js index e52ba006ad..b440611f04 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/HeadersInput/index.js @@ -1,17 +1,19 @@ import React from 'react'; -import { RemoveRoundedButton } from '@strapi/helper-plugin'; -import { Plus } from '@strapi/icons'; + import { Box, FieldLabel, + Flex, Grid, GridItem, - Flex, - TextInput, TextButton, + TextInput, } from '@strapi/design-system'; +import { RemoveRoundedButton } from '@strapi/helper-plugin'; +import { Plus } from '@strapi/icons'; import { Field, FieldArray, useFormikContext } from 'formik'; import { useIntl } from 'react-intl'; + import Combobox from './Combobox'; const HeadersInput = () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/TriggerContainer/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/TriggerContainer/index.js index cc1c538d7f..74f0fe0c5d 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/TriggerContainer/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/TriggerContainer/index.js @@ -1,10 +1,11 @@ import React from 'react'; + +import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { Check, Cross, Loader } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import { pxToRem } from '@strapi/helper-plugin'; -import { Check, Cross, Loader } from '@strapi/icons'; -import { Box, Flex, Typography, Grid, GridItem } from '@strapi/design-system'; // Being discussed in Notion: create a component in Parts const Icon = styled.svg( diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js index 35c2fae81a..c55aeba1e5 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/index.js @@ -1,25 +1,27 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { Field, FormikProvider, useFormik } from 'formik'; -import { useIntl } from 'react-intl'; -import { Form, Link } from '@strapi/helper-plugin'; -import { ArrowLeft, Check, Play as Publish } from '@strapi/icons'; + import { + Box, + Button, + ContentLayout, + Flex, Grid, GridItem, - Button, - Flex, - TextInput, HeaderLayout, - ContentLayout, - Box, + TextInput, } from '@strapi/design-system'; - +import { Form, Link } from '@strapi/helper-plugin'; +import { ArrowLeft, Check, Play as Publish } from '@strapi/icons'; import EventTable from 'ee_else_ce/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable'; -import { makeWebhookValidationSchema } from './utils/makeWebhookValidationSchema'; +import { Field, FormikProvider, useFormik } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import HeadersInput from '../HeadersInput'; import TriggerContainer from '../TriggerContainer'; +import { makeWebhookValidationSchema } from './utils/makeWebhookValidationSchema'; + const WebhookForm = ({ handleSubmit, triggerWebhook, @@ -51,7 +53,12 @@ const WebhookForm = ({ headers: mapHeaders(data?.headers || {}), events: data?.events || [], }, - onSubmit: handleSubmit, + onSubmit(values, { resetForm, setSubmitting }) { + handleSubmit(values); + + resetForm({ values }); + setSubmitting(false); + }, validationSchema: makeWebhookValidationSchema({ formatMessage }), validateOnChange: false, validateOnBlur: false, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/tests/index.test.js index d14861692e..8ccda0e3cb 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/tests/index.test.js @@ -1,13 +1,14 @@ -import { render, screen, waitFor, fireEvent } from '@testing-library/react'; import React from 'react'; -import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { QueryClientProvider, QueryClient } from 'react-query'; + import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { NotificationsProvider } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Router } from 'react-router-dom'; -import en from '../../../../../../../../translations/en.json'; import LanguageProvider from '../../../../../../../../components/LanguageProvider'; +import en from '../../../../../../../../translations/en.json'; import WebhookForm from '../index'; jest.mock('../../../../../../../../hooks/useContentTypes'); @@ -77,7 +78,8 @@ describe('Create Webhook', () => { fireEvent.change(screen.getByLabelText(/url/i), { target: { value: 'https://google.fr' } }); fireEvent.click(screen.getByRole('checkbox', { name: /entry.create/i })); - fireEvent.click(screen.getByRole('button', { name: /Save/i })); + const saveButton = screen.getByRole('button', { name: /Save/i }); + fireEvent.click(saveButton); await waitFor(() => { expect(handleSubmit).toHaveBeenCalledTimes(1); @@ -88,5 +90,7 @@ describe('Create Webhook', () => { headers: [{ key: '', value: '' }], }); }); + + expect(saveButton).toHaveAttribute('aria-disabled', 'true'); }); }); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/utils/makeWebhookValidationSchema.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/utils/makeWebhookValidationSchema.js index f333902db7..778a8e99c3 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/utils/makeWebhookValidationSchema.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/WebhookForm/utils/makeWebhookValidationSchema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const NAME_REGEX = /(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/; const URL_REGEX = /(^$)|((https?:\/\/.*)(d*)\/?(.*))/; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js index 69e534c653..b270181621 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js @@ -1,15 +1,18 @@ import * as React from 'react'; + +import { Main } from '@strapi/design-system'; import { LoadingIndicatorPage, SettingsPageTitle, - useNotification, - useFetchClient, useAPIErrorHandler, + useFetchClient, + useNotification, } from '@strapi/helper-plugin'; -import { Main } from '@strapi/design-system'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { useHistory, useRouteMatch } from 'react-router-dom'; + import { useContentTypes } from '../../../../../hooks/useContentTypes'; + import WebhookForm from './components/WebhookForm'; const cleanData = (data) => ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js index 4f9ec37202..6898a6d9e6 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js @@ -1,47 +1,48 @@ /* eslint-disable no-nested-ternary */ -import React, { useState, useEffect } from 'react'; -import { useHistory, useLocation } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import { useQuery, useMutation } from 'react-query'; +import React, { useEffect, useState } from 'react'; import { - useFetchClient, - useRBAC, - LoadingIndicatorPage, - useNotification, - useFocusWhenNavigate, - SettingsPageTitle, - ConfirmDialog, - onRowClick, - stopPropagation, - LinkButton, - useAPIErrorHandler, -} from '@strapi/helper-plugin'; -import { - HeaderLayout, - Layout, - ContentLayout, ActionLayout, + BaseCheckbox, + Box, + Button, + ContentLayout, EmptyStateLayout, Flex, + HeaderLayout, IconButton, - BaseCheckbox, + Layout, + Main, + Switch, Table, - Thead, - Tr, - Th, Tbody, Td, TFooter, + Th, + Thead, + Tr, Typography, - Button, - Switch, - Main, useNotifyAT, - Box, VisuallyHidden, } from '@strapi/design-system'; -import { Plus, Pencil, Trash, EmptyDocuments } from '@strapi/icons'; +import { + ConfirmDialog, + LinkButton, + LoadingIndicatorPage, + onRowClick, + SettingsPageTitle, + stopPropagation, + useAPIErrorHandler, + useFetchClient, + useFocusWhenNavigate, + useNotification, + useRBAC, +} from '@strapi/helper-plugin'; +import { EmptyDocuments, Pencil, Plus, Trash } from '@strapi/icons'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery } from 'react-query'; +import { useHistory, useLocation } from 'react-router-dom'; + import adminPermissions from '../../../../../permissions'; const ListView = () => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/index.test.js index c009578fb8..0e08afb499 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/index.test.js @@ -1,4 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useRBAC } from '@strapi/helper-plugin'; import { fireEvent, render as renderRTL, @@ -7,12 +10,11 @@ import { } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { MemoryRouter } from 'react-router-dom'; -import { useRBAC } from '@strapi/helper-plugin'; -import { QueryClientProvider, QueryClient } from 'react-query'; import ListView from '../index'; + import server, { resetWebhooks } from './server'; const toggleNotification = jest.fn(); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/server.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/server.js index bef2f24dc2..0990005b96 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/server.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ListView/tests/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const initialWebhooks = [ { id: 1, isEnabled: true, name: 'test', url: 'http:://strapi.io' }, diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js index f6b04b82cd..3537269de4 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedCreateView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js index 8212704d98..ad58f51445 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedEditView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import EditView from '../EditView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js index 83b00d6584..1c2b2a1c57 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/ProtectedListView/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../permissions'; import ListView from '../ListView'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js b/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js index 7de3bf8e3c..90cdeff3dd 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/tests/index.test.js @@ -1,13 +1,15 @@ import React from 'react'; -import { Router, Route } from 'react-router-dom'; -import { StrapiAppProvider, AppInfosContext, TrackingProvider } from '@strapi/helper-plugin'; + +import { darkTheme, lightTheme } from '@strapi/design-system'; +import { AppInfosContext, StrapiAppProvider, TrackingProvider } from '@strapi/helper-plugin'; import { act, render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createMemoryHistory } from 'history'; -import { lightTheme, darkTheme } from '@strapi/design-system'; +import { Route, Router } from 'react-router-dom'; + +import { SettingsPage } from '..'; import Theme from '../../../components/Theme'; import ThemeToggleProvider from '../../../components/ThemeToggleProvider'; -import { SettingsPage } from '..'; import { useSettingsMenu } from '../../../hooks'; jest.mock('../../../hooks', () => ({ diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/createSectionsRoutes.js b/packages/core/admin/admin/src/pages/SettingsPage/utils/createSectionsRoutes.js index 9c78b4b42e..38dd49bb5c 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/createSectionsRoutes.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/utils/createSectionsRoutes.js @@ -1,4 +1,5 @@ import flatMap from 'lodash/flatMap'; + import { createRoute } from '../../../utils'; const createSectionsRoutes = (settings) => { diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/customRoutes.js b/packages/core/admin/admin/src/pages/SettingsPage/utils/customRoutes.js deleted file mode 100644 index 090dc83436..0000000000 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/customRoutes.js +++ /dev/null @@ -1,3 +0,0 @@ -const customRoutes = []; - -export default customRoutes; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/index.js b/packages/core/admin/admin/src/pages/SettingsPage/utils/index.js index 3ea369d8c3..3b1fbde662 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/utils/index.js @@ -1,4 +1,2 @@ export { default as createSectionsRoutes } from './createSectionsRoutes'; export { default as getSectionsToDisplay } from './getSectionsToDisplay'; - -export { default as routes } from './routes'; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/utils/routes.js b/packages/core/admin/admin/src/pages/SettingsPage/utils/routes.js deleted file mode 100644 index 856e205ae9..0000000000 --- a/packages/core/admin/admin/src/pages/SettingsPage/utils/routes.js +++ /dev/null @@ -1,5 +0,0 @@ -// This file makes it easier to make the difference between the ee and ce version -import customRoutes from 'ee_else_ce/pages/SettingsPage/utils/customRoutes'; -import defaultRoutes from './defaultRoutes'; - -export default [...customRoutes, ...defaultRoutes]; diff --git a/packages/core/admin/admin/src/pages/UseCasePage/index.js b/packages/core/admin/admin/src/pages/UseCasePage/index.js index 97d16cfd3a..40e08fea9d 100644 --- a/packages/core/admin/admin/src/pages/UseCasePage/index.js +++ b/packages/core/admin/admin/src/pages/UseCasePage/index.js @@ -1,20 +1,22 @@ import React, { useState } from 'react'; + +import { + Box, + Button, + Flex, + Main, + Option, + Select, + TextButton, + TextInput, + Typography, +} from '@strapi/design-system'; +import { auth, pxToRem, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { parse } from 'qs'; import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; import styled from 'styled-components'; -import { parse } from 'qs'; -import { pxToRem, useFetchClient, useNotification, auth } from '@strapi/helper-plugin'; -import { - Main, - Flex, - Box, - Typography, - Select, - Option, - TextInput, - TextButton, - Button, -} from '@strapi/design-system'; + import Logo from '../../components/UnauthenticatedLogo'; import UnauthenticatedLayout, { LayoutContent } from '../../layouts/UnauthenticatedLayout'; diff --git a/packages/core/admin/admin/src/pages/UseCasePage/tests/index.test.js b/packages/core/admin/admin/src/pages/UseCasePage/tests/index.test.js index cf08fd08cb..993f7ee147 100644 --- a/packages/core/admin/admin/src/pages/UseCasePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/UseCasePage/tests/index.test.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import UseCasePage from '../index'; jest.mock('../../../components/LocalesProvider/useLocalesProvider', () => () => ({ diff --git a/packages/core/admin/admin/src/permissions/index.js b/packages/core/admin/admin/src/permissions/index.js index 83742a9995..dae81642a2 100644 --- a/packages/core/admin/admin/src/permissions/index.js +++ b/packages/core/admin/admin/src/permissions/index.js @@ -1,5 +1,6 @@ -import merge from 'lodash/merge'; import customPermissions from 'ee_else_ce/permissions/customPermissions'; +import merge from 'lodash/merge'; + import defaultPermissions from './defaultPermissions'; const permissions = merge(defaultPermissions, customPermissions); diff --git a/packages/core/admin/admin/src/reducers.js b/packages/core/admin/admin/src/reducers.js index 2dc6180ec1..912cbff289 100644 --- a/packages/core/admin/admin/src/reducers.js +++ b/packages/core/admin/admin/src/reducers.js @@ -1,10 +1,10 @@ -import appReducer from './pages/App/reducer'; import rbacProviderReducer from './components/RBACProvider/reducer'; +import rbacManagerReducer from './content-manager/hooks/useSyncRbac/reducer'; import cmAppReducer from './content-manager/pages/App/reducer'; import editViewLayoutManagerReducer from './content-manager/pages/EditViewLayoutManager/reducer'; import listViewReducer from './content-manager/pages/ListView/reducer'; -import rbacManagerReducer from './content-manager/hooks/useSyncRbac/reducer'; import editViewCrudReducer from './content-manager/sharedReducers/crudReducer/reducer'; +import appReducer from './pages/App/reducer'; const contentManagerReducers = { 'content-manager_app': cmAppReducer, diff --git a/packages/core/admin/admin/src/shared/components/InjectionZone/index.js b/packages/core/admin/admin/src/shared/components/InjectionZone/index.js index 7451cc1d3e..36bb011a79 100644 --- a/packages/core/admin/admin/src/shared/components/InjectionZone/index.js +++ b/packages/core/admin/admin/src/shared/components/InjectionZone/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import { useInjectionZone } from '../../hooks'; const InjectionZone = ({ area, ...props }) => { diff --git a/packages/core/admin/admin/src/shared/hooks/useAdminProvider/index.js b/packages/core/admin/admin/src/shared/hooks/useAdminProvider/index.js index bb562542a6..418d7baf14 100644 --- a/packages/core/admin/admin/src/shared/hooks/useAdminProvider/index.js +++ b/packages/core/admin/admin/src/shared/hooks/useAdminProvider/index.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import { AdminContext } from '../../../contexts'; const useAdminProvider = () => { diff --git a/packages/core/admin/admin/src/tests/StrapiApp.test.js b/packages/core/admin/admin/src/tests/StrapiApp.test.js index 8056169895..e11d67efd8 100644 --- a/packages/core/admin/admin/src/tests/StrapiApp.test.js +++ b/packages/core/admin/admin/src/tests/StrapiApp.test.js @@ -1,8 +1,9 @@ -import { render } from '@testing-library/react'; import { fixtures } from '@strapi/admin-test-utils'; +import { render } from '@testing-library/react'; + import { Components, Fields } from '../core/apis'; -import StrapiApp from '../StrapiApp'; import appReducers from '../reducers'; +import StrapiApp from '../StrapiApp'; const library = { fields: Fields(), components: Components() }; const middlewares = { middlewares: [] }; diff --git a/packages/core/admin/admin/src/translations/tests/index.test.js b/packages/core/admin/admin/src/translations/tests/index.test.js index 230ee1dba7..12e9ae6b00 100644 --- a/packages/core/admin/admin/src/translations/tests/index.test.js +++ b/packages/core/admin/admin/src/translations/tests/index.test.js @@ -1,5 +1,6 @@ const fs = require('fs-extra'); const path = require('path'); + const languageNativeNames = require('../languageNativeNames').default; const languages = fs diff --git a/packages/core/admin/admin/src/utils/createRoute.js b/packages/core/admin/admin/src/utils/createRoute.js index e30f47517c..3481a7e456 100644 --- a/packages/core/admin/admin/src/utils/createRoute.js +++ b/packages/core/admin/admin/src/utils/createRoute.js @@ -1,7 +1,8 @@ import React, { useEffect, useState } from 'react'; + +import { LoadingIndicatorPage } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { Route } from 'react-router-dom'; -import { LoadingIndicatorPage } from '@strapi/helper-plugin'; const LazyCompo = ({ loadComponent }) => { const [Compo, setCompo] = useState(null); diff --git a/packages/core/admin/admin/src/utils/index.js b/packages/core/admin/admin/src/utils/index.js index 0dddd94e0e..39787a6bde 100644 --- a/packages/core/admin/admin/src/utils/index.js +++ b/packages/core/admin/admin/src/utils/index.js @@ -2,9 +2,9 @@ export { default as checkFormValidity } from './checkFormValidity'; export { default as createRoute } from './createRoute'; export { default as formatAPIErrors } from './formatAPIErrors'; export { default as getAttributesToDisplay } from './getAttributesToDisplay'; +export { default as getExistingActions } from './getExistingActions'; +export { default as getFullName } from './getFullName'; +export { default as getRequestUrl } from './getRequestUrl'; export { default as makeUniqueRoutes } from './makeUniqueRoutes'; export { default as sortLinks } from './sortLinks'; -export { default as getExistingActions } from './getExistingActions'; -export { default as getRequestUrl } from './getRequestUrl'; -export { default as getFullName } from './getFullName'; export { default as hashAdminUserEmail } from './uniqueAdminHash'; diff --git a/packages/core/admin/admin/src/utils/tests/getExistingActions.test.js b/packages/core/admin/admin/src/utils/tests/getExistingActions.test.js index 66da4a5867..81228d9eef 100644 --- a/packages/core/admin/admin/src/utils/tests/getExistingActions.test.js +++ b/packages/core/admin/admin/src/utils/tests/getExistingActions.test.js @@ -1,4 +1,5 @@ import getExistingActions from '../getExistingActions'; + import data from './data'; describe('ADMIN | utils | getExistingActions', () => { diff --git a/packages/core/admin/admin/src/utils/tests/uniqueAdminHash.test.js b/packages/core/admin/admin/src/utils/tests/uniqueAdminHash.test.js index e305835b37..c609b10076 100644 --- a/packages/core/admin/admin/src/utils/tests/uniqueAdminHash.test.js +++ b/packages/core/admin/admin/src/utils/tests/uniqueAdminHash.test.js @@ -1,5 +1,6 @@ import crypto from 'crypto'; import { TextEncoder } from 'util'; + import hashAdminUserEmail, { utils } from '../uniqueAdminHash'; const testHashValue = '8544bf5b5389959462912699664f03ed664a4b6d24f03b13bdbc362efc147873'; diff --git a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStageEE.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStageEE.js index 830e760b96..d10767b7f7 100644 --- a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStageEE.js +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStageEE.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import { getStageColorByHex } from '../../../../../pages/SettingsPage/pages/ReviewWorkflows/utils/colors'; diff --git a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns.js index f2cc08c0bc..36110f920a 100644 --- a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns.js +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns.js @@ -1,11 +1,13 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { Typography } from '@strapi/design-system'; -import ReviewWorkflowsStage from '.'; +import { Typography } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../../../../../admin/src/content-manager/utils/getTrad'; import { STAGE_COLOR_DEFAULT } from '../../../../../pages/SettingsPage/pages/ReviewWorkflows/constants'; +import ReviewWorkflowsStage from '.'; + export default (layout) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js index ff92710118..76ec2a92a4 100644 --- a/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js +++ b/packages/core/admin/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/tests/ReviewWorkflowsStage.test.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import ReviewWorkflowsStage from '..'; diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js index bfc498aaef..ba242c414a 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js @@ -1,10 +1,12 @@ import React from 'react'; + import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import Information from '../../../../../../admin/src/content-manager/pages/EditView/Information'; -import { STAGE_ATTRIBUTE_NAME } from './constants'; + import { AssigneeSelect } from './components/AssigneeSelect'; import { StageSelect } from './components/StageSelect'; +import { STAGE_ATTRIBUTE_NAME } from './constants'; export function InformationBoxEE() { const { initialData, isCreatingEntry } = useCMEditViewDataManager(); diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/AssigneeSelect.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/AssigneeSelect.js index 332c50fa73..6df722acd9 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/AssigneeSelect.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/AssigneeSelect.js @@ -1,4 +1,6 @@ import * as React from 'react'; + +import { Field, FieldLabel, FieldError, Flex, Loader } from '@strapi/design-system'; import { // eslint-disable-next-line no-restricted-imports ReactSelect, @@ -7,7 +9,6 @@ import { useFetchClient, useNotification, } from '@strapi/helper-plugin'; -import { Field, FieldLabel, FieldError, Flex, Loader } from '@strapi/design-system'; import { useIntl } from 'react-intl'; import { useMutation } from 'react-query'; diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/tests/AssigneeSelect.test.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/tests/AssigneeSelect.test.js index 810748d086..148f5fdaac 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/tests/AssigneeSelect.test.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/tests/AssigneeSelect.test.js @@ -1,17 +1,18 @@ import React from 'react'; + +import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { render, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; import { IntlProvider } from 'react-intl'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { QueryClientProvider, QueryClient } from 'react-query'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; -import { AssigneeSelect } from '../AssigneeSelect'; import { ASSIGNEE_ATTRIBUTE_NAME } from '../../../constants'; +import { AssigneeSelect } from '../AssigneeSelect'; const server = setupServer( rest.get('*/users', (req, res, ctx) => diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/StageSelect.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/StageSelect.js index b6d67bdd28..ab2ec539e1 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/StageSelect.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/StageSelect.js @@ -1,10 +1,5 @@ import * as React from 'react'; -import { - useCMEditViewDataManager, - useAPIErrorHandler, - useFetchClient, - useNotification, -} from '@strapi/helper-plugin'; + import { SingleSelect, SingleSelectOption, @@ -14,6 +9,12 @@ import { Loader, Typography, } from '@strapi/design-system'; +import { + useCMEditViewDataManager, + useAPIErrorHandler, + useFetchClient, + useNotification, +} from '@strapi/helper-plugin'; import { useIntl } from 'react-intl'; import { useMutation } from 'react-query'; diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/tests/StageSelect.test.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/tests/StageSelect.test.js index cdb7df176e..f6939eb8cf 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/tests/StageSelect.test.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/tests/StageSelect.test.js @@ -1,17 +1,18 @@ import React from 'react'; + +import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { useCMEditViewDataManager } from '@strapi/helper-plugin'; import { render, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; import { IntlProvider } from 'react-intl'; -import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { QueryClientProvider, QueryClient } from 'react-query'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; -import { StageSelect } from '../StageSelect'; import { STAGE_ATTRIBUTE_NAME } from '../../../constants'; +import { StageSelect } from '../StageSelect'; const STAGE_1_STATE_FIXTURE = { id: 1, diff --git a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/tests/InformationBoxEE.test.js b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/tests/InformationBoxEE.test.js index 98dd6709d6..fe38fdda6f 100644 --- a/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/tests/InformationBoxEE.test.js +++ b/packages/core/admin/ee/admin/content-manager/pages/EditView/InformationBox/tests/InformationBoxEE.test.js @@ -1,13 +1,14 @@ import React from 'react'; -import { render } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { useCMEditViewDataManager } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; +import { render } from '@testing-library/react'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; import { STAGE_ATTRIBUTE_NAME, ASSIGNEE_ATTRIBUTE_NAME } from '../constants'; import { InformationBoxEE } from '../InformationBoxEE'; diff --git a/packages/core/admin/ee/admin/hooks/useAuthProviders/index.js b/packages/core/admin/ee/admin/hooks/useAuthProviders/index.js index b1396773a2..842ce5c709 100644 --- a/packages/core/admin/ee/admin/hooks/useAuthProviders/index.js +++ b/packages/core/admin/ee/admin/hooks/useAuthProviders/index.js @@ -1,7 +1,9 @@ -import { useReducer, useEffect } from 'react'; +import { useEffect, useReducer } from 'react'; + import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import { getRequestUrl } from '../../../../admin/src/utils'; + import reducer, { initialState } from './reducer'; const useAuthProviders = ({ ssoEnabled }) => { diff --git a/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/index.js b/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/index.js index 5c3d1b63d9..7768ba4fc7 100644 --- a/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/index.js +++ b/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/index.js @@ -4,10 +4,12 @@ * */ import { useEffect } from 'react'; -import { useIntl } from 'react-intl'; -import { useLocation } from 'react-router-dom'; + import { useNotification } from '@strapi/helper-plugin'; import isNil from 'lodash/isNil'; +import { useIntl } from 'react-intl'; +import { useLocation } from 'react-router-dom'; + import useLicenseLimits from '../useLicenseLimits'; const STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit'; diff --git a/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/tests/index.test.js b/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/tests/index.test.js index 8f9e7c1662..0570e986aa 100644 --- a/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/tests/index.test.js +++ b/packages/core/admin/ee/admin/hooks/useLicenseLimitNotification/tests/index.test.js @@ -1,4 +1,5 @@ import { renderHook } from '@testing-library/react'; + import useLicenseLimitNotification from '..'; import useLicenseLimits from '../../useLicenseLimits'; diff --git a/packages/core/admin/ee/admin/hooks/useLicenseLimits/index.js b/packages/core/admin/ee/admin/hooks/useLicenseLimits/index.js index a927403b4f..90b52192fd 100644 --- a/packages/core/admin/ee/admin/hooks/useLicenseLimits/index.js +++ b/packages/core/admin/ee/admin/hooks/useLicenseLimits/index.js @@ -1,5 +1,6 @@ import { useFetchClient, useRBAC } from '@strapi/helper-plugin'; import { useQuery } from 'react-query'; + import adminPermissions from '../../../../admin/src/permissions'; const useLicenseLimits = () => { diff --git a/packages/core/admin/ee/admin/hooks/useLicenseLimits/tests/index.test.js b/packages/core/admin/ee/admin/hooks/useLicenseLimits/tests/index.test.js index e525f62f5f..806bae3b77 100644 --- a/packages/core/admin/ee/admin/hooks/useLicenseLimits/tests/index.test.js +++ b/packages/core/admin/ee/admin/hooks/useLicenseLimits/tests/index.test.js @@ -1,6 +1,7 @@ -import { renderHook } from '@testing-library/react'; import { useFetchClient } from '@strapi/helper-plugin'; +import { renderHook } from '@testing-library/react'; import { useQuery } from 'react-query'; + import useLicenseLimits from '..'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/admin/ee/admin/hooks/useSettingsMenu/constants.js b/packages/core/admin/ee/admin/hooks/useSettingsMenu/constants.js new file mode 100644 index 0000000000..d009de996a --- /dev/null +++ b/packages/core/admin/ee/admin/hooks/useSettingsMenu/constants.js @@ -0,0 +1,43 @@ +import adminPermissions from '../../../../admin/src/permissions'; + +export const LINKS_EE = { + global: [ + ...(window.strapi.features.isEnabled(window.strapi.features.SSO) + ? [ + { + intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' }, + to: '/settings/single-sign-on', + id: 'sso', + permissions: adminPermissions.settings.sso.main, + }, + ] + : []), + + ...(window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) + ? [ + { + intlLabel: { + id: 'Settings.review-workflows.page.title', + defaultMessage: 'Review Workflows', + }, + to: '/settings/review-workflows', + id: 'review-workflows', + permissions: adminPermissions.settings['review-workflows'].main, + }, + ] + : []), + ], + + admin: [ + ...(window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) + ? [ + { + intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' }, + to: '/settings/audit-logs?pageSize=50&page=1&sort=date:DESC', + id: 'auditLogs', + permissions: adminPermissions.settings.auditLogs.main, + }, + ] + : []), + ], +}; diff --git a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customAdminLinks.js b/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customAdminLinks.js deleted file mode 100644 index d4785e2f7a..0000000000 --- a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customAdminLinks.js +++ /dev/null @@ -1,17 +0,0 @@ -import adminPermissions from '../../../../../admin/src/permissions'; - -const items = []; - -if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) { - items.push({ - intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' }, - to: '/settings/audit-logs?pageSize=50&page=1&sort=date:DESC', - id: 'auditLogs', - isDisplayed: false, - permissions: adminPermissions.settings.auditLogs.main, - }); -} - -const customAdminLinks = items; - -export default customAdminLinks; diff --git a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js b/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js deleted file mode 100644 index fea5e63dc7..0000000000 --- a/packages/core/admin/ee/admin/hooks/useSettingsMenu/utils/customGlobalLinks.js +++ /dev/null @@ -1,25 +0,0 @@ -import adminPermissions from '../../../../../admin/src/permissions'; - -const items = []; - -if (window.strapi.features.isEnabled(window.strapi.features.SSO)) { - items.push({ - intlLabel: { id: 'Settings.sso.title', defaultMessage: 'Single Sign-On' }, - to: '/settings/single-sign-on', - id: 'sso', - isDisplayed: false, - permissions: adminPermissions.settings.sso.main, - }); -} - -if (window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS)) { - items.push({ - intlLabel: { id: 'Settings.review-workflows.page.title', defaultMessage: 'Review Workflows' }, - to: '/settings/review-workflows', - id: 'review-workflows', - isDisplayed: false, - permissions: adminPermissions.settings['review-workflows'].main, - }); -} - -export default items; diff --git a/packages/core/admin/ee/admin/pages/App/utils/customRoutes.js b/packages/core/admin/ee/admin/pages/App/constants.js similarity index 53% rename from packages/core/admin/ee/admin/pages/App/utils/customRoutes.js rename to packages/core/admin/ee/admin/pages/App/constants.js index 785f7758dc..ee674703a7 100644 --- a/packages/core/admin/ee/admin/pages/App/utils/customRoutes.js +++ b/packages/core/admin/ee/admin/pages/App/constants.js @@ -1,11 +1,9 @@ -import AuthResponse from '../../AuthResponse'; +import { AuthResponse } from '../AuthResponse'; -const customRoutes = [ +export const ROUTES_EE = [ { Component: () => ({ default: AuthResponse }), to: '/auth/login/:authResponse', exact: true, }, ]; - -export default customRoutes; diff --git a/packages/core/admin/ee/admin/pages/AuthPage/components/Login/index.js b/packages/core/admin/ee/admin/pages/AuthPage/components/Login/index.js index 30c6407012..f625f3ae3b 100644 --- a/packages/core/admin/ee/admin/pages/AuthPage/components/Login/index.js +++ b/packages/core/admin/ee/admin/pages/AuthPage/components/Login/index.js @@ -1,11 +1,13 @@ import React from 'react'; + +import { Box, Divider, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Box, Flex, Divider, Typography } from '@strapi/design-system'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + +import UnauthenticatedLayout from '../../../../../../admin/src/layouts/UnauthenticatedLayout'; import BaseLogin from '../../../../../../admin/src/pages/AuthPage/components/Login/BaseLogin'; import { useAuthProviders } from '../../../../hooks'; -import UnauthenticatedLayout from '../../../../../../admin/src/layouts/UnauthenticatedLayout'; import SSOProviders from '../Providers/SSOProviders'; const DividerFull = styled(Divider)` diff --git a/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js b/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js index 404fefe0b2..674aedbf9b 100644 --- a/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js +++ b/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/SSOProviders.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Flex, Grid, GridItem, Tooltip, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Grid, GridItem, Flex, Typography, Tooltip } from '@strapi/design-system'; -import styled from 'styled-components'; import { useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; +import styled from 'styled-components'; const SSOButton = styled.a` width: ${136 / 16}rem; diff --git a/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/index.js b/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/index.js index 03c259c02b..30e726dd55 100644 --- a/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/index.js +++ b/packages/core/admin/ee/admin/pages/AuthPage/components/Providers/index.js @@ -1,16 +1,19 @@ import React from 'react'; + +import { Box, Button, Divider, Flex, Loader, Main, Typography } from '@strapi/design-system'; +import { Link } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; import { Redirect, useHistory } from 'react-router-dom'; import styled from 'styled-components'; -import { Link } from '@strapi/helper-plugin'; -import { Divider, Flex, Box, Button, Loader, Typography, Main } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; -import { useAuthProviders } from '../../../../hooks'; + +import Logo from '../../../../../../admin/src/components/UnauthenticatedLogo'; import UnauthenticatedLayout, { Column, LayoutContent, } from '../../../../../../admin/src/layouts/UnauthenticatedLayout'; +import { useAuthProviders } from '../../../../hooks'; + import SSOProviders from './SSOProviders'; -import Logo from '../../../../../../admin/src/components/UnauthenticatedLogo'; const DividerFull = styled(Divider)` flex: 1; diff --git a/packages/core/admin/ee/admin/pages/AuthPage/constants.js b/packages/core/admin/ee/admin/pages/AuthPage/constants.js new file mode 100644 index 0000000000..aea98735eb --- /dev/null +++ b/packages/core/admin/ee/admin/pages/AuthPage/constants.js @@ -0,0 +1,12 @@ +import Providers from './components/Providers'; + +export const FORMS = { + providers: { + Component: Providers, + endPoint: null, + fieldsToDisable: [], + fieldsToOmit: [], + schema: null, + inputsPrefix: '', + }, +}; diff --git a/packages/core/admin/ee/admin/pages/AuthPage/utils/forms.js b/packages/core/admin/ee/admin/pages/AuthPage/utils/forms.js deleted file mode 100644 index d2d9eb5bde..0000000000 --- a/packages/core/admin/ee/admin/pages/AuthPage/utils/forms.js +++ /dev/null @@ -1,16 +0,0 @@ -import Providers from '../components/Providers'; -import baseForms from '../../../../../admin/src/pages/AuthPage/utils/forms'; - -const forms = { - ...baseForms, - providers: { - Component: Providers, - endPoint: null, - fieldsToDisable: [], - fieldsToOmit: [], - schema: null, - inputsPrefix: '', - }, -}; - -export default forms; diff --git a/packages/core/admin/ee/admin/pages/AuthResponse/index.js b/packages/core/admin/ee/admin/pages/AuthResponse/index.js index dc1b8a7108..1fe8452759 100644 --- a/packages/core/admin/ee/admin/pages/AuthResponse/index.js +++ b/packages/core/admin/ee/admin/pages/AuthResponse/index.js @@ -1,11 +1,13 @@ -import React, { useEffect, useRef, useCallback } from 'react'; -import { useHistory, useRouteMatch } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import Cookies from 'js-cookie'; +import React, { useCallback, useEffect, useRef } from 'react'; + import { auth, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin'; +import Cookies from 'js-cookie'; +import { useIntl } from 'react-intl'; +import { useHistory, useRouteMatch } from 'react-router-dom'; + import { getRequestUrl } from '../../../../admin/src/utils'; -const AuthResponse = () => { +export const AuthResponse = () => { const { params: { authResponse }, } = useRouteMatch('/auth/login/:authResponse'); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/constants.js b/packages/core/admin/ee/admin/pages/SettingsPage/constants.js new file mode 100644 index 0000000000..9918695c3c --- /dev/null +++ b/packages/core/admin/ee/admin/pages/SettingsPage/constants.js @@ -0,0 +1,49 @@ +export const ROUTES_EE = [ + ...(window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS) + ? [ + { + async Component() { + const component = await import( + /* webpackChunkName: "audit-logs-settings-page" */ './pages/AuditLogs/ProtectedListPage' + ); + + return component; + }, + to: '/settings/audit-logs', + exact: true, + }, + ] + : []), + + ...(window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) + ? [ + { + async Component() { + const component = await import( + /* webpackChunkName: "review-workflows-settings" */ './pages/ReviewWorkflows' + ); + + return component; + }, + to: '/settings/review-workflows', + exact: true, + }, + ] + : []), + + ...(window.strapi.features.isEnabled(window.strapi.features.SSO) + ? [ + { + async Component() { + const component = await import( + /* webpackChunkName: "sso-settings-page" */ './pages/SingleSignOn' + ); + + return component; + }, + to: '/settings/single-sign-on', + exact: true, + }, + ] + : []), +]; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js index 7741a221f6..019acddc83 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { Flex, Tooltip, Icon, GridItem, Typography } from '@strapi/design-system'; + +import { Flex, GridItem, Icon, Tooltip, Typography } from '@strapi/design-system'; import { Link } from '@strapi/design-system/v2'; -import { ExternalLink, ExclamationMarkCircle } from '@strapi/icons'; import { pxToRem } from '@strapi/helper-plugin'; +import { ExclamationMarkCircle, ExternalLink } from '@strapi/icons'; +import { useIntl } from 'react-intl'; + import { useLicenseLimits } from '../../../../../../hooks'; const BILLING_STRAPI_CLOUD_URL = 'https://cloud.strapi.io/profile/billing'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/tests/index.test.js index c6ee77f685..1ed7896758 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ApplicationInfosPage/components/AdminSeatInfo/tests/index.test.js @@ -1,10 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useLicenseLimits } from '../../../../../../../hooks'; import AdminSeatInfo from '..'; +import { useLicenseLimits } from '../../../../../../../hooks'; const LICENSE_MOCK = { license: { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/ComboboxFilter/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/ComboboxFilter/index.js index d6d525c663..95958b3fe8 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/ComboboxFilter/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/ComboboxFilter/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Combobox, ComboboxOption } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Combobox, ComboboxOption } from '@strapi/design-system'; const ComboboxFilter = ({ value, options, onChange }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js index 307d83bd81..b1c95079ec 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js @@ -1,8 +1,11 @@ import React from 'react'; + +import { Box, Flex, Grid, JSONInput, Loader, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Loader, Grid, Box, Flex, Typography, JSONInput } from '@strapi/design-system'; + import { getDefaultMessage } from '../utils/getActionTypesDefaultMessages'; + import ActionItem from './ActionItem'; const ActionBody = ({ status, data, formattedDate }) => { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js index ad874268f7..14ab202bc3 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Flex, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; const ActionItem = ({ actionLabel, actionName }) => { return ( diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js index 68c5a53fca..b945d9c733 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js @@ -1,10 +1,13 @@ import React from 'react'; + +import { ModalBody, ModalHeader, ModalLayout } from '@strapi/design-system'; +import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useQuery } from 'react-query'; -import { ModalLayout, ModalHeader, ModalBody } from '@strapi/design-system'; -import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; + import useFormatTimeStamp from '../hooks/useFormatTimeStamp'; + import ActionBody from './ActionBody'; const Modal = ({ handleClose, logId }) => { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js index 83b0ffabd6..03e921300d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; -import { PaginationURLQuery, PageSizeURLQuery } from '@strapi/helper-plugin'; +import { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; const PaginationFooter = ({ pagination }) => { return ( diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js index 9a41d46047..a4b7512831 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { Flex, IconButton, Tbody, Td, Tr, Typography } from '@strapi/design-system'; +import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; +import { Eye } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { IconButton, Flex, Typography, Tbody, Td, Tr } from '@strapi/design-system'; -import { Eye } from '@strapi/icons'; -import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; + import useFormatTimeStamp from '../hooks/useFormatTimeStamp'; import { getDefaultMessage } from '../utils/getActionTypesDefaultMessages'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/tests/index.test.js index 7d4d22bba8..0c3efd57f6 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; -import { Router } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { createMemoryHistory } from 'history'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render, screen } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; +import { Router } from 'react-router-dom'; + import TableRows from '..'; const history = createMemoryHistory(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js index b7e098f322..943e496501 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js @@ -1,5 +1,5 @@ +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import { useQuery } from 'react-query'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; import { useLocation } from 'react-router-dom'; import { useAdminUsers } from '../../../../../../../../admin/src/hooks/useAdminUsers'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js index 6c6951619a..2e985c5b26 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js @@ -1,5 +1,5 @@ -import { useIntl } from 'react-intl'; import parseISO from 'date-fns/parseISO'; +import { useIntl } from 'react-intl'; const useFormatTimeStamp = () => { const { formatDate } = useIntl(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js index 8393560089..a28cb66581 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js @@ -1,29 +1,32 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + import { - SettingsPageTitle, - DynamicTable, - useRBAC, - useFocusWhenNavigate, - useQueryParams, - AnErrorOccurred, -} from '@strapi/helper-plugin'; -import { - Box, - HeaderLayout, - ContentLayout, ActionLayout, + Box, + ContentLayout, + HeaderLayout, Layout, Main, } from '@strapi/design-system'; -import adminPermissions from '../../../../../../../admin/src/permissions'; -import TableRows from './TableRows'; -import tableHeaders from './utils/tableHeaders'; -import PaginationFooter from './PaginationFooter'; -import Modal from './Modal'; +import { + AnErrorOccurred, + DynamicTable, + SettingsPageTitle, + useFocusWhenNavigate, + useQueryParams, + useRBAC, +} from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; + import Filters from '../../../../../../../admin/src/pages/SettingsPage/components/Filters'; -import getDisplayedFilters from './utils/getDisplayedFilters'; +import adminPermissions from '../../../../../../../admin/src/permissions'; + import useAuditLogsData from './hooks/useAuditLogsData'; +import Modal from './Modal'; +import PaginationFooter from './PaginationFooter'; +import TableRows from './TableRows'; +import getDisplayedFilters from './utils/getDisplayedFilters'; +import tableHeaders from './utils/tableHeaders'; const auditLogsPermissions = { ...adminPermissions.settings.auditLogs, diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/index.test.js index 5f358d8556..a4148c8285 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/index.test.js @@ -1,14 +1,17 @@ import React from 'react'; -import { Router } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { createMemoryHistory } from 'history'; -import { render, screen, waitFor, within, fireEvent } from '@testing-library/react'; -import { QueryClient, QueryClientProvider } from 'react-query'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { createMemoryHistory } from 'history'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Router } from 'react-router-dom'; + import useAuditLogsData from '../hooks/useAuditLogsData'; import ListView from '../index'; -import { TEST_PAGE_DATA, TEST_SINGLE_DATA, getBigTestPageData } from './utils/data'; + +import { getBigTestPageData, TEST_PAGE_DATA, TEST_SINGLE_DATA } from './utils/data'; const history = createMemoryHistory(); const user = userEvent.setup(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/utils/data.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/utils/data.js index bdf72b388b..b5a59f2db9 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/utils/data.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/tests/utils/data.js @@ -70,4 +70,4 @@ const getBigTestPageData = (quantity) => { return data; }; -export { TEST_PAGE_DATA, TEST_SINGLE_DATA, getBigTestPageData }; +export { getBigTestPageData, TEST_PAGE_DATA, TEST_SINGLE_DATA }; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js index 2ab5224600..9f05861805 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js @@ -1,5 +1,6 @@ import ComboboxFilter from '../ComboboxFilter'; -import { getDefaultMessage, actionTypes } from './getActionTypesDefaultMessages'; + +import { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages'; const customOperators = [ { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js index 8c13833b37..6df441287a 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; + import adminPermissions from '../../../../../../../admin/src/permissions'; import ListView from '../ListView'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js index 174dd397d2..beaee8e358 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js @@ -1,9 +1,6 @@ import React, { useEffect, useState } from 'react'; -import { FormikProvider, useFormik, Form } from 'formik'; -import { useIntl } from 'react-intl'; -import { useSelector, useDispatch } from 'react-redux'; -import { useMutation } from 'react-query'; +import { Button, ContentLayout, HeaderLayout, Layout, Loader, Main } from '@strapi/design-system'; import { CheckPagePermissions, ConfirmDialog, @@ -13,19 +10,23 @@ import { useNotification, useTracking, } from '@strapi/helper-plugin'; -import { Button, ContentLayout, HeaderLayout, Layout, Loader, Main } from '@strapi/design-system'; import { Check } from '@strapi/icons'; +import { Form, FormikProvider, useFormik } from 'formik'; +import { useIntl } from 'react-intl'; +import { useMutation } from 'react-query'; +import { useDispatch, useSelector } from 'react-redux'; -import { Stages } from './components/Stages'; -import { reducer, initialState } from './reducer'; -import { REDUX_NAMESPACE, DRAG_DROP_TYPES } from './constants'; -import { useInjectReducer } from '../../../../../../admin/src/hooks/useInjectReducer'; -import { useReviewWorkflows } from './hooks/useReviewWorkflows'; -import { setWorkflows } from './actions'; -import { getWorkflowValidationSchema } from './utils/getWorkflowValidationSchema'; -import adminPermissions from '../../../../../../admin/src/permissions'; -import { StageDragPreview } from './components/StageDragPreview'; import { DragLayer } from '../../../../../../admin/src/components/DragLayer'; +import { useInjectReducer } from '../../../../../../admin/src/hooks/useInjectReducer'; +import adminPermissions from '../../../../../../admin/src/permissions'; + +import { setWorkflows } from './actions'; +import { StageDragPreview } from './components/StageDragPreview'; +import { Stages } from './components/Stages'; +import { DRAG_DROP_TYPES, REDUX_NAMESPACE } from './constants'; +import { useReviewWorkflows } from './hooks/useReviewWorkflows'; +import { initialState, reducer } from './reducer'; +import { getWorkflowValidationSchema } from './utils/getWorkflowValidationSchema'; function renderDragLayerItem({ type, item }) { switch (type) { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/index.js index 59d294d830..20353a4e81 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/index.js @@ -1,7 +1,7 @@ import { - ACTION_SET_WORKFLOWS, - ACTION_DELETE_STAGE, ACTION_ADD_STAGE, + ACTION_DELETE_STAGE, + ACTION_SET_WORKFLOWS, ACTION_UPDATE_STAGE, ACTION_UPDATE_STAGE_POSITION, } from '../constants'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/tests/index.test.js index 0edaf00262..51d48b3d11 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/actions/tests/index.test.js @@ -1,9 +1,8 @@ -import { setWorkflows, deleteStage, updateStage, addStage } from '..'; - +import { addStage, deleteStage, setWorkflows, updateStage } from '..'; import { - ACTION_SET_WORKFLOWS, - ACTION_DELETE_STAGE, ACTION_ADD_STAGE, + ACTION_DELETE_STAGE, + ACTION_SET_WORKFLOWS, ACTION_UPDATE_STAGE, } from '../../constants'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/AddStage.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/AddStage.js index 84f4883009..ad15f81d71 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/AddStage.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/AddStage.js @@ -1,9 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { Box, Flex, Typography } from '@strapi/design-system'; import { PlusCircle } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; const StyledAddIcon = styled(PlusCircle)` > circle { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/AddStage.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/AddStage.test.js index 98d08af1cd..5dd2e423e2 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/AddStage.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/AddStage/tests/AddStage.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { render } from '@testing-library/react'; import { AddStage } from '../AddStage'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview/StageDragPreview.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview/StageDragPreview.js index 18c08f1fd4..257cef10ee 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview/StageDragPreview.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/StageDragPreview/StageDragPreview.js @@ -1,9 +1,10 @@ import * as React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { CarretDown } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Flex, Typography } from '@strapi/design-system'; -import { CarretDown } from '@strapi/icons'; -import { pxToRem } from '@strapi/helper-plugin'; const Toggle = styled(Flex)` svg path { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js index 99cbabae96..9558770e6d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js @@ -1,31 +1,32 @@ import * as React from 'react'; -import PropTypes from 'prop-types'; -import { useField } from 'formik'; -import { useIntl } from 'react-intl'; -import { useDispatch } from 'react-redux'; + import { Accordion, - AccordionToggle, AccordionContent, + AccordionToggle, Box, Flex, Grid, GridItem, IconButton, - TextInput, - VisuallyHidden, SingleSelect, SingleSelectOption, + TextInput, + VisuallyHidden, } from '@strapi/design-system'; import { useTracking } from '@strapi/helper-plugin'; import { Drag, Trash } from '@strapi/icons'; +import { useField } from 'formik'; +import PropTypes from 'prop-types'; import { getEmptyImage } from 'react-dnd-html5-backend'; +import { useIntl } from 'react-intl'; +import { useDispatch } from 'react-redux'; -import { deleteStage, updateStagePosition, updateStage } from '../../../actions'; -import { getAvailableStageColors, getStageColorByHex } from '../../../utils/colors'; import { useDragAndDrop } from '../../../../../../../../../admin/src/content-manager/hooks'; import { composeRefs } from '../../../../../../../../../admin/src/content-manager/utils'; +import { deleteStage, updateStage, updateStagePosition } from '../../../actions'; import { DRAG_DROP_TYPES } from '../../../constants'; +import { getAvailableStageColors, getStageColorByHex } from '../../../utils/colors'; const AVAILABLE_COLORS = getAvailableStageColors(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/tests/Stage.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/tests/Stage.test.js index 34858d61eb..b2f2e578fe 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/tests/Stage.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/tests/Stage.test.js @@ -1,19 +1,18 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { IntlProvider } from 'react-intl'; import { FormikProvider, useFormik } from 'formik'; -import { Provider } from 'react-redux'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; +import { Provider } from 'react-redux'; import configureStore from '../../../../../../../../../../admin/src/core/store/configureStore'; -import { Stage } from '../Stage'; -import { reducer } from '../../../../reducer'; - import { STAGE_COLOR_DEFAULT } from '../../../../constants'; +import { reducer } from '../../../../reducer'; +import { Stage } from '../Stage'; const STAGES_FIXTURE = { id: 1, diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js index 3bb55d8459..da7cfffb02 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stages.js @@ -1,13 +1,15 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { useDispatch } from 'react-redux'; + import { Box, Flex } from '@strapi/design-system'; import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useDispatch } from 'react-redux'; +import styled from 'styled-components'; import { addStage } from '../../actions'; import { AddStage } from '../AddStage'; + import { Stage } from './Stage'; const StagesContainer = styled(Box)` diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js index 5efca68741..ec3c9b688c 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/tests/Stages.test.js @@ -1,19 +1,19 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Provider } from 'react-redux'; -import { FormikProvider, useFormik } from 'formik'; import userEvent from '@testing-library/user-event'; +import { FormikProvider, useFormik } from 'formik'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; +import { Provider } from 'react-redux'; import configureStore from '../../../../../../../../../admin/src/core/store/configureStore'; -import { Stages } from '../Stages'; -import { reducer } from '../../../reducer'; -import { ACTION_SET_WORKFLOWS, STAGE_COLOR_DEFAULT } from '../../../constants'; import * as actions from '../../../actions'; +import { ACTION_SET_WORKFLOWS, STAGE_COLOR_DEFAULT } from '../../../constants'; +import { reducer } from '../../../reducer'; +import { Stages } from '../Stages'; // without mocking actions as ESM it is impossible to spy on named exports jest.mock('../../../actions', () => ({ diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js index b2e2cc01c7..530f2b381d 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/tests/useReviewWorkflows.test.js @@ -1,9 +1,10 @@ import React from 'react'; -import { QueryClientProvider, QueryClient } from 'react-query'; + import { renderHook, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { useReviewWorkflows } from '../useReviewWorkflows'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js index 1ed17aa141..9d186bdc55 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js @@ -1,6 +1,6 @@ -import { useQuery } from 'react-query'; import { useFetchClient } from '@strapi/helper-plugin'; import { stringify } from 'qs'; +import { useQuery } from 'react-query'; export function useReviewWorkflows(params = {}) { const { id = '', ...queryParams } = params; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js index 7a9d6db2bc..ae24cb0145 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js @@ -2,9 +2,9 @@ import { current, produce } from 'immer'; import isEqual from 'lodash/isEqual'; import { - ACTION_SET_WORKFLOWS, - ACTION_DELETE_STAGE, ACTION_ADD_STAGE, + ACTION_DELETE_STAGE, + ACTION_SET_WORKFLOWS, ACTION_UPDATE_STAGE, ACTION_UPDATE_STAGE_POSITION, STAGE_COLOR_DEFAULT, diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js index 083708ea9a..450b317154 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/tests/index.test.js @@ -1,9 +1,8 @@ import { initialState, reducer } from '..'; - import { - ACTION_SET_WORKFLOWS, - ACTION_DELETE_STAGE, ACTION_ADD_STAGE, + ACTION_DELETE_STAGE, + ACTION_SET_WORKFLOWS, ACTION_UPDATE_STAGE, ACTION_UPDATE_STAGE_POSITION, } from '../../constants'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/tests/ReviewWorkflows.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/tests/ReviewWorkflows.test.js index 4d4d406152..57efcb109c 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/tests/ReviewWorkflows.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/tests/ReviewWorkflows.test.js @@ -1,18 +1,19 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useNotification } from '@strapi/helper-plugin'; import { fireEvent, render, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { Provider } from 'react-redux'; -import { QueryClientProvider, QueryClient } from 'react-query'; import userEvent from '@testing-library/user-event'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; -import { useNotification } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { DndProvider } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { Provider } from 'react-redux'; -import configureStore from '../../../../../../../admin/src/core/store/configureStore'; import ReviewWorkflowsPage from '..'; +import configureStore from '../../../../../../../admin/src/core/store/configureStore'; import { reducer } from '../reducer'; const notificationMock = jest.fn(); diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js index 79d5d20dbb..0c4fb5ad53 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js @@ -1,33 +1,36 @@ import React, { useEffect } from 'react'; + import { - CheckPagePermissions, - SettingsPageTitle, - useRBAC, - LoadingIndicatorPage, - useFocusWhenNavigate, -} from '@strapi/helper-plugin'; -import { Check } from '@strapi/icons'; -import { - ContentLayout, - HeaderLayout, - Layout, Button, - Main, - Typography, - ToggleInput, - Select, - Option, + ContentLayout, + Flex, Grid, GridItem, - Flex, + HeaderLayout, + Layout, + Main, MultiSelect, MultiSelectOption, + Option, + Select, + ToggleInput, + Typography, } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; +import { + CheckPagePermissions, + LoadingIndicatorPage, + SettingsPageTitle, + useFocusWhenNavigate, + useRBAC, +} from '@strapi/helper-plugin'; +import { Check } from '@strapi/icons'; import isEqual from 'lodash/isEqual'; -import { getRequestUrl } from '../../../../../../admin/src/utils'; +import { useIntl } from 'react-intl'; + import { useRolesList, useSettingsForm } from '../../../../../../admin/src/hooks'; import adminPermissions from '../../../../../../admin/src/permissions'; +import { getRequestUrl } from '../../../../../../admin/src/utils'; + import schema from './utils/schema'; const ssoPermissions = { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/index.test.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/index.test.js index 94b31c2b43..22b52ea2ff 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/index.test.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/index.test.js @@ -1,12 +1,14 @@ import React from 'react'; -import { getByLabelText, render, screen, waitFor, fireEvent } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { useRBAC } from '@strapi/helper-plugin'; -import server from './server'; +import { fireEvent, getByLabelText, render, screen, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; + import { SingleSignOn } from '../index'; +import server from './server'; + jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), useNotification: jest.fn().mockImplementation(() => jest.fn()), diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/server.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/server.js index 63241f11ec..db1d5c366e 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/server.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/SingleSignOn/tests/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/providers/options', (req, res, ctx) => { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js index 59ad790f9e..0ab9df51d5 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { Flex, Button, Tooltip, Icon } from '@strapi/design-system'; + +import { Button, Flex, Icon, Tooltip } from '@strapi/design-system'; import { Envelop, ExclamationMarkCircle } from '@strapi/icons'; import isNil from 'lodash/isNil'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { useLicenseLimits } from '../../../../../../hooks'; const CreateAction = ({ onClick }) => { diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js index 51723368aa..7450915c6a 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Users/components/MagicLink/index.js @@ -1,6 +1,8 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import basename from '../../../../../../../../admin/src/core/utils/basename'; import MagicLinkWrapper from '../../../../../../../../admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper'; diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js index e569b218db..40b27fa90f 100644 --- a/packages/core/admin/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js +++ b/packages/core/admin/ee/admin/pages/SettingsPage/pages/Webhooks/EditView/components/EventTable/EventTableEE.js @@ -2,22 +2,21 @@ import React from 'react'; import EventTable from '../../../../../../../../../admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/Events'; -// const events = { -// 'review-workflows': ['workflows.updateEntryStage'], -// }; +const events = { + 'review-workflows': ['review-workflows.updateEntryStage'], +}; -// TODO: extend this to support review workflow events once the BE logic is ready -// const getHeaders = () => { -// return [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }]; -// }; +const getHeaders = () => { + return [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }]; +}; export function EventTableEE() { return ( - {/* - */} + + ); } diff --git a/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js b/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js deleted file mode 100644 index dd800e6ad2..0000000000 --- a/packages/core/admin/ee/admin/pages/SettingsPage/utils/customRoutes.js +++ /dev/null @@ -1,45 +0,0 @@ -const routes = []; - -if (window.strapi.features.isEnabled(window.strapi.features.SSO)) { - routes.push({ - async Component() { - const component = await import( - /* webpackChunkName: "sso-settings-page" */ '../pages/SingleSignOn' - ); - - return component; - }, - to: '/settings/single-sign-on', - exact: true, - }); -} - -if (window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS)) { - routes.push({ - async Component() { - const component = await import( - /* webpackChunkName: "review-workflows-settings" */ '../pages/ReviewWorkflows' - ); - - return component; - }, - to: '/settings/review-workflows', - exact: true, - }); -} - -if (window.strapi.features.isEnabled(window.strapi.features.AUDIT_LOGS)) { - routes.push({ - async Component() { - const component = await import( - /* webpackChunkName: "audit-logs-settings-page" */ '../pages/AuditLogs/ProtectedListPage' - ); - - return component; - }, - to: '/settings/audit-logs', - exact: true, - }); -} - -export default routes; diff --git a/packages/core/admin/ee/server/constants/webhookEvents.js b/packages/core/admin/ee/server/constants/webhookEvents.js new file mode 100644 index 0000000000..538a7ec6be --- /dev/null +++ b/packages/core/admin/ee/server/constants/webhookEvents.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + WORKFLOW_UPDATE_STAGE: 'review-workflows.updateEntryStage', +}; diff --git a/packages/core/admin/ee/server/services/review-workflows/__tests__/entity-service-decorator.test.js b/packages/core/admin/ee/server/services/review-workflows/__tests__/entity-service-decorator.test.js index 1b8d4b2bdf..d431420a65 100644 --- a/packages/core/admin/ee/server/services/review-workflows/__tests__/entity-service-decorator.test.js +++ b/packages/core/admin/ee/server/services/review-workflows/__tests__/entity-service-decorator.test.js @@ -1,6 +1,7 @@ 'use strict'; const { omit } = require('lodash/fp'); +const { WORKFLOW_UPDATE_STAGE } = require('../../../constants/webhookEvents'); const { decorator } = require('../entity-service-decorator')(); jest.mock('../../../utils'); @@ -80,6 +81,8 @@ describe('Entity service decorator', () => { }); describe('Update', () => { + const uid = 'test-model'; + test('Calls original update for non review workflow content types', async () => { const entry = { id: 1, @@ -107,13 +110,38 @@ describe('Entity service decorator', () => { update: jest.fn(() => Promise.resolve(entry)), }; + global.strapi = { + ...global.strapi, + entityService: { + findOne: jest.fn(() => { + return { strapi_reviewWorkflows_stage: { id: 2, workflow: { id: 1 } } }; + }), + emitEvent: jest.fn(), + }, + }; + const service = decorator(defaultService); const id = 1; const input = { data: { title: 'title ', strapi_reviewWorkflows_stage: 1 } }; - await service.update('test-model', id, input); + await service.update(uid, id, input); - expect(defaultService.update).toHaveBeenCalledWith('test-model', id, { + expect(global.strapi.entityService.emitEvent).toHaveBeenCalledWith( + uid, + WORKFLOW_UPDATE_STAGE, + { + entityId: 1, + workflow: { + id: 1, + stages: { + from: 2, + to: 1, + }, + }, + } + ); + + expect(defaultService.update).toHaveBeenCalledWith(uid, id, { ...input, data: { ...input.data, @@ -135,9 +163,9 @@ describe('Entity service decorator', () => { const id = 1; const input = { data: { title: 'title ', strapi_reviewWorkflows_stage: null } }; - await service.update('test-model', id, input); + await service.update(uid, id, input); - expect(defaultService.update).toHaveBeenCalledWith('test-model', id, { + expect(defaultService.update).toHaveBeenCalledWith(uid, id, { ...input, data: { ...omit('strapi_reviewWorkflows_stage', input.data), diff --git a/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js b/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js index 3fd52fe4e1..4841f7b217 100644 --- a/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js +++ b/packages/core/admin/ee/server/services/review-workflows/entity-service-decorator.js @@ -2,6 +2,7 @@ const { isNil, isNull } = require('lodash/fp'); const { ENTITY_STAGE_ATTRIBUTE } = require('../../constants/workflows'); +const { WORKFLOW_UPDATE_STAGE } = require('../../constants/webhookEvents'); const { hasReviewWorkflow, getDefaultWorkflow } = require('../../utils/review-workflows'); /** @@ -17,6 +18,25 @@ const getDataWithStage = async (data) => { return data; }; +/** + * Get the stage information of an entity + * @param {String} uid + * @param {Number} id + * @returns {Object} + */ +const getEntityStage = async (uid, id) => { + const entity = await strapi.entityService.findOne(uid, id, { + populate: { + [ENTITY_STAGE_ATTRIBUTE]: { + populate: { + workflow: true, + }, + }, + }, + }); + return entity?.[ENTITY_STAGE_ATTRIBUTE] ?? {}; +}; + /** * Decorates the entity service with RW business logic * @param {object} service - entity service @@ -43,9 +63,31 @@ const decorator = (service) => ({ const data = { ...opts.data }; if (isNull(data[ENTITY_STAGE_ATTRIBUTE])) { delete data[ENTITY_STAGE_ATTRIBUTE]; + return service.update.call(this, uid, entityId, { ...opts, data }); } - return service.update.call(this, uid, entityId, { ...opts, data }); + const previousStage = await getEntityStage(uid, entityId); + + const updatedEntity = await service.update.call(this, uid, entityId, { ...opts, data }); + if ( + previousStage?.workflow?.id && + previousStage?.id && + previousStage.id !== data[ENTITY_STAGE_ATTRIBUTE] + ) { + const webhookPayload = { + entityId, + workflow: { + id: previousStage.workflow.id, + stages: { + from: previousStage.id, + to: data[ENTITY_STAGE_ATTRIBUTE], + }, + }, + }; + await strapi.entityService.emitEvent(uid, WORKFLOW_UPDATE_STAGE, webhookPayload); + } + + return updatedEntity; }, }); diff --git a/packages/core/admin/ee/server/services/review-workflows/review-workflows.js b/packages/core/admin/ee/server/services/review-workflows/review-workflows.js index 552b48f028..0b95414412 100644 --- a/packages/core/admin/ee/server/services/review-workflows/review-workflows.js +++ b/packages/core/admin/ee/server/services/review-workflows/review-workflows.js @@ -15,6 +15,7 @@ const { const { getDefaultWorkflow } = require('../../utils/review-workflows'); const { persistTables, removePersistedTablesWithSuffix } = require('../../utils/persisted-tables'); +const webhookEvents = require('../../constants/webhookEvents'); async function initDefaultWorkflow({ workflowsService, stagesService, strapi }) { const wfCount = await workflowsService.count(); @@ -121,7 +122,9 @@ function persistStagesJoinTables({ strapi }) { } const registerWebhookEvents = async ({ strapi }) => - strapi.webhookStore.addAllowedEvent('WORKFLOW_UPDATE_STAGE', 'workflow.updateEntryStage'); + Object.entries(webhookEvents).forEach(([eventKey, event]) => + strapi.webhookStore.addAllowedEvent(eventKey, event) + ); module.exports = ({ strapi }) => { const workflowsService = getService('workflows', { strapi }); diff --git a/packages/core/admin/ee/server/services/review-workflows/stages.js b/packages/core/admin/ee/server/services/review-workflows/stages.js index 235bb7edb6..442dfb9f5e 100644 --- a/packages/core/admin/ee/server/services/review-workflows/stages.js +++ b/packages/core/admin/ee/server/services/review-workflows/stages.js @@ -144,7 +144,7 @@ module.exports = ({ strapi }) => { * @param {string} contentTypeUID * @param {number} fromStageId * @param {number} toStageId - * @param {KnexTransaction} trx + * @param {import('knex').Knex.Transaction} trx * @returns */ async updateEntitiesStage(contentTypeUID, { fromStageId, toStageId, trx = null }) { diff --git a/packages/core/admin/package.json b/packages/core/admin/package.json index 32aee15cc1..f19a0a719b 100644 --- a/packages/core/admin/package.json +++ b/packages/core/admin/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/admin", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi Admin", "repository": { "type": "git", @@ -48,15 +48,15 @@ "@casl/ability": "^5.4.3", "@fingerprintjs/fingerprintjs": "3.4.1", "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", - "@strapi/babel-plugin-switch-ee-ce": "4.11.0", - "@strapi/data-transfer": "4.11.0", + "@strapi/babel-plugin-switch-ee-ce": "4.11.1", + "@strapi/data-transfer": "4.11.1", "@strapi/design-system": "1.8.0", - "@strapi/helper-plugin": "4.11.0", + "@strapi/helper-plugin": "4.11.1", "@strapi/icons": "1.8.0", - "@strapi/permissions": "4.11.0", - "@strapi/provider-audit-logs-local": "4.11.0", - "@strapi/typescript-utils": "4.11.0", - "@strapi/utils": "4.11.0", + "@strapi/permissions": "4.11.1", + "@strapi/provider-audit-logs-local": "4.11.1", + "@strapi/typescript-utils": "4.11.1", + "@strapi/utils": "4.11.1", "axios": "1.4.0", "babel-loader": "^9.1.2", "babel-plugin-styled-components": "2.1.1", diff --git a/packages/core/admin/server/strategies/api-token.js b/packages/core/admin/server/strategies/api-token.js index 60cea02b8a..1c2c586be7 100644 --- a/packages/core/admin/server/strategies/api-token.js +++ b/packages/core/admin/server/strategies/api-token.js @@ -1,6 +1,6 @@ 'use strict'; -const { castArray, isNil, isEmpty } = require('lodash/fp'); +const { castArray, isNil } = require('lodash/fp'); const { UnauthorizedError, ForbiddenError } = require('@strapi/utils').errors; const constants = require('../services/constants'); const { getService } = require('../utils'); @@ -78,13 +78,6 @@ const authenticate = async (ctx) => { const verify = (auth, config) => { const { credentials: apiToken, ability } = auth; - strapi.telemetry.send('didReceiveAPIRequest', { - eventProperties: { - authenticationMethod: auth?.strategy?.name || 'api-token', - isAuthenticated: !isEmpty(apiToken), - }, - }); - if (!apiToken) { throw new UnauthorizedError('Token not found'); } diff --git a/packages/core/content-manager/package.json b/packages/core/content-manager/package.json index 385223c07d..b54cd35c5a 100644 --- a/packages/core/content-manager/package.json +++ b/packages/core/content-manager/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-content-manager", - "version": "4.11.0", + "version": "4.11.1", "description": "A powerful UI to easily manage your data.", "repository": { "type": "git", @@ -26,7 +26,7 @@ }, "dependencies": { "@sindresorhus/slugify": "1.1.0", - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "lodash": "4.17.21" }, "engines": { diff --git a/packages/core/content-manager/server/controllers/__tests__/single-types.test.js b/packages/core/content-manager/server/controllers/__tests__/single-types.test.js index 8cc8d5602a..8f55bea3ac 100644 --- a/packages/core/content-manager/server/controllers/__tests__/single-types.test.js +++ b/packages/core/content-manager/server/controllers/__tests__/single-types.test.js @@ -3,6 +3,13 @@ const createContext = require('../../../../../../test/helpers/create-context'); const singleTypes = require('../single-types'); +// Mock the populate functions +jest.mock('../../services/utils/populate', () => ({ + ...jest.requireActual('../../services/utils/populate'), + getDeepPopulate: () => ({}), + getQueryPopulate: async () => ({}), +})); + describe('Single Types', () => { test('Successfull find', async () => { const state = { @@ -36,6 +43,7 @@ describe('Single Types', () => { }, }, }, + getModel: jest.fn(), plugins: { 'content-manager': { services: { @@ -52,6 +60,7 @@ describe('Single Types', () => { return permissionChecker; }, }, + 'populate-builder': require('../../services/populate-builder')(), }, }, }, @@ -149,6 +158,7 @@ describe('Single Types', () => { return permissionChecker; }, }, + 'populate-builder': require('../../services/populate-builder')(), }, }, }, @@ -265,6 +275,7 @@ describe('Single Types', () => { return permissionChecker; }, }, + 'populate-builder': require('../../services/populate-builder')(), }, }, }, @@ -362,6 +373,7 @@ describe('Single Types', () => { return permissionChecker; }, }, + 'populate-builder': require('../../services/populate-builder')(), }, }, }, @@ -459,6 +471,7 @@ describe('Single Types', () => { return permissionChecker; }, }, + 'populate-builder': require('../../services/populate-builder')(), }, }, }, diff --git a/packages/core/content-manager/server/controllers/collection-types.js b/packages/core/content-manager/server/controllers/collection-types.js index 5ec635968b..ea9a368aea 100644 --- a/packages/core/content-manager/server/controllers/collection-types.js +++ b/packages/core/content-manager/server/controllers/collection-types.js @@ -20,8 +20,13 @@ module.exports = { const permissionQuery = await permissionChecker.sanitizedQuery.read(query); - const { results, pagination } = await entityManager.findWithRelationCountsPage( - permissionQuery, + const populate = await getService('populate-builder')(model) + .populateDeep(1) + .countRelations({ toOne: false, toMany: true }) + .build(); + + const { results, pagination } = await entityManager.findPage( + { ...permissionQuery, populate }, model ); @@ -46,16 +51,26 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRolesAndCount(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .populateDeep(Infinity) + .countRelations() + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); } + // if the user has condition that needs populated content, it's not applied because entity don't have relations populated if (permissionChecker.cannot.read(entity)) { return ctx.forbidden(); } + // TODO: Count populated relations by permissions + ctx.body = await permissionChecker.sanitizeOutput(entity); }, @@ -80,8 +95,14 @@ module.exports = { const sanitizeFn = pipeAsync(pickWritables, pickPermittedFields, setCreator); const sanitizedBody = await sanitizeFn(body); + const entity = await entityManager.create(sanitizedBody, model); + // TODO: Revert the creation if create permission conditions are not met + // if (permissionChecker.cannot.create(entity)) { + // return ctx.forbidden(); + // } + ctx.body = await permissionChecker.sanitizeOutput(entity); if (totalEntries === 0) { @@ -103,7 +124,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRoles(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.update(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); @@ -116,10 +142,9 @@ module.exports = { const pickWritables = pickWritableAttributes({ model }); const pickPermittedFields = permissionChecker.sanitizeUpdateInput(entity); const setCreator = setCreatorFields({ user, isEdition: true }); - const sanitizeFn = pipeAsync(pickWritables, pickPermittedFields, setCreator); - const sanitizedBody = await sanitizeFn(body); + const updatedEntity = await entityManager.update(entity, sanitizedBody, model); ctx.body = await permissionChecker.sanitizeOutput(updatedEntity); @@ -136,7 +161,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRoles(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.delete(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); @@ -162,7 +192,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRoles(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); @@ -196,7 +231,12 @@ module.exports = { return ctx.forbidden(); } - const entityPromises = ids.map((id) => entityManager.findOneWithCreatorRoles(id, model)); + const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entityPromises = ids.map((id) => entityManager.findOne(id, model, { populate })); const entities = await Promise.all(entityPromises); for (const entity of entities) { @@ -228,7 +268,12 @@ module.exports = { return ctx.forbidden(); } - const entityPromises = ids.map((id) => entityManager.findOneWithCreatorRoles(id, model)); + const permissionQuery = await permissionChecker.sanitizedQuery.publish(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entityPromises = ids.map((id) => entityManager.findOne(id, model, { populate })); const entities = await Promise.all(entityPromises); for (const entity of entities) { @@ -256,7 +301,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRoles(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.unpublish(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); @@ -317,7 +367,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRolesAndCount(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); diff --git a/packages/core/content-manager/server/controllers/relations.js b/packages/core/content-manager/server/controllers/relations.js index 8134d5812b..629e7ce5d9 100644 --- a/packages/core/content-manager/server/controllers/relations.js +++ b/packages/core/content-manager/server/controllers/relations.js @@ -55,7 +55,12 @@ module.exports = { if (entityId) { const entityManager = getService('entity-manager'); - const entity = await entityManager.findOneWithCreatorRoles(entityId, model); + const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(entityId, model, { populate }); if (!entity) { return ctx.notFound(); @@ -161,7 +166,12 @@ module.exports = { return ctx.forbidden(); } - const entity = await entityManager.findOneWithCreatorRoles(id, model); + const permissionQuery = await permissionChecker.sanitizedQuery.read(ctx.query); + const populate = await getService('populate-builder')(model) + .populateFromQuery(permissionQuery) + .build(); + + const entity = await entityManager.findOne(id, model, { populate }); if (!entity) { return ctx.notFound(); diff --git a/packages/core/content-manager/server/controllers/single-types.js b/packages/core/content-manager/server/controllers/single-types.js index bee0f11076..8e8b2e8554 100644 --- a/packages/core/content-manager/server/controllers/single-types.js +++ b/packages/core/content-manager/server/controllers/single-types.js @@ -7,8 +7,13 @@ const { getService, pickWritableAttributes } = require('../utils'); const findEntity = async (query, model) => { const entityManager = getService('entity-manager'); - const entity = await entityManager.find(query, model); - return entityManager.assocCreatorRoles(entity); + const populate = await getService('populate-builder')(model) + .populateFromQuery(query) + .populateDeep(Infinity) + .countRelations() + .build(); + + return entityManager.find(query, model, { populate }); }; module.exports = { @@ -56,7 +61,6 @@ module.exports = { } const sanitizedQuery = await permissionChecker.sanitizedQuery.update(query); - const entity = await findEntity(sanitizedQuery, model); const pickWritables = pickWritableAttributes({ model }); diff --git a/packages/core/content-manager/server/services/__tests__/entity-manager.test.js b/packages/core/content-manager/server/services/__tests__/entity-manager.test.js index 66a8c4a040..f48878f6dd 100644 --- a/packages/core/content-manager/server/services/__tests__/entity-manager.test.js +++ b/packages/core/content-manager/server/services/__tests__/entity-manager.test.js @@ -37,6 +37,13 @@ describe('Content-Manager', () => { webhookStore: { allowedEvents: new Map([['ENTRY_PUBLISH', 'entry.publish']]), }, + plugins: { + 'content-manager': { + services: { + 'populate-builder': require('../populate-builder')(), + }, + }, + }, }; entityManager = entityManagerLoader({ strapi }); }); @@ -154,6 +161,13 @@ describe('Content-Manager', () => { webhookStore: { allowedEvents: new Map([['ENTRY_UNPUBLISH', 'entry.unpublish']]), }, + plugins: { + 'content-manager': { + services: { + 'populate-builder': require('../populate-builder')(), + }, + }, + }, }; entityManager = entityManagerLoader({ strapi }); }); diff --git a/packages/core/content-manager/server/services/entity-manager.d.ts b/packages/core/content-manager/server/services/entity-manager.d.ts index be7b84eeba..853f98497d 100644 --- a/packages/core/content-manager/server/services/entity-manager.d.ts +++ b/packages/core/content-manager/server/services/entity-manager.d.ts @@ -1,17 +1,16 @@ interface EntityManager { - assocCreatorRoles(): any; + mapEntity(entity: T): T; + mapEntitiesResponse(entities: T[], uid: string): T[]; find(): any; findPage(): any; - findWithRelationCountsPage(): any; - count(): any; findOne(): any; - findOneWithCreatorRoles(): any; create(): any; update(): any; delete(): any; deleteMany(): any; publish(): any; unpublish(): any; + getNumberOfDraftRelations(id: string, uid: string): number; } export default function (opts: { strapi: Strapi }): EntityManager; diff --git a/packages/core/content-manager/server/services/entity-manager.js b/packages/core/content-manager/server/services/entity-manager.js index 0b1a3e216d..6c45b16e30 100644 --- a/packages/core/content-manager/server/services/entity-manager.js +++ b/packages/core/content-manager/server/services/entity-manager.js @@ -1,18 +1,20 @@ 'use strict'; -const { assoc, has, prop, omit } = require('lodash/fp'); +const { omit } = require('lodash/fp'); const strapiUtils = require('@strapi/utils'); const { mapAsync } = require('@strapi/utils'); const { ApplicationError } = require('@strapi/utils').errors; +const { getService } = require('../utils'); const { getDeepPopulate, getDeepPopulateDraftCount } = require('./utils/populate'); const { getDeepRelationsCount } = require('./utils/count'); const { sumDraftCounts } = require('./utils/draft'); +const { isWebhooksPopulateRelationsEnabled } = require('./utils/populate'); const { ALLOWED_WEBHOOK_EVENTS: { ENTRY_PUBLISH, ENTRY_UNPUBLISH }, } = require('../constants'); const { hasDraftAndPublish } = strapiUtils.contentTypes; -const { PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = strapiUtils.contentTypes.constants; +const { PUBLISHED_AT_ATTRIBUTE } = strapiUtils.contentTypes.constants; const omitPublishedAtField = omit(PUBLISHED_AT_ATTRIBUTE); @@ -29,52 +31,19 @@ const emitEvent = async (uid, event, entity) => { }); }; -const findCreatorRoles = (entity) => { - const createdByPath = `${CREATED_BY_ATTRIBUTE}.id`; - - if (has(createdByPath, entity)) { - const creatorId = prop(createdByPath, entity); - return strapi.query('admin::role').findMany({ where: { users: { id: creatorId } } }); - } - - return []; -}; - -const addCreatedByRolesPopulate = (populate) => { - return { - ...populate, - createdBy: { - populate: ['roles'], - }, - }; -}; - -/** - * When webhooks.populateRelations is set to true, populated relations - * will be passed to any webhook event. The entity-manager - * response will not have the populated relations though. - * For performance reasons, it is recommended to set it to false, - * - * TODO V5: Set to false by default. - * TODO V5: Make webhooks always send the same entity data. - */ -const isRelationsPopulateEnabled = () => { - return strapi.config.get('server.webhooks.populateRelations', true); +const buildDeepPopulate = (uid) => { + // User can configure to populate relations, so downstream services can use them. + // They will be transformed into counts later if this is set to true. + return getService('populate-builder')(uid) + .populateDeep(Infinity) + .countRelationsIf(!isWebhooksPopulateRelationsEnabled(uid)) + .build(); }; /** * @type {import('./entity-manager').default} */ module.exports = ({ strapi }) => ({ - async assocCreatorRoles(entity) { - if (!entity) { - return entity; - } - - const roles = await findCreatorRoles(entity); - return assoc(`${CREATED_BY_ATTRIBUTE}.roles`, roles, entity); - }, - /** * Extend this function from other plugins to add custom mapping of entity * responses @@ -104,78 +73,37 @@ module.exports = ({ strapi }) => ({ async find(opts, uid) { const params = { ...opts, populate: getDeepPopulate(uid) }; - const entities = await strapi.entityService.findMany(uid, params); - return this.mapEntitiesResponse(entities, uid); }, async findPage(opts, uid) { - const params = { ...opts, populate: getDeepPopulate(uid, { maxLevel: 1 }) }; - - const entities = await strapi.entityService.findPage(uid, params); - + const entities = await strapi.entityService.findPage(uid, opts); return this.mapEntitiesResponse(entities, uid); }, - async findWithRelationCountsPage(opts, uid) { - const counterPopulate = getDeepPopulate(uid, { countMany: true, maxLevel: 1 }); - const params = { ...opts, populate: addCreatedByRolesPopulate(counterPopulate) }; - - const entities = await strapi.entityService.findWithRelationCountsPage(uid, params); - - return this.mapEntitiesResponse(entities, uid); - }, - - async findOneWithCreatorRolesAndCount(id, uid) { - const counterPopulate = getDeepPopulate(uid, { countMany: true, countOne: true }); - const params = { populate: addCreatedByRolesPopulate(counterPopulate) }; - + async findOne(id, uid, opts = {}) { return strapi.entityService - .findOne(uid, id, params) + .findOne(uid, id, opts) .then((entity) => this.mapEntity(entity, uid)); }, - async findOne(id, uid) { - const params = { populate: getDeepPopulate(uid) }; - - return strapi.entityService - .findOne(uid, id, params) - .then((entity) => this.mapEntity(entity, uid)); - }, - - async findOneWithCreatorRoles(id, uid) { - const entity = await this.findOne(id, uid).then((entity) => this.mapEntity(entity, uid)); - - if (!entity) { - return entity; - } - - return this.assocCreatorRoles(entity); - }, - async create(body, uid) { const modelDef = strapi.getModel(uid); const publishData = { ...body }; - const populateRelations = isRelationsPopulateEnabled(uid); + const populate = await buildDeepPopulate(uid); if (hasDraftAndPublish(modelDef)) { publishData[PUBLISHED_AT_ATTRIBUTE] = null; } - const params = { - data: publishData, - populate: populateRelations - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }), - }; + const params = { data: publishData, populate }; const entity = await strapi.entityService .create(uid, params) .then((entity) => this.mapEntity(entity, uid)); - // If relations were populated, relations count will be returned instead of the array of relations. - if (populateRelations) { + if (isWebhooksPopulateRelationsEnabled(uid)) { return getDeepRelationsCount(entity, uid); } @@ -184,21 +112,14 @@ module.exports = ({ strapi }) => ({ async update(entity, body, uid) { const publishData = omitPublishedAtField(body); - const populateRelations = isRelationsPopulateEnabled(uid); - - const params = { - data: publishData, - populate: populateRelations - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }), - }; + const populate = await buildDeepPopulate(uid); + const params = { data: publishData, populate }; const updatedEntity = await strapi.entityService .update(uid, entity.id, params) .then((entity) => this.mapEntity(entity, uid)); - // If relations were populated, relations count will be returned instead of the array of relations. - if (populateRelations) { + if (isWebhooksPopulateRelationsEnabled(uid)) { return getDeepRelationsCount(updatedEntity, uid); } @@ -206,18 +127,11 @@ module.exports = ({ strapi }) => ({ }, async delete(entity, uid) { - const populateRelations = isRelationsPopulateEnabled(uid); - - const params = { - populate: populateRelations - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }), - }; - - const deletedEntity = await strapi.entityService.delete(uid, entity.id, params); + const populate = await buildDeepPopulate(uid); + const deletedEntity = await strapi.entityService.delete(uid, entity.id, { populate }); // If relations were populated, relations count will be returned instead of the array of relations. - if (populateRelations) { + if (isWebhooksPopulateRelationsEnabled(uid)) { return getDeepRelationsCount(deletedEntity, uid); } @@ -226,9 +140,7 @@ module.exports = ({ strapi }) => ({ // FIXME: handle relations deleteMany(opts, uid) { - const params = { ...opts }; - - return strapi.entityService.deleteMany(uid, params); + return strapi.entityService.deleteMany(uid, opts); }, async publish(entity, uid, body = {}) { @@ -245,14 +157,9 @@ module.exports = ({ strapi }) => ({ ); const data = { ...body, [PUBLISHED_AT_ATTRIBUTE]: new Date() }; - const populateRelations = isRelationsPopulateEnabled(uid); + const populate = await buildDeepPopulate(uid); - const params = { - data, - populate: populateRelations - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }), - }; + const params = { data, populate }; const updatedEntity = await strapi.entityService.update(uid, entity.id, params); @@ -261,7 +168,7 @@ module.exports = ({ strapi }) => ({ const mappedEntity = await this.mapEntity(updatedEntity, uid); // If relations were populated, relations count will be returned instead of the array of relations. - if (isRelationsPopulateEnabled(uid)) { + if (isWebhooksPopulateRelationsEnabled(uid)) { return getDeepRelationsCount(mappedEntity, uid); } @@ -275,14 +182,12 @@ module.exports = ({ strapi }) => ({ // Validate entities before publishing, throw if invalid await Promise.all( - entities.map((entityToUpdate) => { + entities.map((entity) => { return strapi.entityValidator.validateEntityCreation( strapi.getModel(uid), - entityToUpdate, - { - isDraft: true, - }, - entityToUpdate + entity, + undefined, + entity ); }) ); @@ -293,12 +198,9 @@ module.exports = ({ strapi }) => ({ .map((entity) => entity.id); const filters = { id: { $in: entitiesToPublish } }; - const data = { - [PUBLISHED_AT_ATTRIBUTE]: new Date(), - }; - const populate = isRelationsPopulateEnabled(uid) - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }); + const data = { [PUBLISHED_AT_ATTRIBUTE]: new Date() }; + const populate = await buildDeepPopulate(uid); + // Everything is valid, publish const publishedEntitiesCount = await strapi.db.query(uid).updateMany({ where: filters, @@ -324,12 +226,8 @@ module.exports = ({ strapi }) => ({ .map((entity) => entity.id); const filters = { id: { $in: entitiesToUnpublish } }; - const data = { - [PUBLISHED_AT_ATTRIBUTE]: null, - }; - const populate = isRelationsPopulateEnabled(uid) - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }); + const data = { [PUBLISHED_AT_ATTRIBUTE]: null }; + const populate = await buildDeepPopulate(uid); // No need to validate, unpublish const unpublishedEntitiesCount = await strapi.db.query(uid).updateMany({ @@ -351,14 +249,9 @@ module.exports = ({ strapi }) => ({ } const data = { ...body, [PUBLISHED_AT_ATTRIBUTE]: null }; - const populateRelations = isRelationsPopulateEnabled(uid); + const populate = await buildDeepPopulate(uid); - const params = { - data, - populate: populateRelations - ? getDeepPopulate(uid, {}) - : getDeepPopulate(uid, { countMany: true, countOne: true }), - }; + const params = { data, populate }; const updatedEntity = await strapi.entityService.update(uid, entity.id, params); @@ -367,7 +260,7 @@ module.exports = ({ strapi }) => ({ const mappedEntity = await this.mapEntity(updatedEntity, uid); // If relations were populated, relations count will be returned instead of the array of relations. - if (isRelationsPopulateEnabled(uid)) { + if (isWebhooksPopulateRelationsEnabled(uid)) { return getDeepRelationsCount(mappedEntity, uid); } diff --git a/packages/core/content-manager/server/services/index.js b/packages/core/content-manager/server/services/index.js index 7a416e428b..7b114df80f 100644 --- a/packages/core/content-manager/server/services/index.js +++ b/packages/core/content-manager/server/services/index.js @@ -8,6 +8,7 @@ const fieldSizes = require('./field-sizes'); const metrics = require('./metrics'); const permissionChecker = require('./permission-checker'); const permission = require('./permission'); +const populateBuilder = require('./populate-builder'); const uid = require('./uid'); module.exports = { @@ -19,5 +20,6 @@ module.exports = { metrics, 'permission-checker': permissionChecker, permission, + 'populate-builder': populateBuilder, uid, }; diff --git a/packages/core/content-manager/server/services/permission-checker.js b/packages/core/content-manager/server/services/permission-checker.js index 567a1dd4c9..10305ec19a 100644 --- a/packages/core/content-manager/server/services/permission-checker.js +++ b/packages/core/content-manager/server/services/permission-checker.js @@ -75,8 +75,8 @@ const createPermissionChecker = return { // Permission utils - can, - cannot, + can, // check if you have the permission + cannot, // check if you don't have the permission // Sanitizers sanitizeOutput, sanitizeQuery, diff --git a/packages/core/content-manager/server/services/populate-builder.js b/packages/core/content-manager/server/services/populate-builder.js new file mode 100644 index 0000000000..a52c85ba24 --- /dev/null +++ b/packages/core/content-manager/server/services/populate-builder.js @@ -0,0 +1,91 @@ +'use strict'; + +const { isNil } = require('lodash/fp'); +const { getDeepPopulate, getQueryPopulate } = require('./utils/populate'); + +/** + * Builder to create a Strapi populate object. + * + * @param {string} uid - Content type UID + * + * @example + * const populate = await populateBuilder('api::article.article').countRelations().build(); + * // populate = { article: { populate: { count: true } } } + * + */ +const populateBuilder = (uid) => { + let getInitialPopulate = async () => {}; + const deepPopulateOptions = { + countMany: false, + countOne: false, + maxLevel: -1, + }; + + const builder = { + /** + * Populates all attribute fields present in a query. + * @param {Object} query - Query object + * @returns {typeof builder} - Builder + */ + populateFromQuery(query) { + getInitialPopulate = async () => getQueryPopulate(uid, query); + return builder; + }, + /** + * Populate relations as count if condition is true. + * @param {Boolean} condition + * @param {Object} [options] + * @param {Boolean} [options.toMany] - Populate XtoMany relations as count if true. + * @param {Boolean} [options.toOne] - Populate XtoOne relations as count if true. + * @returns {typeof builder} - Builder + */ + countRelationsIf(condition, { toMany, toOne } = { toMany: true, toOne: true }) { + if (condition) { + return this.countRelations({ toMany, toOne }); + } + return builder; + }, + /** + * Populate relations as count. + * @param {Object} [options] + * @param {Boolean } [options.toMany] - Populate XtoMany relations as count if true. + * @param {Boolean} [options.toOne] - Populate XtoOne relations as count if true. + * @returns {typeof builder} - Builder + */ + countRelations({ toMany, toOne } = { toMany: true, toOne: true }) { + if (!isNil(toMany)) { + deepPopulateOptions.countMany = toMany; + } + if (!isNil(toOne)) { + deepPopulateOptions.countOne = toOne; + } + return builder; + }, + /** + * Populate relations deeply, up to a certain level. + * @param {Number} [level=Infinity] - Max level of nested populate. + * @returns {typeof builder} - Builder + */ + populateDeep(level = Infinity) { + deepPopulateOptions.maxLevel = level; + return builder; + }, + /** + * Construct the populate object based on the builder options. + * @returns {Object} - Populate object + */ + async build() { + const initialPopulate = await getInitialPopulate(); + + if (deepPopulateOptions.maxLevel === -1) { + return initialPopulate; + } + + return getDeepPopulate(uid, { ...deepPopulateOptions, initialPopulate }); + }, + }; + + return builder; +}; + +module.exports = () => populateBuilder; diff --git a/packages/core/content-manager/server/services/utils/__tests__/query-populate.test.js b/packages/core/content-manager/server/services/utils/__tests__/query-populate.test.js new file mode 100644 index 0000000000..66de9eb7e4 --- /dev/null +++ b/packages/core/content-manager/server/services/utils/__tests__/query-populate.test.js @@ -0,0 +1,155 @@ +'use strict'; + +const { getQueryPopulate } = require('../populate'); + +const getFilterQuery = (conditions) => ({ + filters: { + $or: [ + { + $and: [ + { + $or: conditions, + }, + ], + }, + ], + }, +}); + +const uid = 'api::model.model'; + +describe('Populate', () => { + const fakeModels = { + empty: { + uid: 'empty', + attributes: {}, + }, + [uid]: { + uid: 'api::model.model', + attributes: { + field: { + type: 'string', + }, + relation: { + type: 'relation', + relation: 'oneToMany', + target: 'api::model.model', + }, + // Edge case: an attribute named "populate" should be populated + populate: { + type: 'relation', + relation: 'oneToMany', + target: 'api::model.model', + }, + component: { + type: 'component', + component: 'component', + }, + repeatableComponent: { + type: 'component', + repeatable: true, + component: 'component', + }, + media: { + type: 'media', + }, + }, + }, + component: { + uid: 'component', + attributes: { + field: { + type: 'string', + }, + compoRelation: { + type: 'relation', + relation: 'oneToMany', + target: 'api::model.model', + }, + }, + }, + }; + + describe('getQueryPopulate', () => { + beforeEach(() => { + global.strapi = { + contentType: jest.fn((uid) => fakeModels[uid]), + getModel: jest.fn((uid) => fakeModels[uid]), + db: { + metadata: { + get: jest.fn((uid) => ({ ...fakeModels[uid], columnToAttribute: {} })), + }, + }, + }; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('top level field should not be populated', async () => { + const query = getFilterQuery([{ field: { $exists: true } }]); + const result = await getQueryPopulate(uid, query); + + expect(result).toEqual({}); + }); + + test('one relational field should be populated', async () => { + const query = getFilterQuery([{ relation: { field: 'value' } }]); + const result = await getQueryPopulate(uid, query); + + expect(result).toEqual({ + relation: {}, + }); + }); + + test('one relational field named populate should be populated', async () => { + const query = getFilterQuery([{ populate: { populate: { field: 'value' } } }]); + const result = await getQueryPopulate(uid, query); + + // Populate train! Choo choo! + expect(result).toEqual({ + populate: { + populate: { + populate: {}, + }, + }, + }); + }); + + test('relation in component should be populated', async () => { + const query = getFilterQuery([{ component: { compoRelation: { field: 'value' } } }]); + const result = await getQueryPopulate(uid, query); + + expect(result).toEqual({ + component: { populate: { compoRelation: {} } }, + }); + }); + + test('relation in repeatable component should be populated', async () => { + const query = getFilterQuery([ + { repeatableComponent: { compoRelation: { field: 'value' } } }, + ]); + const result = await getQueryPopulate(uid, query); + + expect(result).toEqual({ + repeatableComponent: { populate: { compoRelation: {} } }, + }); + }); + + test('populate multiple fields at once', async () => { + const query = getFilterQuery([ + { relation: { component: { field: { $eq: 'value' } } } }, + { relation: { field: 'value' } }, + { repeatableComponent: { $elemMatch: { compoRelation: { field: 'value' } } } }, + ]); + + const result = await getQueryPopulate(uid, query); + + expect(result).toEqual({ + relation: { populate: { component: {} } }, + repeatableComponent: { populate: { compoRelation: {} } }, + }); + }); + }); +}); diff --git a/packages/core/content-manager/server/services/utils/populate.js b/packages/core/content-manager/server/services/utils/populate.js index 38289cbf8d..b2b2d45154 100644 --- a/packages/core/content-manager/server/services/utils/populate.js +++ b/packages/core/content-manager/server/services/utils/populate.js @@ -1,12 +1,19 @@ 'use strict'; -const { merge, isEmpty } = require('lodash/fp'); +const { merge, isEmpty, set, propEq } = require('lodash/fp'); const strapiUtils = require('@strapi/utils'); const { hasDraftAndPublish, isVisibleAttribute } = strapiUtils.contentTypes; const { isAnyToMany } = strapiUtils.relations; const { PUBLISHED_AT_ATTRIBUTE } = strapiUtils.contentTypes.constants; +const isMorphToRelation = (attribute) => + isRelation(attribute) && attribute.relation.includes('morphTo'); +const isMedia = propEq('type', 'media'); +const isRelation = propEq('type', 'relation'); +const isComponent = propEq('type', 'component'); +const isDynamicZone = propEq('type', 'dynamiczone'); + /** * Populate the model for relation * @param {Object} attribute - Attribute containing a relation @@ -18,13 +25,23 @@ const { PUBLISHED_AT_ATTRIBUTE } = strapiUtils.contentTypes.constants; * @param {Boolean} options.countOne * @returns {true|{count: true}} */ -function getPopulateForRelation(attribute, model, attributeName, { countMany, countOne }) { +function getPopulateForRelation( + attribute, + model, + attributeName, + { countMany, countOne, initialPopulate } +) { const isManyRelation = isAnyToMany(attribute); + if (initialPopulate) { + return initialPopulate; + } + // always populate createdBy, updatedBy, localizations etc. if (!isVisibleAttribute(model, attributeName)) { return true; } + if ((isManyRelation && countMany) || (!isManyRelation && countOne)) { return { count: true }; } @@ -109,7 +126,7 @@ function getPopulateFor(attributeName, model, options, level) { */ const getDeepPopulate = ( uid, - { countMany = false, countOne = false, maxLevel = Infinity } = {}, + { initialPopulate = {}, countMany = false, countOne = false, maxLevel = Infinity } = {}, level = 1 ) => { if (level > maxLevel) { @@ -122,7 +139,12 @@ const getDeepPopulate = ( (populateAcc, attributeName) => merge( populateAcc, - getPopulateFor(attributeName, model, { countMany, countOne, maxLevel }, level) + getPopulateFor( + attributeName, + model, + { initialPopulate: initialPopulate?.[attributeName], countMany, countOne, maxLevel }, + level + ) ), {} ); @@ -191,7 +213,62 @@ const getDeepPopulateDraftCount = (uid) => { return { populate, hasRelations }; }; +/** + * Create a Strapi populate object which populates all attribute fields of a Strapi query. + * + * @param {string} uid + * @param {Object} query + * @returns {Object} populate object + */ +const getQueryPopulate = async (uid, query) => { + let populateQuery = {}; + + await strapiUtils.traverse.traverseQueryFilters( + /** + * + * @param {Object} param0 + * @param {string} param0.key - Attribute name + * @param {Object} param0.attribute - Attribute definition + * @param {string} param0.path - Content Type path to the attribute + * @returns + */ + ({ attribute, path }) => { + // TODO: handle dynamic zones and morph relations + if (!attribute || isDynamicZone(attribute) || isMorphToRelation(attribute)) { + return; + } + + // Populate all relations, components and media + if (isRelation(attribute) || isMedia(attribute) || isComponent(attribute)) { + const populatePath = path.attribute.replace(/\./g, '.populate.'); + populateQuery = set(populatePath, {}, populateQuery); + } + }, + { schema: strapi.getModel(uid) }, + query + ); + + return populateQuery; +}; + +/** + * When config admin.webhooks.populateRelations is set to true, + * populated relations will be passed to any webhook event. + * The entity-manager response will not have the populated relations though. + * For performance reasons, it is recommended to set it to false, + * + * See docs: https://docs.strapi.io/dev-docs/configurations/server + * + * TODO V5: Set to false by default. + * TODO V5: Make webhooks always send the same entity data. + */ +const isWebhooksPopulateRelationsEnabled = () => { + return strapi.config.get('server.webhooks.populateRelations', true); +}; + module.exports = { getDeepPopulate, getDeepPopulateDraftCount, + getQueryPopulate, + isWebhooksPopulateRelationsEnabled, }; diff --git a/packages/core/content-type-builder/admin/src/components/AllowedTypesSelect/index.js b/packages/core/content-type-builder/admin/src/components/AllowedTypesSelect/index.js index b647d2decf..0b183be031 100644 --- a/packages/core/content-type-builder/admin/src/components/AllowedTypesSelect/index.js +++ b/packages/core/content-type-builder/admin/src/components/AllowedTypesSelect/index.js @@ -1,8 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { MultiSelectNested } from '@strapi/design-system'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const options = [ { diff --git a/packages/core/content-type-builder/admin/src/components/AttributeIcon/index.js b/packages/core/content-type-builder/admin/src/components/AttributeIcon/index.js index dc4fc27f04..a0bd9747d8 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeIcon/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeIcon/index.js @@ -1,26 +1,27 @@ import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import { pxToRem, useCustomFields } from '@strapi/helper-plugin'; import { - Component, - CollectionType, - Date, Boolean, + CollectionType, + Component, + Date, DynamicZone, Email, Enumeration, Json, - RichText, Media, + Number, Password, Relation, + RichText, SingleType, Text, Uid, - Number, } from '@strapi/icons'; -import { pxToRem, useCustomFields } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; const iconByTypes = { biginteger: Number, diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeList/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeList/index.js index 1f14ec9d6c..02e70e6259 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeList/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeList/index.js @@ -1,6 +1,8 @@ import React from 'react'; + +import { Box, Flex, Grid, GridItem, KeyboardNavigable } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, Grid, GridItem, KeyboardNavigable, Flex } from '@strapi/design-system'; + import AttributeOption from '../AttributeOption'; import getPadding from '../utils/getPadding'; diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeOption/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeOption/index.js index 710e4cd055..997d4c55b4 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeOption/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/AttributeOption/index.js @@ -5,9 +5,11 @@ */ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Box, Flex, Typography } from '@strapi/design-system'; + import useFormModalNavigation from '../../../hooks/useFormModalNavigation'; import getTrad from '../../../utils/getTrad'; import AttributeIcon from '../../AttributeIcon'; diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldOption/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldOption/index.js index 8ec76d90ae..20b6e535d8 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldOption/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldOption/index.js @@ -5,12 +5,14 @@ */ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Box, Flex, Typography } from '@strapi/design-system'; -import OptionBoxWrapper from '../OptionBoxWrapper'; -import AttributeIcon from '../../AttributeIcon'; + import useFormModalNavigation from '../../../hooks/useFormModalNavigation'; +import AttributeIcon from '../../AttributeIcon'; +import OptionBoxWrapper from '../OptionBoxWrapper'; const CustomFieldOption = ({ customFieldUid, customField }) => { const { type, intlLabel, intlDescription } = customField; diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldsList/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldsList/index.js index 624359081e..c28af76bac 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldsList/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/CustomFieldsList/index.js @@ -1,11 +1,13 @@ import React from 'react'; + +import { Box, Flex, Grid, GridItem, KeyboardNavigable, Link } from '@strapi/design-system'; import { useCustomFields } from '@strapi/helper-plugin'; -import { Box, Grid, GridItem, KeyboardNavigable, Flex, Link } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import EmptyAttributes from '../EmptyAttributes'; -import CustomFieldOption from '../CustomFieldOption'; -import getPadding from '../utils/getPadding'; + import { getTrad } from '../../../utils'; +import CustomFieldOption from '../CustomFieldOption'; +import EmptyAttributes from '../EmptyAttributes'; +import getPadding from '../utils/getPadding'; const CustomFieldsList = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/EmptyAttributes/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/EmptyAttributes/index.js index d07ba8c617..ce0318372c 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/EmptyAttributes/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/EmptyAttributes/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; + +import { Box, Flex, Icon, LinkButton, Typography } from '@strapi/design-system'; +import { EmptyDocuments, Plus } from '@strapi/icons'; import qs from 'qs'; -import { Box, Flex, Typography, LinkButton, Icon } from '@strapi/design-system'; -import { Plus, EmptyDocuments } from '@strapi/icons'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + import { getTrad } from '../../../utils'; const EmptyCard = styled(Box)` diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/OptionBoxWrapper/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/OptionBoxWrapper/index.js index db17bac88b..b8fdafb1df 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/OptionBoxWrapper/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/OptionBoxWrapper/index.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { Box } from '@strapi/design-system'; +import styled from 'styled-components'; const BoxWrapper = styled(Box)` width: 100%; diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/index.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/index.js index d3774f91f8..ab33774994 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/index.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/index.js @@ -5,21 +5,24 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Box, Divider, - ModalBody, Flex, - Typography, - Tabs, + ModalBody, Tab, TabGroup, - TabPanels, TabPanel, + TabPanels, + Tabs, + Typography, } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; + import AttributeList from './AttributeList'; import CustomFieldsList from './CustomFieldsList'; diff --git a/packages/core/content-type-builder/admin/src/components/AttributeOptions/tests/index.test.js b/packages/core/content-type-builder/admin/src/components/AttributeOptions/tests/index.test.js index 181cca5591..dcab8ed0d5 100644 --- a/packages/core/content-type-builder/admin/src/components/AttributeOptions/tests/index.test.js +++ b/packages/core/content-type-builder/admin/src/components/AttributeOptions/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; -import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { render, screen, fireEvent } from '@testing-library/react'; + import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; +import { Router } from 'react-router-dom'; + import FormModalNavigationProvider from '../../FormModalNavigationProvider'; import AttributeOptions from '../index'; diff --git a/packages/core/content-type-builder/admin/src/components/BooleanDefaultValueSelect/index.js b/packages/core/content-type-builder/admin/src/components/BooleanDefaultValueSelect/index.js index bf53dd5dfd..5c86668695 100644 --- a/packages/core/content-type-builder/admin/src/components/BooleanDefaultValueSelect/index.js +++ b/packages/core/content-type-builder/admin/src/components/BooleanDefaultValueSelect/index.js @@ -5,9 +5,10 @@ */ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option } from '@strapi/design-system'; const BooleanDefaultValueSelect = ({ intlLabel, name, options, onChange, value }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/BooleanRadioGroup/index.js b/packages/core/content-type-builder/admin/src/components/BooleanRadioGroup/index.js index 5ebc5386c2..1364f9b16e 100644 --- a/packages/core/content-type-builder/admin/src/components/BooleanRadioGroup/index.js +++ b/packages/core/content-type-builder/admin/src/components/BooleanRadioGroup/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import CustomRadioGroup from '../CustomRadioGroup'; const BooleanRadioGroup = ({ onChange, name, ...rest }) => { diff --git a/packages/core/content-type-builder/admin/src/components/CheckboxWithNumberField/index.js b/packages/core/content-type-builder/admin/src/components/CheckboxWithNumberField/index.js index 82a792cb6d..dd7c6f9dc7 100644 --- a/packages/core/content-type-builder/admin/src/components/CheckboxWithNumberField/index.js +++ b/packages/core/content-type-builder/admin/src/components/CheckboxWithNumberField/index.js @@ -5,9 +5,10 @@ */ import React, { useState } from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Box, Checkbox, Flex, NumberInput, TextInput } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const CheckboxWithNumberField = ({ error, intlLabel, modifiedData, name, onChange, value }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.js b/packages/core/content-type-builder/admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.js index 8d8b389af9..6c5a9e4bfa 100644 --- a/packages/core/content-type-builder/admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.js +++ b/packages/core/content-type-builder/admin/src/components/ComponentCard/ComponentIcon/ComponentIcon.js @@ -1,7 +1,8 @@ -import PropTypes from 'prop-types'; import React from 'react'; import { Flex, Icon } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import { COMPONENT_ICONS } from '../../IconPicker/constants'; export function ComponentIcon({ isActive, icon }) { diff --git a/packages/core/content-type-builder/admin/src/components/ComponentCard/index.js b/packages/core/content-type-builder/admin/src/components/ComponentCard/index.js index 3f83bcad12..738edaeb92 100644 --- a/packages/core/content-type-builder/admin/src/components/ComponentCard/index.js +++ b/packages/core/content-type-builder/admin/src/components/ComponentCard/index.js @@ -5,17 +5,18 @@ */ import React from 'react'; -import get from 'lodash/get'; -import PropTypes from 'prop-types'; + import { Box, Flex, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; import { Cross } from '@strapi/icons'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { ComponentIcon } from './ComponentIcon'; - import useDataManager from '../../hooks/useDataManager'; +import { ComponentIcon } from './ComponentIcon'; + const CloseButton = styled(Box)` position: absolute; display: none; diff --git a/packages/core/content-type-builder/admin/src/components/ComponentList/index.js b/packages/core/content-type-builder/admin/src/components/ComponentList/index.js index 586e397887..fcf93b75a4 100644 --- a/packages/core/content-type-builder/admin/src/components/ComponentList/index.js +++ b/packages/core/content-type-builder/admin/src/components/ComponentList/index.js @@ -5,10 +5,12 @@ */ /* eslint-disable import/no-cycle */ import React from 'react'; + import get from 'lodash/get'; import PropTypes from 'prop-types'; -import List from '../List'; + import useDataManager from '../../hooks/useDataManager'; +import List from '../List'; import Tr from '../Tr'; function ComponentList({ diff --git a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/index.js b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/index.js index 9e5384aa37..3fbf4fdedd 100644 --- a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/index.js +++ b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/index.js @@ -1,8 +1,5 @@ import React from 'react'; -import upperFirst from 'lodash/upperFirst'; -import { useIntl } from 'react-intl'; -import { NavLink } from 'react-router-dom'; -import { Plus } from '@strapi/icons'; + import { Box, Icon, TextButton } from '@strapi/design-system'; import { SubNav, @@ -13,9 +10,14 @@ import { SubNavSections, } from '@strapi/design-system/v2'; import { pxToRem } from '@strapi/helper-plugin'; +import { Plus } from '@strapi/icons'; +import upperFirst from 'lodash/upperFirst'; +import { useIntl } from 'react-intl'; +import { NavLink } from 'react-router-dom'; + +import getTrad from '../../utils/getTrad'; import useContentTypeBuilderMenu from './useContentTypeBuilderMenu'; -import getTrad from '../../utils/getTrad'; const ContentTypeBuilderNav = () => { const { menu, searchValue, onSearchChange } = useContentTypeBuilderMenu(); diff --git a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/tests/index.test.js b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/tests/index.test.js index c983699cb6..21c0242cb2 100644 --- a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/tests/index.test.js +++ b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/tests/index.test.js @@ -4,13 +4,16 @@ * */ +import React from 'react'; + import { Layout, lightTheme, ThemeProvider } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; import { render } from '@testing-library/react'; import { createMemoryHistory } from 'history'; -import React from 'react'; +import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; + import ContentTypeBuilderNav from '../index'; + import mockData from './mockData'; jest.mock('../useContentTypeBuilderMenu.js', () => { diff --git a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js index 34e50edffb..4f338a397f 100644 --- a/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +++ b/packages/core/content-type-builder/admin/src/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js @@ -1,11 +1,11 @@ import { useState } from 'react'; -import { useNotification, useTracking, useFilter, useCollator } from '@strapi/helper-plugin'; + +import { useCollator, useFilter, useNotification, useTracking } from '@strapi/helper-plugin'; import isEqual from 'lodash/isEqual'; import { useIntl } from 'react-intl'; import useDataManager from '../../hooks/useDataManager'; import useFormModalNavigation from '../../hooks/useFormModalNavigation'; - import pluginId from '../../pluginId'; import getTrad from '../../utils/getTrad'; diff --git a/packages/core/content-type-builder/admin/src/components/ContentTypeRadioGroup/index.js b/packages/core/content-type-builder/admin/src/components/ContentTypeRadioGroup/index.js index a05e8ddc0d..aa82baa94c 100644 --- a/packages/core/content-type-builder/admin/src/components/ContentTypeRadioGroup/index.js +++ b/packages/core/content-type-builder/admin/src/components/ContentTypeRadioGroup/index.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { useNotification } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + import { getTrad } from '../../utils'; import CustomRadioGroup from '../CustomRadioGroup'; diff --git a/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/components.js b/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/components.js index 30cb232e99..cf5e1c8852 100644 --- a/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/components.js +++ b/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/components.js @@ -1,5 +1,5 @@ +import { Flex, inputFocusStyle, Typography } from '@strapi/design-system'; import styled from 'styled-components'; -import { Flex, Typography, inputFocusStyle } from '@strapi/design-system'; const Wrapper = styled(Flex)` position: relative; diff --git a/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/index.js b/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/index.js index 5b6ecda640..4448e59cce 100644 --- a/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/index.js +++ b/packages/core/content-type-builder/admin/src/components/CustomRadioGroup/index.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Typography, Box, Flex } from '@strapi/design-system'; + import { Wrapper } from './components'; const CustomRadioGroup = ({ intlLabel, name, onChange, radios, value }) => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/index.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/index.js index 46ca2bce3a..83c12d569e 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/index.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/index.js @@ -1,60 +1,62 @@ import React, { memo, useEffect, useMemo, useRef } from 'react'; -import PropTypes from 'prop-types'; + +import { + LoadingIndicatorPage, + useAppInfo, + useAutoReloadOverlayBlocker, + useFetchClient, + useGuidedTour, + useNotification, + useRBACProvider, + useStrapiApp, + useTracking, +} from '@strapi/helper-plugin'; import get from 'lodash/get'; import groupBy from 'lodash/groupBy'; import set from 'lodash/set'; import size from 'lodash/size'; -import { - LoadingIndicatorPage, - useTracking, - useNotification, - useStrapiApp, - useAutoReloadOverlayBlocker, - useAppInfo, - useRBACProvider, - useGuidedTour, - useFetchClient, -} from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useLocation, useRouteMatch, Redirect } from 'react-router-dom'; import { connect, useDispatch } from 'react-redux'; +import { Redirect, useLocation, useRouteMatch } from 'react-router-dom'; import { compose } from 'redux'; + import DataManagerContext from '../../contexts/DataManagerContext'; import useFormModalNavigation from '../../hooks/useFormModalNavigation'; +import pluginId from '../../pluginId'; import getTrad from '../../utils/getTrad'; import makeUnique from '../../utils/makeUnique'; -import pluginId from '../../pluginId'; import FormModal from '../FormModal'; -import createDataObject from './utils/createDataObject'; -import createModifiedDataSchema from './utils/createModifiedDataSchema'; -import retrieveSpecificInfoFromComponents from './utils/retrieveSpecificInfoFromComponents'; -import retrieveComponentsFromSchema from './utils/retrieveComponentsFromSchema'; -import retrieveNestedComponents from './utils/retrieveNestedComponents'; -import { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents'; -import { getComponentsToPost, formatMainDataType, sortContentType } from './utils/cleanData'; -import serverRestartWatcher from './utils/serverRestartWatcher'; -import validateSchema from './utils/validateSchema'; import { ADD_ATTRIBUTE, - ADD_CUSTOM_FIELD_ATTRIBUTE, ADD_CREATED_COMPONENT_TO_DYNAMIC_ZONE, + ADD_CUSTOM_FIELD_ATTRIBUTE, CHANGE_DYNAMIC_ZONE_COMPONENTS, - CREATE_SCHEMA, CREATE_COMPONENT_SCHEMA, + CREATE_SCHEMA, DELETE_NOT_SAVED_TYPE, EDIT_ATTRIBUTE, EDIT_CUSTOM_FIELD_ATTRIBUTE, GET_DATA_SUCCEEDED, RELOAD_PLUGIN, - REMOVE_FIELD_FROM_DISPLAYED_COMPONENT, REMOVE_COMPONENT_FROM_DYNAMIC_ZONE, REMOVE_FIELD, + REMOVE_FIELD_FROM_DISPLAYED_COMPONENT, SET_MODIFIED_DATA, UPDATE_SCHEMA, } from './constants'; import makeSelectDataManagerProvider from './selectors'; +import { formatMainDataType, getComponentsToPost, sortContentType } from './utils/cleanData'; +import createDataObject from './utils/createDataObject'; +import createModifiedDataSchema from './utils/createModifiedDataSchema'; import formatSchemas from './utils/formatSchemas'; +import retrieveComponentsFromSchema from './utils/retrieveComponentsFromSchema'; +import { retrieveComponentsThatHaveComponents } from './utils/retrieveComponentsThatHaveComponents'; +import retrieveNestedComponents from './utils/retrieveNestedComponents'; +import retrieveSpecificInfoFromComponents from './utils/retrieveSpecificInfoFromComponents'; +import serverRestartWatcher from './utils/serverRestartWatcher'; +import validateSchema from './utils/validateSchema'; const DataManagerProvider = ({ children, diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.js index a16c2fd627..5e5a5e88bc 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/reducer.js @@ -1,10 +1,12 @@ import produce, { current } from 'immer'; import get from 'lodash/get'; import set from 'lodash/set'; -import makeUnique from '../../utils/makeUnique'; + import getRelationType from '../../utils/getRelationType'; -import retrieveComponentsFromSchema from './utils/retrieveComponentsFromSchema'; +import makeUnique from '../../utils/makeUnique'; + import * as actions from './constants'; +import retrieveComponentsFromSchema from './utils/retrieveComponentsFromSchema'; const initialState = { components: {}, diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/selectors.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/selectors.js index fe2c51005a..dcc5f10b24 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/selectors.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/selectors.js @@ -1,5 +1,7 @@ import { createSelector } from 'reselect'; + import pluginId from '../../pluginId'; + import { initialState } from './reducer'; /** diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_attribute_action.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_attribute_action.test.js index d20aaba7c5..83a760bd1a 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_attribute_action.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_attribute_action.test.js @@ -1,5 +1,5 @@ -import reducer, { initialState } from '../reducer'; import { ADD_ATTRIBUTE } from '../constants'; +import reducer, { initialState } from '../reducer'; describe('CTB | components | DataManagerProvider | reducer | ADD_ATTRIBUTE', () => { describe('Adding a common field that is not a relation', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_custom_field_attribute_action.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_custom_field_attribute_action.test.js index 8df41618d0..7d30bd886f 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_custom_field_attribute_action.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_add_custom_field_attribute_action.test.js @@ -1,6 +1,7 @@ import cloneDeep from 'lodash/cloneDeep'; -import reducer, { initialState } from '../reducer'; + import { ADD_CUSTOM_FIELD_ATTRIBUTE } from '../constants'; +import reducer, { initialState } from '../reducer'; describe('CTB | components | DataManagerProvider | reducer | ADD_CUSTOM_FIELD_ATTRIBUTE', () => { it('adds a custom field to a contentType', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_basic_actions.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_basic_actions.test.js index e24269e5d1..1235a7f0ac 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_basic_actions.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_basic_actions.test.js @@ -1,7 +1,9 @@ import get from 'lodash/get'; -import reducer, { initialState } from '../reducer'; -import testData from './data'; + import * as actions from '../constants'; +import reducer, { initialState } from '../reducer'; + +import testData from './data'; describe('CTB | components | DataManagerProvider | reducer | basics actions ', () => { it('Should return the initial state', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_attribute_action.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_attribute_action.test.js index b0564f1013..cad1463bfe 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_attribute_action.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_attribute_action.test.js @@ -1,5 +1,5 @@ -import reducer, { initialState } from '../reducer'; import { EDIT_ATTRIBUTE } from '../constants'; +import reducer, { initialState } from '../reducer'; describe('CTB | components | DataManagerProvider | reducer | EDIT_ATTRIBUTE', () => { describe('Editing a common attribute (string, integer, json, media, ...)', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_custom_field_attribute_action.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_custom_field_attribute_action.test.js index f7a39ca2c3..5444669530 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_custom_field_attribute_action.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_edit_custom_field_attribute_action.test.js @@ -1,6 +1,7 @@ import cloneDeep from 'lodash/cloneDeep'; -import reducer, { initialState } from '../reducer'; + import { EDIT_CUSTOM_FIELD_ATTRIBUTE } from '../constants'; +import reducer, { initialState } from '../reducer'; describe('CTB | components | DataManagerProvider | reducer | EDIT_CUSTOM_FIELD_ATTRIBUTE', () => { it('edits a custom field attribute on a content type', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_remove_field_action.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_remove_field_action.test.js index afe9664412..80a48f34e3 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_remove_field_action.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/tests/reducer_remove_field_action.test.js @@ -1,6 +1,7 @@ -import reducer, { initialState } from '../reducer'; -import testData from './data'; import { REMOVE_FIELD } from '../constants'; +import reducer, { initialState } from '../reducer'; + +import testData from './data'; describe('CTB | components | DataManagerProvider | reducer | REMOVE_FIELD', () => { describe('Removing a field that is not a relation', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/cleanData.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/cleanData.js index 5e31863aa9..f5480d0d66 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/cleanData.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/cleanData.js @@ -1,8 +1,8 @@ +import camelCase from 'lodash/camelCase'; import get from 'lodash/get'; import isEqual from 'lodash/isEqual'; import omit from 'lodash/omit'; import sortBy from 'lodash/sortBy'; -import camelCase from 'lodash/camelCase'; import pluginId from '../../../pluginId'; import makeUnique from '../../../utils/makeUnique'; @@ -155,8 +155,8 @@ const sortContentType = (types) => export { formatComponent, + formatMainDataType, getComponentsToPost, getCreatedAndModifiedComponents, - formatMainDataType, sortContentType, }; diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsFromSchema.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsFromSchema.js index bb5ffab657..4cac93cfa0 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsFromSchema.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsFromSchema.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import makeUnique from '../../../utils/makeUnique'; const retrieveComponentsFromSchema = (attributes, allComponentsData) => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents.js index 2cf8f2b599..97f3be7861 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveComponentsThatHaveComponents.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import makeUnique from '../../../utils/makeUnique'; const retrieveComponentsThatHaveComponents = (allComponents) => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveSpecificInfoFromComponents.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveSpecificInfoFromComponents.js index e5185ea2eb..a0ba3935ca 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveSpecificInfoFromComponents.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/retrieveSpecificInfoFromComponents.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import makeUnique from '../../../utils/makeUnique'; const retrieveSpecificInfoFromComponents = (allComponents, keysToRetrieve) => { diff --git a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/tests/cleanData.test.js b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/tests/cleanData.test.js index dbb3ba63c5..e1d3d2f241 100644 --- a/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/tests/cleanData.test.js +++ b/packages/core/content-type-builder/admin/src/components/DataManagerProvider/utils/tests/cleanData.test.js @@ -5,8 +5,9 @@ import { getCreatedAndModifiedComponents, sortContentType, } from '../cleanData'; -import rawData from './rawData'; + import expectedData from './expectedFormattedData'; +import rawData from './rawData'; describe('CleanData utils', () => { describe('FormatComponent', () => { diff --git a/packages/core/content-type-builder/admin/src/components/DraftAndPublishToggle/index.js b/packages/core/content-type-builder/admin/src/components/DraftAndPublishToggle/index.js index 2badda3293..71a1550b8b 100644 --- a/packages/core/content-type-builder/admin/src/components/DraftAndPublishToggle/index.js +++ b/packages/core/content-type-builder/admin/src/components/DraftAndPublishToggle/index.js @@ -5,10 +5,12 @@ */ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Checkbox } from '@strapi/design-system'; import { ConfirmDialog } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; const DraftAndPublishToggle = ({ diff --git a/packages/core/content-type-builder/admin/src/components/DynamicZoneList/index.js b/packages/core/content-type-builder/admin/src/components/DynamicZoneList/index.js index 541569e6b7..74091e0ee9 100644 --- a/packages/core/content-type-builder/admin/src/components/DynamicZoneList/index.js +++ b/packages/core/content-type-builder/admin/src/components/DynamicZoneList/index.js @@ -6,12 +6,14 @@ /* eslint-disable import/no-cycle */ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; import { Plus } from '@strapi/icons'; -import { Box, Flex, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; + import useDataManager from '../../hooks/useDataManager'; import getTrad from '../../utils/getTrad'; import ComponentCard from '../ComponentCard'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/advancedForm.js b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/advancedForm.js index beb3a10fd0..e27b832949 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/advancedForm.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/advancedForm.js @@ -3,6 +3,7 @@ // import isEmpty from 'lodash/isEmpty'; import getTrad from '../../../utils/getTrad'; import { componentForm } from '../component'; + import options from './attributeOptions'; const advancedForm = { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/baseForm.js b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/baseForm.js index 7e32398928..f34ba0e34b 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/baseForm.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/baseForm.js @@ -2,6 +2,7 @@ // import { FormattedMessage } from 'react-intl'; import getTrad from '../../../utils/getTrad'; import { componentField, componentForm } from '../component'; + import { nameField } from './nameField'; const baseForm = { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/index.js index 96d8bae11f..171a832176 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/index.js @@ -1,4 +1,4 @@ // eslint-disable-next-line import/prefer-default-export -export { default as attributesForm } from './form'; export { default as commonBaseForm } from './commonBaseForm'; +export { default as attributesForm } from './form'; export { default as attributeTypes } from './types'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/types.js b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/types.js index f02cb07b76..9094359ed7 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/types.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/types.js @@ -1,16 +1,18 @@ +import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; import uniq from 'lodash/uniq'; import * as yup from 'yup'; -import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; -import getTrad from '../../../utils/getTrad'; + import getRelationType from '../../../utils/getRelationType'; +import getTrad from '../../../utils/getTrad'; import toRegressedEnumValue from '../../../utils/toRegressedEnumValue'; + import { alreadyUsedAttributeNames, createTextShape, isMinSuperiorThanMax, isNameAllowed, - validators, NAME_REGEX, + validators, } from './validation/common'; const types = { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/validation/common.js b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/validation/common.js index d71fc1b0a9..8b647db479 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/attributes/validation/common.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/attributes/validation/common.js @@ -1,6 +1,6 @@ -import * as yup from 'yup'; -import toNumber from 'lodash/toNumber'; import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; +import toNumber from 'lodash/toNumber'; +import * as yup from 'yup'; import getTrad from '../../../../utils/getTrad'; @@ -140,6 +140,6 @@ export { getUsedContentTypeAttributeNames, isMinSuperiorThanMax, isNameAllowed, - validators, NAME_REGEX, + validators, }; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/category/createCategorySchema.js b/packages/core/content-type-builder/admin/src/components/FormModal/category/createCategorySchema.js index 7c081f3369..f016e04571 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/category/createCategorySchema.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/category/createCategorySchema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; +import * as yup from 'yup'; import CATEGORY_NAME_REGEX from './regex'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/category/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/category/index.js index 59260d60f9..e10078131b 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/category/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/category/index.js @@ -1,3 +1,3 @@ -export { default as categoryForm } from './form'; export { default as createCategorySchema } from './createCategorySchema'; +export { default as categoryForm } from './form'; export { default as CATEGORY_NAME_REGEX } from './regex'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/component/createComponentSchema.js b/packages/core/content-type-builder/admin/src/components/FormModal/component/createComponentSchema.js index 3a6b6f14e9..38be82a4c1 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/component/createComponentSchema.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/component/createComponentSchema.js @@ -1,9 +1,9 @@ -import * as yup from 'yup'; import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; +import * as yup from 'yup'; import getTrad from '../../../utils/getTrad'; -import { createComponentUid } from '../utils/createUid'; import { CATEGORY_NAME_REGEX } from '../category'; +import { createComponentUid } from '../utils/createUid'; const createComponentSchema = (usedComponentNames, reservedNames, category) => { const shape = { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/component/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/component/index.js index af3142a565..8a0043ccdf 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/component/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/component/index.js @@ -1,4 +1,4 @@ // eslint-disable-next-line import/prefer-default-export -export { default as createComponentSchema } from './createComponentSchema'; export { default as componentField } from './componentField'; +export { default as createComponentSchema } from './createComponentSchema'; export { default as componentForm } from './form'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/contentType/createContentTypeSchema.js b/packages/core/content-type-builder/admin/src/components/FormModal/contentType/createContentTypeSchema.js index 96a445414c..fb76dc0ce4 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/contentType/createContentTypeSchema.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/contentType/createContentTypeSchema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; +import * as yup from 'yup'; import getTrad from '../../../utils/getTrad'; import { createUid } from '../utils/createUid'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/contentType/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/contentType/index.js index 89caa271e5..6635fd2b91 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/contentType/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/contentType/index.js @@ -1,2 +1,2 @@ -export { default as contentTypeForm } from './form'; export { default as createContentTypeSchema } from './createContentTypeSchema'; +export { default as contentTypeForm } from './form'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/forms/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/forms/index.js index dafeaea375..42daa91940 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/forms/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/forms/index.js @@ -1,12 +1,13 @@ +import getTrad from '../../../utils/getTrad'; import { attributesForm, attributeTypes, commonBaseForm } from '../attributes'; -import { categoryForm, createCategorySchema } from '../category'; -import { contentTypeForm, createContentTypeSchema } from '../contentType'; -import { createComponentSchema, componentForm } from '../component'; -import { dynamiczoneForm } from '../dynamicZone'; import { nameField } from '../attributes/nameField'; +import { categoryForm, createCategorySchema } from '../category'; +import { componentForm, createComponentSchema } from '../component'; +import { contentTypeForm, createContentTypeSchema } from '../contentType'; +import { dynamiczoneForm } from '../dynamicZone'; + import addItemsToFormSection from './utils/addItemsToFormSection'; import getUsedAttributeNames from './utils/getUsedAttributeNames'; -import getTrad from '../../../utils/getTrad'; const forms = { customField: { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/forms/tests/customField.test.js b/packages/core/content-type-builder/admin/src/components/FormModal/forms/tests/customField.test.js index 6c1d542716..b0b5e99a3b 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/forms/tests/customField.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/forms/tests/customField.test.js @@ -1,4 +1,5 @@ import * as yup from 'yup'; + import forms from '..'; import ctbFormsAPI from '../../../../utils/formAPI'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/index.js b/packages/core/content-type-builder/admin/src/components/FormModal/index.js index 11a86f78e5..306bfc7cdf 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/index.js @@ -1,53 +1,56 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react'; -import { - getYupInnerErrors, - useTracking, - useNotification, - useStrapiApp, - useCustomFields, -} from '@strapi/helper-plugin'; -import { useIntl } from 'react-intl'; -import { useHistory } from 'react-router-dom'; -import get from 'lodash/get'; -import has from 'lodash/has'; -import set from 'lodash/set'; -import toLower from 'lodash/toLower'; -import { useSelector, useDispatch, shallowEqual } from 'react-redux'; + import { Box, Button, Divider, - ModalLayout, + Flex, ModalBody, ModalFooter, - Tabs, + ModalLayout, Tab, TabGroup, - TabPanels, TabPanel, - Flex, + TabPanels, + Tabs, } from '@strapi/design-system'; +import { + getYupInnerErrors, + useCustomFields, + useNotification, + useStrapiApp, + useTracking, +} from '@strapi/helper-plugin'; +import get from 'lodash/get'; +import has from 'lodash/has'; import isEqual from 'lodash/isEqual'; -import pluginId from '../../pluginId'; +import set from 'lodash/set'; +import toLower from 'lodash/toLower'; +import { useIntl } from 'react-intl'; +import { shallowEqual, useDispatch, useSelector } from 'react-redux'; +import { useHistory } from 'react-router-dom'; + import useDataManager from '../../hooks/useDataManager'; import useFormModalNavigation from '../../hooks/useFormModalNavigation'; +import pluginId from '../../pluginId'; +import { getTrad, isAllowedContentTypesForRelations } from '../../utils'; +import findAttribute from '../../utils/findAttribute'; // New compos import AllowedTypesSelect from '../AllowedTypesSelect'; import AttributeOptions from '../AttributeOptions'; -import DraftAndPublishToggle from '../DraftAndPublishToggle'; -import ReviewWorkflowsToggle from '../ReviewWorkflowsToggle'; -import FormModalHeader from '../FormModalHeader'; -import FormModalEndActions from '../FormModalEndActions'; -import FormModalSubHeader from '../FormModalSubHeader'; - import BooleanDefaultValueSelect from '../BooleanDefaultValueSelect'; import BooleanRadioGroup from '../BooleanRadioGroup'; import CheckboxWithNumberField from '../CheckboxWithNumberField'; -import CustomRadioGroup from '../CustomRadioGroup'; import ContentTypeRadioGroup from '../ContentTypeRadioGroup'; +import CustomRadioGroup from '../CustomRadioGroup'; +import DraftAndPublishToggle from '../DraftAndPublishToggle'; +import FormModalEndActions from '../FormModalEndActions'; +import FormModalHeader from '../FormModalHeader'; +import FormModalSubHeader from '../FormModalSubHeader'; import IconPicker from '../IconPicker'; -import Relation from '../Relation'; import PluralName from '../PluralName'; +import Relation from '../Relation'; +import ReviewWorkflowsToggle from '../ReviewWorkflowsToggle'; import SelectCategory from '../SelectCategory'; import SelectComponent from '../SelectComponent'; import SelectComponents from '../SelectComponents'; @@ -56,25 +59,23 @@ import SelectNumber from '../SelectNumber'; import SingularName from '../SingularName'; import TabForm from '../TabForm'; import TextareaEnum from '../TextareaEnum'; -import findAttribute from '../../utils/findAttribute'; -import { getTrad, isAllowedContentTypesForRelations } from '../../utils'; -import { canEditContentType, getAttributesToDisplay, getFormInputNames } from './utils'; -import forms from './forms'; -import { createComponentUid, createUid } from './utils/createUid'; -import makeSelectFormModal from './selectors'; import { - SET_DATA_TO_EDIT, - SET_DYNAMIC_ZONE_DATA_SCHEMA, + ON_CHANGE, + RESET_PROPS, + RESET_PROPS_AND_SAVE_CURRENT_DATA, + RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO, + RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ, SET_ATTRIBUTE_DATA_SCHEMA, SET_CUSTOM_FIELD_DATA_SCHEMA, + SET_DATA_TO_EDIT, + SET_DYNAMIC_ZONE_DATA_SCHEMA, SET_ERRORS, - ON_CHANGE, - RESET_PROPS_AND_SET_THE_FORM_FOR_ADDING_A_COMPO_TO_A_DZ, - RESET_PROPS_AND_SET_FORM_FOR_ADDING_AN_EXISTING_COMPO, - RESET_PROPS_AND_SAVE_CURRENT_DATA, - RESET_PROPS, } from './constants'; +import forms from './forms'; +import makeSelectFormModal from './selectors'; +import { canEditContentType, getAttributesToDisplay, getFormInputNames } from './utils'; +import { createComponentUid, createUid } from './utils/createUid'; /* eslint-disable indent */ /* eslint-disable react/no-array-index-key */ diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/reducer.js b/packages/core/content-type-builder/admin/src/components/FormModal/reducer.js index c85f4e8898..4ae6578ab7 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/reducer.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/reducer.js @@ -1,14 +1,15 @@ import produce from 'immer'; -import pluralize from 'pluralize'; import set from 'lodash/set'; import snakeCase from 'lodash/snakeCase'; +import pluralize from 'pluralize'; import getRelationType from '../../utils/getRelationType'; import nameToSlug from '../../utils/nameToSlug'; -import { createComponentUid } from './utils/createUid'; -import { shouldPluralizeName, shouldPluralizeTargetAttribute } from './utils/relations'; + import * as actions from './constants'; +import { createComponentUid } from './utils/createUid'; import { customFieldDefaultOptionsReducer } from './utils/customFieldDefaultOptionsReducer'; +import { shouldPluralizeName, shouldPluralizeTargetAttribute } from './utils/relations'; const initialState = { formErrors: {}, diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/selectors.js b/packages/core/content-type-builder/admin/src/components/FormModal/selectors.js index 35eef699fa..6337e80f9e 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/selectors.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/selectors.js @@ -1,5 +1,7 @@ import { createSelector } from 'reselect'; + import pluginId from '../../pluginId'; + import { initialState } from './reducer'; /** diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.set-custom-field-data-schema.test.js b/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.set-custom-field-data-schema.test.js index aad09a3bd7..629503dd79 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.set-custom-field-data-schema.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.set-custom-field-data-schema.test.js @@ -1,5 +1,5 @@ -import reducer, { initialState } from '../reducer'; import * as actions from '../constants'; +import reducer, { initialState } from '../reducer'; const mockCustomField = { type: 'string', diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.test.js b/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.test.js index 69e894bbf4..e2a285ebce 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/tests/reducer.test.js @@ -1,5 +1,5 @@ -import reducer, { initialState } from '../reducer'; import * as actions from '../constants'; +import reducer, { initialState } from '../reducer'; describe('CTB | components | FormModal | reducer | actions', () => { describe(actions.ON_CHANGE, () => { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/utils/canEditContentType.js b/packages/core/content-type-builder/admin/src/components/FormModal/utils/canEditContentType.js index f6dd3d552e..153a9438b5 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/utils/canEditContentType.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/utils/canEditContentType.js @@ -1,4 +1,5 @@ import get from 'lodash/get'; + import getRelationType from '../../../utils/getRelationType'; const canEditContentType = (data, modifiedData) => { diff --git a/packages/core/content-type-builder/admin/src/components/FormModal/utils/tests/canEditContentType.test.js b/packages/core/content-type-builder/admin/src/components/FormModal/utils/tests/canEditContentType.test.js index 4ca0cbc7de..6d37745b0f 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModal/utils/tests/canEditContentType.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModal/utils/tests/canEditContentType.test.js @@ -1,4 +1,5 @@ import canEditContentType from '../canEditContentType'; + import rawData from './rawData'; describe('canEditContentType', () => { diff --git a/packages/core/content-type-builder/admin/src/components/FormModalEndActions/index.js b/packages/core/content-type-builder/admin/src/components/FormModalEndActions/index.js index 92c72d4a87..eb2c6603d5 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalEndActions/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalEndActions/index.js @@ -5,10 +5,12 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Button } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; const FormModalEndActions = ({ diff --git a/packages/core/content-type-builder/admin/src/components/FormModalHeader/index.js b/packages/core/content-type-builder/admin/src/components/FormModalHeader/index.js index b0444859da..ea3ec6f489 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalHeader/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalHeader/index.js @@ -5,11 +5,13 @@ */ import React from 'react'; + +import { Box, Flex, ModalHeader, Typography } from '@strapi/design-system'; +import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; +import upperFirst from 'lodash/upperFirst'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import upperFirst from 'lodash/upperFirst'; -import { ModalHeader, Box, Flex, Typography } from '@strapi/design-system'; -import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; + import useDataManager from '../../hooks/useDataManager'; import getTrad from '../../utils/getTrad'; import AttributeIcon from '../AttributeIcon'; diff --git a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/index.js b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/index.js index a02b018a44..f89e47d7ef 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/index.js @@ -1,7 +1,10 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + import FormModalNavigationContext from '../../contexts/FormModalNavigationContext'; + import { INITIAL_STATE_DATA } from './constants'; const FormModalNavigationProvider = ({ children }) => { diff --git a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js index b79ade450d..261b5687b3 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalNavigationProvider/tests/index.test.js @@ -1,7 +1,8 @@ -import { renderHook, act } from '@testing-library/react'; +import { act, renderHook } from '@testing-library/react'; + +import useFormModalNavigation from '../../../hooks/useFormModalNavigation'; import { INITIAL_STATE_DATA } from '../constants'; import FormModalNavigationProvider from '../index'; -import useFormModalNavigation from '../../../hooks/useFormModalNavigation'; const removeFunctionsFromObject = (state) => { const stringified = JSON.stringify(state); diff --git a/packages/core/content-type-builder/admin/src/components/FormModalSubHeader/index.js b/packages/core/content-type-builder/admin/src/components/FormModalSubHeader/index.js index 7753b4956d..4295f45fb6 100644 --- a/packages/core/content-type-builder/admin/src/components/FormModalSubHeader/index.js +++ b/packages/core/content-type-builder/admin/src/components/FormModalSubHeader/index.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; +import upperFirst from 'lodash/upperFirst'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import upperFirst from 'lodash/upperFirst'; -import { Flex, Typography } from '@strapi/design-system'; import { getTrad } from '../../utils'; diff --git a/packages/core/content-type-builder/admin/src/components/IconPicker/index.js b/packages/core/content-type-builder/admin/src/components/IconPicker/index.js index ee0dda8d52..adafada8c1 100644 --- a/packages/core/content-type-builder/admin/src/components/IconPicker/index.js +++ b/packages/core/content-type-builder/admin/src/components/IconPicker/index.js @@ -1,24 +1,26 @@ -import React, { useState, useRef, useEffect } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; + import { Box, + Field, + FieldInput, + FieldLabel, Flex, Icon, - Typography, - Searchbar, IconButton, inputFocusStyle, - VisuallyHidden, - Field, - FieldLabel, - FieldInput, + Searchbar, Tooltip, + Typography, + VisuallyHidden, } from '@strapi/design-system'; -import { Trash, Search } from '@strapi/icons'; +import { Search, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; -import PropTypes from 'prop-types'; import { getTrad } from '../../utils'; + import { COMPONENT_ICONS } from './constants'; const IconPickerWrapper = styled(Flex)` diff --git a/packages/core/content-type-builder/admin/src/components/IconPicker/tests/index.test.js b/packages/core/content-type-builder/admin/src/components/IconPicker/tests/index.test.js index 4d86884a23..71f91510f8 100644 --- a/packages/core/content-type-builder/admin/src/components/IconPicker/tests/index.test.js +++ b/packages/core/content-type-builder/admin/src/components/IconPicker/tests/index.test.js @@ -1,9 +1,11 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; -import { render, fireEvent } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { IntlProvider } from 'react-intl'; import { MemoryRouter } from 'react-router-dom'; + import IconPicker from '../index'; const defaultProps = { diff --git a/packages/core/content-type-builder/admin/src/components/List/index.js b/packages/core/content-type-builder/admin/src/components/List/index.js index 3156b64ea7..dbc16cae59 100644 --- a/packages/core/content-type-builder/admin/src/components/List/index.js +++ b/packages/core/content-type-builder/admin/src/components/List/index.js @@ -6,19 +6,22 @@ /* eslint-disable import/no-cycle */ import React from 'react'; -import PropTypes from 'prop-types'; + +import { Box, Button, Table, TFooter, Th, Thead, Tr, Typography } from '@strapi/design-system'; import { EmptyBodyTable, useTracking } from '@strapi/helper-plugin'; -import { Box, Button, Typography, Table, Thead, Tr, Th, TFooter } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import useFormModalNavigation from '../../hooks/useFormModalNavigation'; + import useDataManager from '../../hooks/useDataManager'; -import DynamicZoneList from '../DynamicZoneList'; -import ComponentList from '../ComponentList'; -import BoxWrapper from './BoxWrapper'; +import useFormModalNavigation from '../../hooks/useFormModalNavigation'; import getTrad from '../../utils/getTrad'; +import ComponentList from '../ComponentList'; +import DynamicZoneList from '../DynamicZoneList'; import NestedTFooter from '../NestedTFooter'; +import BoxWrapper from './BoxWrapper'; + /* eslint-disable jsx-a11y/click-events-have-key-events */ /* eslint-disable jsx-a11y/no-static-element-interactions */ diff --git a/packages/core/content-type-builder/admin/src/components/ListRow/BoxWrapper.js b/packages/core/content-type-builder/admin/src/components/ListRow/BoxWrapper.js index 356fec98c8..6f98eb0578 100644 --- a/packages/core/content-type-builder/admin/src/components/ListRow/BoxWrapper.js +++ b/packages/core/content-type-builder/admin/src/components/ListRow/BoxWrapper.js @@ -4,8 +4,8 @@ * */ -import styled from 'styled-components'; import { Box } from '@strapi/design-system'; +import styled from 'styled-components'; const BoxWrapper = styled(Box)` position: relative; diff --git a/packages/core/content-type-builder/admin/src/components/ListRow/DisplayedType.js b/packages/core/content-type-builder/admin/src/components/ListRow/DisplayedType.js index 4dcde9428c..675c801ee0 100644 --- a/packages/core/content-type-builder/admin/src/components/ListRow/DisplayedType.js +++ b/packages/core/content-type-builder/admin/src/components/ListRow/DisplayedType.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Typography } from '@strapi/design-system'; + import getTrad from '../../utils/getTrad'; const DisplayedType = ({ type, customField, repeatable }) => { diff --git a/packages/core/content-type-builder/admin/src/components/ListRow/index.js b/packages/core/content-type-builder/admin/src/components/ListRow/index.js index 00a63422d9..99050b64fa 100644 --- a/packages/core/content-type-builder/admin/src/components/ListRow/index.js +++ b/packages/core/content-type-builder/admin/src/components/ListRow/index.js @@ -1,16 +1,19 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; -import get from 'lodash/get'; -import { useIntl } from 'react-intl'; -import { IconButton, Flex, Typography, Box } from '@strapi/design-system'; + +import { Box, Flex, IconButton, Typography } from '@strapi/design-system'; +import { onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin'; import { Lock, Pencil, Trash } from '@strapi/icons'; -import { stopPropagation, onRowClick, pxToRem } from '@strapi/helper-plugin'; +import get from 'lodash/get'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import useDataManager from '../../hooks/useDataManager'; -import getTrad from '../../utils/getTrad'; import Curve from '../../icons/Curve'; -import UpperFist from '../UpperFirst'; -import BoxWrapper from './BoxWrapper'; +import getTrad from '../../utils/getTrad'; import AttributeIcon from '../AttributeIcon'; +import UpperFist from '../UpperFirst'; + +import BoxWrapper from './BoxWrapper'; import DisplayedType from './DisplayedType'; function ListRow({ diff --git a/packages/core/content-type-builder/admin/src/components/NestedTFooter/index.js b/packages/core/content-type-builder/admin/src/components/NestedTFooter/index.js index 02cb19fa0e..888551c55c 100644 --- a/packages/core/content-type-builder/admin/src/components/NestedTFooter/index.js +++ b/packages/core/content-type-builder/admin/src/components/NestedTFooter/index.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { Box, Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Flex, Box, Typography } from '@strapi/design-system'; import styled from 'styled-components'; const IconBox = styled(Box)` diff --git a/packages/core/content-type-builder/admin/src/components/PluginIcon/index.js b/packages/core/content-type-builder/admin/src/components/PluginIcon/index.js index 8c7f27a277..75e66b0541 100644 --- a/packages/core/content-type-builder/admin/src/components/PluginIcon/index.js +++ b/packages/core/content-type-builder/admin/src/components/PluginIcon/index.js @@ -5,6 +5,7 @@ */ import React from 'react'; + import { Layout } from '@strapi/icons'; const PluginIcon = () => ; diff --git a/packages/core/content-type-builder/admin/src/components/PluralName/index.js b/packages/core/content-type-builder/admin/src/components/PluralName/index.js index 220d861bd1..62b640d980 100644 --- a/packages/core/content-type-builder/admin/src/components/PluralName/index.js +++ b/packages/core/content-type-builder/admin/src/components/PluralName/index.js @@ -5,10 +5,12 @@ */ import React, { useEffect, useRef } from 'react'; + +import { TextInput } from '@strapi/design-system'; +import pluralize from 'pluralize'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import pluralize from 'pluralize'; -import { TextInput } from '@strapi/design-system'; + import nameToSlug from '../../utils/nameToSlug'; const PluralName = ({ description, error, intlLabel, modifiedData, name, onChange, value }) => { diff --git a/packages/core/content-type-builder/admin/src/components/Relation/RelationField/RelationTargetPicker/index.js b/packages/core/content-type-builder/admin/src/components/Relation/RelationField/RelationTargetPicker/index.js index 203211b30a..a670579a24 100644 --- a/packages/core/content-type-builder/admin/src/components/Relation/RelationField/RelationTargetPicker/index.js +++ b/packages/core/content-type-builder/admin/src/components/Relation/RelationField/RelationTargetPicker/index.js @@ -1,11 +1,13 @@ import React from 'react'; + +import { MenuItem, SimpleMenu } from '@strapi/design-system'; +import get from 'lodash/get'; import PropTypes from 'prop-types'; import { useDispatch } from 'react-redux'; -import get from 'lodash/get'; -import { MenuItem, SimpleMenu } from '@strapi/design-system'; + import useDataManager from '../../../../hooks/useDataManager'; -import { ON_CHANGE_RELATION_TARGET } from '../../../FormModal/constants'; import { isAllowedContentTypesForRelations } from '../../../../utils'; +import { ON_CHANGE_RELATION_TARGET } from '../../../FormModal/constants'; const RelationTargetPicker = ({ oneThatIsCreatingARelationWithAnother, target }) => { const { contentTypes, sortedContentTypesList } = useDataManager(); diff --git a/packages/core/content-type-builder/admin/src/components/Relation/RelationField/index.js b/packages/core/content-type-builder/admin/src/components/Relation/RelationField/index.js index 9ae3a17bd3..49ab1e8064 100644 --- a/packages/core/content-type-builder/admin/src/components/Relation/RelationField/index.js +++ b/packages/core/content-type-builder/admin/src/components/Relation/RelationField/index.js @@ -1,8 +1,11 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Box, Flex, Divider, Typography } from '@strapi/design-system'; + +import { Box, Divider, Flex, Typography } from '@strapi/design-system'; import { GenericInput } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + import getTrad from '../../../utils/getTrad'; + import RelationTargetPicker from './RelationTargetPicker'; const RelationFormBox = ({ diff --git a/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/components.js b/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/components.js index 3775ff9eb5..04f3d8c8f0 100644 --- a/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/components.js +++ b/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/components.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { Box, Flex } from '@strapi/design-system'; +import styled from 'styled-components'; const Wrapper = styled(Box)` position: relative; diff --git a/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/index.js b/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/index.js index 89d0a69171..0b746c0897 100644 --- a/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/index.js +++ b/packages/core/content-type-builder/admin/src/components/Relation/RelationNaturePicker/index.js @@ -1,22 +1,25 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { useDispatch } from 'react-redux'; + +import { Flex, KeyboardNavigable, Typography } from '@strapi/design-system'; +import { + ManyToMany, + ManyToOne, + ManyWays as ManyWay, + OneToMany, + OneToOne, + OneWay, +} from '@strapi/icons'; import get from 'lodash/get'; import truncate from 'lodash/truncate'; import pluralize from 'pluralize'; -import { - OneToOne, - OneWay, - ManyWays as ManyWay, - OneToMany, - ManyToOne, - ManyToMany, -} from '@strapi/icons'; -import { Flex, Typography, KeyboardNavigable } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useDispatch } from 'react-redux'; + import useDataManager from '../../../hooks/useDataManager'; -import { ON_CHANGE_RELATION_TYPE } from '../../FormModal/constants'; import getTrad from '../../../utils/getTrad'; +import { ON_CHANGE_RELATION_TYPE } from '../../FormModal/constants'; + import { IconWrapper, InfosWrapper, Wrapper } from './components'; const relations = { diff --git a/packages/core/content-type-builder/admin/src/components/Relation/index.js b/packages/core/content-type-builder/admin/src/components/Relation/index.js index df2ad300ab..bcc618f409 100644 --- a/packages/core/content-type-builder/admin/src/components/Relation/index.js +++ b/packages/core/content-type-builder/admin/src/components/Relation/index.js @@ -5,9 +5,12 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; + import { Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import getRelationType from '../../utils/getRelationType'; + import RelationField from './RelationField'; import RelationNaturePicker from './RelationNaturePicker'; diff --git a/packages/core/content-type-builder/admin/src/components/ReviewWorkflowsToggle/index.js b/packages/core/content-type-builder/admin/src/components/ReviewWorkflowsToggle/index.js index e794087187..9e57835be5 100644 --- a/packages/core/content-type-builder/admin/src/components/ReviewWorkflowsToggle/index.js +++ b/packages/core/content-type-builder/admin/src/components/ReviewWorkflowsToggle/index.js @@ -1,8 +1,9 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Checkbox } from '@strapi/design-system'; import { ConfirmDialog, useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { getTrad } from '../../utils'; diff --git a/packages/core/content-type-builder/admin/src/components/SelectCategory/index.js b/packages/core/content-type-builder/admin/src/components/SelectCategory/index.js index a1093e9817..662b8a4a8b 100644 --- a/packages/core/content-type-builder/admin/src/components/SelectCategory/index.js +++ b/packages/core/content-type-builder/admin/src/components/SelectCategory/index.js @@ -5,9 +5,11 @@ */ import React, { useState } from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { ComboboxOption, CreatableCombobox } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import useDataManager from '../../hooks/useDataManager'; const SelectCategory = ({ error, intlLabel, name, onChange, value }) => { diff --git a/packages/core/content-type-builder/admin/src/components/SelectComponent/index.js b/packages/core/content-type-builder/admin/src/components/SelectComponent/index.js index f7824f66ad..b90f090a90 100644 --- a/packages/core/content-type-builder/admin/src/components/SelectComponent/index.js +++ b/packages/core/content-type-builder/admin/src/components/SelectComponent/index.js @@ -5,9 +5,11 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Select, Option } from '@strapi/design-system'; +import { useIntl } from 'react-intl'; + import useDataManager from '../../hooks/useDataManager'; const SelectComponent = ({ diff --git a/packages/core/content-type-builder/admin/src/components/SelectComponents/index.js b/packages/core/content-type-builder/admin/src/components/SelectComponents/index.js index 629a82e976..f6d70cd94d 100644 --- a/packages/core/content-type-builder/admin/src/components/SelectComponents/index.js +++ b/packages/core/content-type-builder/admin/src/components/SelectComponents/index.js @@ -5,12 +5,14 @@ */ import React from 'react'; -import PropTypes from 'prop-types'; + import { MultiSelectNested } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + import useDataManager from '../../hooks/useDataManager'; -import findAttribute from '../../utils/findAttribute'; import { getTrad } from '../../utils'; +import findAttribute from '../../utils/findAttribute'; const SelectComponents = ({ dynamicZoneTarget, intlLabel, name, onChange, value }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/SelectDateType/index.js b/packages/core/content-type-builder/admin/src/components/SelectDateType/index.js index 41fbc2c347..7df1cfcd63 100644 --- a/packages/core/content-type-builder/admin/src/components/SelectDateType/index.js +++ b/packages/core/content-type-builder/admin/src/components/SelectDateType/index.js @@ -5,9 +5,10 @@ */ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option } from '@strapi/design-system'; const SelectDateType = ({ intlLabel, error, modifiedData, name, onChange, options, value }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/SelectNumber/index.js b/packages/core/content-type-builder/admin/src/components/SelectNumber/index.js index 62a71e0e72..79c4824735 100644 --- a/packages/core/content-type-builder/admin/src/components/SelectNumber/index.js +++ b/packages/core/content-type-builder/admin/src/components/SelectNumber/index.js @@ -5,9 +5,10 @@ */ import React from 'react'; + +import { Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Select, Option } from '@strapi/design-system'; const SelectNumber = ({ intlLabel, error, modifiedData, name, onChange, options, value }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/content-type-builder/admin/src/components/SingularName/index.js b/packages/core/content-type-builder/admin/src/components/SingularName/index.js index ef11a55339..31b6d7f393 100644 --- a/packages/core/content-type-builder/admin/src/components/SingularName/index.js +++ b/packages/core/content-type-builder/admin/src/components/SingularName/index.js @@ -5,9 +5,11 @@ */ import React, { useEffect, useRef } from 'react'; + +import { TextInput } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { TextInput } from '@strapi/design-system'; + import nameToSlug from '../../utils/nameToSlug'; const SingularName = ({ description, error, intlLabel, modifiedData, name, onChange, value }) => { diff --git a/packages/core/content-type-builder/admin/src/components/TabForm/index.js b/packages/core/content-type-builder/admin/src/components/TabForm/index.js index ec1dac92c2..cf17f02e59 100644 --- a/packages/core/content-type-builder/admin/src/components/TabForm/index.js +++ b/packages/core/content-type-builder/admin/src/components/TabForm/index.js @@ -5,11 +5,12 @@ */ import React from 'react'; + +import { Box, Grid, GridItem, Typography } from '@strapi/design-system'; +import { GenericInput } from '@strapi/helper-plugin'; +import get from 'lodash/get'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import get from 'lodash/get'; -import { GenericInput } from '@strapi/helper-plugin'; -import { Box, Grid, GridItem, Typography } from '@strapi/design-system'; /* eslint-disable react/no-array-index-key */ const TabForm = ({ form, formErrors, genericInputProps, modifiedData, onChange }) => { diff --git a/packages/core/content-type-builder/admin/src/components/TextareaEnum/index.js b/packages/core/content-type-builder/admin/src/components/TextareaEnum/index.js index fb607f67d8..d7f584d284 100644 --- a/packages/core/content-type-builder/admin/src/components/TextareaEnum/index.js +++ b/packages/core/content-type-builder/admin/src/components/TextareaEnum/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Textarea } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Textarea } from '@strapi/design-system'; const TextareaEnum = ({ description, diff --git a/packages/core/content-type-builder/admin/src/components/UpperFirst/index.js b/packages/core/content-type-builder/admin/src/components/UpperFirst/index.js index 606d51b3a6..32182a7f32 100644 --- a/packages/core/content-type-builder/admin/src/components/UpperFirst/index.js +++ b/packages/core/content-type-builder/admin/src/components/UpperFirst/index.js @@ -1,5 +1,5 @@ -import PropTypes from 'prop-types'; import upperFirst from 'lodash/upperFirst'; +import PropTypes from 'prop-types'; const UpperFirst = ({ content }) => upperFirst(content); diff --git a/packages/core/content-type-builder/admin/src/permissions.js b/packages/core/content-type-builder/admin/src/constants.js similarity index 84% rename from packages/core/content-type-builder/admin/src/permissions.js rename to packages/core/content-type-builder/admin/src/constants.js index 5d5e1cc557..85e1759a16 100644 --- a/packages/core/content-type-builder/admin/src/permissions.js +++ b/packages/core/content-type-builder/admin/src/constants.js @@ -1,9 +1,7 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the // plugin directly in the browser main: [{ action: 'plugin::content-type-builder.read', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/core/content-type-builder/admin/src/hooks/useDataManager.js b/packages/core/content-type-builder/admin/src/hooks/useDataManager.js index baf8bef63e..a9b61e8636 100644 --- a/packages/core/content-type-builder/admin/src/hooks/useDataManager.js +++ b/packages/core/content-type-builder/admin/src/hooks/useDataManager.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import DataManagerContext from '../contexts/DataManagerContext'; const useDataManager = () => useContext(DataManagerContext); diff --git a/packages/core/content-type-builder/admin/src/hooks/useFormModalNavigation.js b/packages/core/content-type-builder/admin/src/hooks/useFormModalNavigation.js index 765e8f94b3..b309922b4e 100644 --- a/packages/core/content-type-builder/admin/src/hooks/useFormModalNavigation.js +++ b/packages/core/content-type-builder/admin/src/hooks/useFormModalNavigation.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import FormModalNavigationContext from '../contexts/FormModalNavigationContext'; const useFormModalNavigation = () => useContext(FormModalNavigationContext); diff --git a/packages/core/content-type-builder/admin/src/icons/Curve.js b/packages/core/content-type-builder/admin/src/icons/Curve.js index a3a2761744..719e9fe04d 100644 --- a/packages/core/content-type-builder/admin/src/icons/Curve.js +++ b/packages/core/content-type-builder/admin/src/icons/Curve.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; const StyledBox = styled(Box)` position: absolute; diff --git a/packages/core/content-type-builder/admin/src/index.js b/packages/core/content-type-builder/admin/src/index.js index eb1e0374a1..d48bc5f56d 100644 --- a/packages/core/content-type-builder/admin/src/index.js +++ b/packages/core/content-type-builder/admin/src/index.js @@ -1,7 +1,9 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; + import pluginPkg from '../../package.json'; -import pluginPermissions from './permissions'; + import PluginIcon from './components/PluginIcon'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import reducers from './reducers'; import formsAPI from './utils/formAPI'; @@ -19,7 +21,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Content Types Builder', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import( /* webpackChunkName: "content-type-builder" */ './pages/App' diff --git a/packages/core/content-type-builder/admin/src/pages/App/Wrapper.js b/packages/core/content-type-builder/admin/src/pages/App/Wrapper.js index 56930d7b48..df8d841c3f 100644 --- a/packages/core/content-type-builder/admin/src/pages/App/Wrapper.js +++ b/packages/core/content-type-builder/admin/src/pages/App/Wrapper.js @@ -1,6 +1,5 @@ -import styled from 'styled-components'; - import { sizes } from '@strapi/helper-plugin'; +import styled from 'styled-components'; const Wrapper = styled.div` min-height: calc(100vh - ${sizes.header.height}); diff --git a/packages/core/content-type-builder/admin/src/pages/App/index.js b/packages/core/content-type-builder/admin/src/pages/App/index.js index 425848da04..86cc549fb1 100644 --- a/packages/core/content-type-builder/admin/src/pages/App/index.js +++ b/packages/core/content-type-builder/admin/src/pages/App/index.js @@ -4,18 +4,20 @@ * */ -import React, { Suspense, lazy, useEffect, useRef } from 'react'; -import { Switch, Route } from 'react-router-dom'; +import React, { lazy, Suspense, useEffect, useRef } from 'react'; + +import { Layout } from '@strapi/design-system'; +import { CheckPagePermissions, LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin'; import { Helmet } from 'react-helmet'; import { useIntl } from 'react-intl'; -import { LoadingIndicatorPage, CheckPagePermissions, useGuidedTour } from '@strapi/helper-plugin'; -import { Layout } from '@strapi/design-system'; -import pluginPermissions from '../../permissions'; -import pluginId from '../../pluginId'; +import { Route, Switch } from 'react-router-dom'; + +import ContentTypeBuilderNav from '../../components/ContentTypeBuilderNav'; import DataManagerProvider from '../../components/DataManagerProvider'; import FormModalNavigationProvider from '../../components/FormModalNavigationProvider'; +import { PERMISSIONS } from '../../constants'; +import pluginId from '../../pluginId'; import RecursivePath from '../RecursivePath'; -import ContentTypeBuilderNav from '../../components/ContentTypeBuilderNav'; const ListView = lazy(() => import(/* webpackChunkName: "content-type-builder-list-view" */ '../ListView') @@ -37,7 +39,7 @@ const App = () => { }, []); return ( - + diff --git a/packages/core/content-type-builder/admin/src/pages/ListView/LinkToCMSettingsView/index.js b/packages/core/content-type-builder/admin/src/pages/ListView/LinkToCMSettingsView/index.js index 1e4354c0f4..0106fe956d 100644 --- a/packages/core/content-type-builder/admin/src/pages/ListView/LinkToCMSettingsView/index.js +++ b/packages/core/content-type-builder/admin/src/pages/ListView/LinkToCMSettingsView/index.js @@ -1,10 +1,11 @@ import React, { memo } from 'react'; -import PropTypes from 'prop-types'; -import { CheckPermissions } from '@strapi/helper-plugin'; + import { Button } from '@strapi/design-system'; +import { CheckPermissions } from '@strapi/helper-plugin'; import { Layer } from '@strapi/icons'; -import { useHistory } from 'react-router-dom'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { useHistory } from 'react-router-dom'; const cmPermissions = { collectionTypesConfigurations: [ diff --git a/packages/core/content-type-builder/admin/src/pages/ListView/index.js b/packages/core/content-type-builder/admin/src/pages/ListView/index.js index 84337458b6..750fe7879e 100644 --- a/packages/core/content-type-builder/admin/src/pages/ListView/index.js +++ b/packages/core/content-type-builder/admin/src/pages/ListView/index.js @@ -1,19 +1,22 @@ import React from 'react'; -import { useTracking, Link } from '@strapi/helper-plugin'; -import { Plus, ArrowLeft, Check, Pencil } from '@strapi/icons'; -import { Button, Flex, Box, ContentLayout, HeaderLayout } from '@strapi/design-system'; + +import { Box, Button, ContentLayout, Flex, HeaderLayout } from '@strapi/design-system'; +import { Link, useTracking } from '@strapi/helper-plugin'; +import { ArrowLeft, Check, Pencil, Plus } from '@strapi/icons'; import get from 'lodash/get'; import has from 'lodash/has'; import isEqual from 'lodash/isEqual'; import upperFirst from 'lodash/upperFirst'; import { useIntl } from 'react-intl'; import { Prompt, useRouteMatch } from 'react-router-dom'; + import List from '../../components/List'; import ListRow from '../../components/ListRow'; import useDataManager from '../../hooks/useDataManager'; import useFormModalNavigation from '../../hooks/useFormModalNavigation'; import getAttributeDisplayedType from '../../utils/getAttributeDisplayedType'; import getTrad from '../../utils/getTrad'; + import LinkToCMSettingsView from './LinkToCMSettingsView'; /* eslint-disable indent */ diff --git a/packages/core/content-type-builder/admin/src/pages/ListView/tests/__snapshots__/index.test.js.snap b/packages/core/content-type-builder/admin/src/pages/ListView/tests/__snapshots__/index.test.js.snap index 36b1ebe4d3..3dcfad604a 100644 --- a/packages/core/content-type-builder/admin/src/pages/ListView/tests/__snapshots__/index.test.js.snap +++ b/packages/core/content-type-builder/admin/src/pages/ListView/tests/__snapshots__/index.test.js.snap @@ -734,64 +734,6 @@ exports[` renders and matches the snapshot 1`] = ` border: 2px solid #4945ff; } -.c64 { - position: absolute; - display: none; - top: 5px; - right: 0.5rem; -} - -.c64 svg { - width: 0.625rem; - height: 0.625rem; -} - -.c64 svg path { - fill: #4945ff; -} - -.c57 { - width: 8.75rem; - height: 5rem; - position: relative; - border: 1px solid #dcdce4; - background: #f6f6f9; - border-radius: 4px; - max-width: 100%; -} - -.c57.active, -.c57:focus, -.c57:hover { - border: 1px solid #d9d8ff; - background: #f0f0ff; -} - -.c57.active .c63, -.c57:focus .c63, -.c57:hover .c63 { - display: block; -} - -.c57.active .c7, -.c57:focus .c7, -.c57:hover .c7 { - color: #4945ff; -} - -.c57.active > div:first-child, -.c57:focus > div:first-child, -.c57:hover > div:first-child { - background: #d9d8ff; - color: #4945ff; -} - -.c57.active > div:first-child svg path, -.c57:focus > div:first-child svg path, -.c57:hover > div:first-child svg path { - fill: #4945ff; -} - .c37.component-row, .c37.dynamiczone-row { position: relative; @@ -858,6 +800,64 @@ exports[` renders and matches the snapshot 1`] = ` padding: 0; } +.c64 { + position: absolute; + display: none; + top: 5px; + right: 0.5rem; +} + +.c64 svg { + width: 0.625rem; + height: 0.625rem; +} + +.c64 svg path { + fill: #4945ff; +} + +.c57 { + width: 8.75rem; + height: 5rem; + position: relative; + border: 1px solid #dcdce4; + background: #f6f6f9; + border-radius: 4px; + max-width: 100%; +} + +.c57.active, +.c57:focus, +.c57:hover { + border: 1px solid #d9d8ff; + background: #f0f0ff; +} + +.c57.active .c63, +.c57:focus .c63, +.c57:hover .c63 { + display: block; +} + +.c57.active .c7, +.c57:focus .c7, +.c57:hover .c7 { + color: #4945ff; +} + +.c57.active > div:first-child, +.c57:focus > div:first-child, +.c57:hover > div:first-child { + background: #d9d8ff; + color: #4945ff; +} + +.c57.active > div:first-child svg path, +.c57:focus > div:first-child svg path, +.c57:hover > div:first-child svg path { + fill: #4945ff; +} + .c53 { width: 2rem; height: 2rem; @@ -903,41 +903,6 @@ exports[` renders and matches the snapshot 1`] = ` align-items: center; } -.c22 table { - width: 100%; - white-space: nowrap; -} - -.c22 thead { - border-bottom: 1px solid #eaeaef; -} - -.c22 thead tr { - border-top: 0; -} - -.c22 tr { - border-top: 1px solid #eaeaef; -} - -.c22 tr td, -.c22 tr th { - padding: 16px; -} - -.c22 tr td:first-of-type, -.c22 tr th:first-of-type { - padding: 0 4px; -} - -.c22 th, -.c22 td { - vertical-align: middle; - text-align: left; - color: #666687; - outline-offset: -4px; -} - .c44 { height: 1.5rem; width: 1.5rem; @@ -1001,6 +966,41 @@ exports[` renders and matches the snapshot 1`] = ` left: -0.25rem; } +.c22 table { + width: 100%; + white-space: nowrap; +} + +.c22 thead { + border-bottom: 1px solid #eaeaef; +} + +.c22 thead tr { + border-top: 0; +} + +.c22 tr { + border-top: 1px solid #eaeaef; +} + +.c22 tr td, +.c22 tr th { + padding: 16px; +} + +.c22 tr td:first-of-type, +.c22 tr th:first-of-type { + padding: 0 4px; +} + +.c22 th, +.c22 td { + vertical-align: middle; + text-align: left; + color: #666687; + outline-offset: -4px; +} + .c39 { position: absolute; left: -1.125rem; @@ -1042,15 +1042,15 @@ exports[` renders and matches the snapshot 1`] = ` fill: #d9d8ff; } -.c25 { - position: relative; -} - .c29 svg { height: 100%; width: 100%; } +.c25 { + position: relative; +} +
{ diff --git a/packages/core/content-type-builder/admin/src/pages/RecursivePath/index.js b/packages/core/content-type-builder/admin/src/pages/RecursivePath/index.js index b382a3e393..7261c41ffe 100644 --- a/packages/core/content-type-builder/admin/src/pages/RecursivePath/index.js +++ b/packages/core/content-type-builder/admin/src/pages/RecursivePath/index.js @@ -1,6 +1,7 @@ -import React, { Suspense, lazy } from 'react'; -import { Switch, Route, useRouteMatch, useParams } from 'react-router-dom'; +import React, { lazy, Suspense } from 'react'; + import { LoadingIndicatorPage } from '@strapi/helper-plugin'; +import { Route, Switch, useParams, useRouteMatch } from 'react-router-dom'; const ListView = lazy(() => import(/* webpackChunkName: "content-type-builder-recursive-path" */ '../ListView') diff --git a/packages/core/content-type-builder/admin/src/reducers.js b/packages/core/content-type-builder/admin/src/reducers.js index 27c34fb13e..33cb043850 100644 --- a/packages/core/content-type-builder/admin/src/reducers.js +++ b/packages/core/content-type-builder/admin/src/reducers.js @@ -1,5 +1,5 @@ -import formModalReducer from './components/FormModal/reducer'; import dataManagerProvider from './components/DataManagerProvider/reducer'; +import formModalReducer from './components/FormModal/reducer'; import pluginId from './pluginId'; const reducers = { diff --git a/packages/core/content-type-builder/admin/src/utils/tests/formAPI.test.js b/packages/core/content-type-builder/admin/src/utils/tests/formAPI.test.js index 1018c4e77c..5fc9acdd31 100644 --- a/packages/core/content-type-builder/admin/src/utils/tests/formAPI.test.js +++ b/packages/core/content-type-builder/admin/src/utils/tests/formAPI.test.js @@ -1,4 +1,5 @@ import * as yup from 'yup'; + import formsAPI from '../formAPI'; describe('formsAPI', () => { diff --git a/packages/core/content-type-builder/package.json b/packages/core/content-type-builder/package.json index 30145aa2ca..829e96d7ed 100644 --- a/packages/core/content-type-builder/package.json +++ b/packages/core/content-type-builder/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-content-type-builder", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi plugin to create content type", "repository": { "type": "git", @@ -31,10 +31,10 @@ "dependencies": { "@sindresorhus/slugify": "1.1.0", "@strapi/design-system": "1.8.0", - "@strapi/generators": "4.11.0", - "@strapi/helper-plugin": "4.11.0", + "@strapi/generators": "4.11.1", + "@strapi/helper-plugin": "4.11.1", "@strapi/icons": "1.8.0", - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "fs-extra": "10.0.0", "immer": "9.0.19", "lodash": "4.17.21", @@ -49,7 +49,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@strapi/admin": "4.11.0", + "@strapi/admin": "4.11.1", "@testing-library/react": "14.0.0", "@testing-library/react-hooks": "8.0.1", "history": "^4.9.0", diff --git a/packages/core/data-transfer/package.json b/packages/core/data-transfer/package.json index 15e2b5f6c3..757b5b72a6 100644 --- a/packages/core/data-transfer/package.json +++ b/packages/core/data-transfer/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/data-transfer", - "version": "4.11.0", + "version": "4.11.1", "description": "Data transfer capabilities for Strapi", "keywords": [ "strapi", @@ -40,8 +40,8 @@ "./dist" ], "dependencies": { - "@strapi/logger": "4.11.0", - "@strapi/strapi": "4.11.0", + "@strapi/logger": "4.11.1", + "@strapi/strapi": "4.11.1", "chalk": "4.1.2", "fs-extra": "10.0.0", "lodash": "4.17.21", diff --git a/packages/core/data-transfer/src/engine/__tests__/engine.test.ts b/packages/core/data-transfer/src/engine/__tests__/engine.test.ts index b7ea5e6ca9..0af68b86c7 100644 --- a/packages/core/data-transfer/src/engine/__tests__/engine.test.ts +++ b/packages/core/data-transfer/src/engine/__tests__/engine.test.ts @@ -145,28 +145,32 @@ const schemas = { }, }; +type Entity = IEntity< + 'api::foo.foo' | 'api::bar.bar' | 'admin::permission' | 'api::homepage.homepage' +>; + const getEntitiesMockSourceStream = ( - data: Iterable> = [ - { id: 1, type: 'foo', data: { foo: 'bar' } }, - { id: 2, type: 'bar', data: { bar: 'foo' } }, + data: Array = [ + { id: 1, type: 'api::foo.foo', data: { foo: 'bar' } }, + { id: 2, type: 'api::bar.bar', data: { bar: 'foo' } }, { id: 1, type: 'admin::permission', data: { foo: 'bar' } }, { id: 2, type: 'api::homepage.homepage', data: { bar: 'foo' } }, ] ) => getMockSourceStream(data); const getLinksMockSourceStream = ( - data: Iterable = [ + data: Array = [ { kind: 'relation.basic', relation: 'oneToOne', - left: { type: 'foo', ref: 1, field: 'foo' }, - right: { type: 'bar', ref: 2, field: 'bar' }, + left: { type: 'api::foo.foo', ref: 1, field: 'foo' }, + right: { type: 'api::bar.bar', ref: 2, field: 'bar' }, }, { kind: 'relation.basic', relation: 'oneToMany', - left: { type: 'foo', ref: 1, field: 'foos' }, - right: { type: 'bar', ref: 2, field: 'bar' }, + left: { type: 'api::foo.foo', ref: 1, field: 'foos' }, + right: { type: 'api::bar.bar', ref: 2, field: 'bar' }, }, ] ) => getMockSourceStream(data); @@ -196,7 +200,7 @@ const getConfigurationMockSourceStream = ( ) => getMockSourceStream(data); const getSchemasMockSourceStream = ( - data: Iterable = [ + data: Array = [ { info: { displayName: 'foo' }, modelType: 'contentType', @@ -245,10 +249,10 @@ const metadata = { const createSource = (streamData?: { assets?: IAsset[]; - entities?: IEntity[]; + entities?: Entity[]; links?: ILink[]; configuration?: IConfiguration[]; - schemas?: Schema[]; + schemas?: Schema.Schema[]; }): ISourceProvider => { return { type: 'source', diff --git a/packages/core/data-transfer/src/engine/index.ts b/packages/core/data-transfer/src/engine/index.ts index f5cb26a402..9c101c02d1 100644 --- a/packages/core/data-transfer/src/engine/index.ts +++ b/packages/core/data-transfer/src/engine/index.ts @@ -1,13 +1,12 @@ +import type Chain from 'stream-chain'; import { PassThrough, Transform, Readable, Writable } from 'stream'; import { extname } from 'path'; import { EOL } from 'os'; -import { isEmpty, uniq, last, isNumber, difference, omit, set } from 'lodash/fp'; -import { diff as semverDiff } from 'semver'; -import type { Schema } from '@strapi/strapi'; import { chain } from 'stream-chain'; -import type Chain from 'stream-chain'; -import * as utils from '../utils'; +import { isEmpty, uniq, last, isNumber, difference, set, omit } from 'lodash/fp'; +import { diff as semverDiff } from 'semver'; +import type { Schema, Utils } from '@strapi/strapi'; import type { IAsset, IDestinationProvider, @@ -24,15 +23,13 @@ import type { IProvider, TransferFilters, TransferFilterPreset, + StreamItem, SchemaDiffHandler, SchemaDiffHandlerContext, - SchemaMap, - StreamItem, } from '../../types'; import type { Diff } from '../utils/json'; import { compareSchemas, validateProvider } from './validation'; -import { filter, map } from '../utils/stream'; import { TransferEngineError, TransferEngineValidationError } from './errors'; import { @@ -41,7 +38,7 @@ import { ErrorDiagnosticSeverity, } from './diagnostic'; import { DataTransferError } from '../errors'; -import { runMiddleware } from '../utils/middleware'; +import * as utils from '../utils'; export const TRANSFER_STAGES: ReadonlyArray = Object.freeze([ 'entities', @@ -82,9 +79,8 @@ export const TransferGroupPresets: TransferGroupFilter = { export const DEFAULT_VERSION_STRATEGY = 'ignore'; export const DEFAULT_SCHEMA_STRATEGY = 'strict'; -/** - * Transfer Engine Class - */ +type SchemaMap = Utils.String.Dict; + class TransferEngine< S extends ISourceProvider = ISourceProvider, D extends IDestinationProvider = IDestinationProvider @@ -200,11 +196,11 @@ class TransferEngine< const chainTransforms: StreamItem[] = []; for (const transform of transforms) { if ('filter' in transform) { - chainTransforms.push(filter(transform.filter)); + chainTransforms.push(utils.stream.filter(transform.filter)); } if ('map' in transform) { - chainTransforms.push(map(transform.map)); + chainTransforms.push(utils.stream.map(transform.map)); } } if (chainTransforms.length) { @@ -399,7 +395,7 @@ class TransferEngine< const schemaDiffs = compareSchemas(sourceSchema, destinationSchema, strategy); if (schemaDiffs.length) { - diffs[key] = schemaDiffs as Diff[]; + diffs[key] = schemaDiffs as Diff[]; } }); @@ -631,8 +627,8 @@ class TransferEngine< } return { - sourceSchema: this.#schema.source, - destinationSchema: this.#schema.destination, + sourceSchemas: this.#schema.source, + destinationSchemas: this.#schema.destination, }; } @@ -647,11 +643,11 @@ class TransferEngine< ); } - const { sourceSchema, destinationSchema } = await this.#getSchemas(); + const { sourceSchemas, destinationSchemas } = await this.#getSchemas(); try { - if (sourceSchema && destinationSchema) { - this.#assertSchemasMatching(sourceSchema, destinationSchema); + if (sourceSchemas && destinationSchemas) { + this.#assertSchemasMatching(sourceSchemas, destinationSchemas); } } catch (error) { // if this is a schema matching error, allow handlers to resolve it @@ -670,7 +666,10 @@ class TransferEngine< throw error; } - await runMiddleware(context, this.#handlers.schemaDiff); + await utils.middleware.runMiddleware( + context, + this.#handlers.schemaDiff + ); // if there are any remaining diffs that weren't ignored const unresolvedDiffs = utils.json.diff(context.diffs, context.ignoredDiffs); @@ -768,7 +767,9 @@ class TransferEngine< const destination = await this.destinationProvider.createSchemasWriteStream?.(); const transform = this.#createStageTransformStream(stage); - const tracker = this.#progressTracker(stage, { key: (value: Schema) => value.modelType }); + const tracker = this.#progressTracker(stage, { + key: (value: Schema.Schema) => value.modelType, + }); await this.#transferStage({ stage, source, destination, transform, tracker }); } @@ -784,7 +785,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (entity: IEntity, _encoding, callback) => { - const { destinationSchema: schemas } = await this.#getSchemas(); + const { destinationSchemas: schemas } = await this.#getSchemas(); if (!schemas) { return callback(null, entity); @@ -801,7 +802,7 @@ class TransferEngine< } const { type, data } = entity; - const attributes = (schemas[type] as Record).attributes as object; + const attributes = schemas[type].attributes; const attributesToRemove = difference(Object.keys(data), Object.keys(attributes)); const updatedEntity = set('data', omit(attributesToRemove, data), entity); @@ -827,7 +828,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (link: ILink, _encoding, callback) => { - const { destinationSchema: schemas } = await this.#getSchemas(); + const { destinationSchemas: schemas } = await this.#getSchemas(); if (!schemas) { return callback(null, link); diff --git a/packages/core/data-transfer/src/engine/validation/schemas/index.ts b/packages/core/data-transfer/src/engine/validation/schemas/index.ts index aee394d239..99652860b2 100644 --- a/packages/core/data-transfer/src/engine/validation/schemas/index.ts +++ b/packages/core/data-transfer/src/engine/validation/schemas/index.ts @@ -21,11 +21,11 @@ const isAttributeIgnorable = (diff: Diff) => { // exclude admin tables that are not transferrable and are optionally available (such as audit logs which are only available in EE) const isOptionalAdminType = (diff: Diff) => { if ('value' in diff && isObject(diff.value)) { - const name = (diff?.value as Schema)?.info?.singularName; + const name = (diff?.value as Schema.Schema)?.info?.singularName; return (OPTIONAL_CONTENT_TYPES as ReadonlyArray).includes(name); } if ('values' in diff && isArray(diff.values) && isObject(diff.values[0])) { - const name = (diff?.values[0] as Schema)?.info?.singularName; + const name = (diff?.values[0] as Schema.Schema)?.info?.singularName; return (OPTIONAL_CONTENT_TYPES as ReadonlyArray).includes(name); } return false; diff --git a/packages/core/data-transfer/src/file/providers/source/index.ts b/packages/core/data-transfer/src/file/providers/source/index.ts index 80c993f1cc..f4ab425109 100644 --- a/packages/core/data-transfer/src/file/providers/source/index.ts +++ b/packages/core/data-transfer/src/file/providers/source/index.ts @@ -103,7 +103,7 @@ class LocalFileSourceProvider implements ISourceProvider { } async getSchemas() { - const schemas = await collect(this.createSchemasReadStream()); + const schemas = await collect(this.createSchemasReadStream()); if (isEmpty(schemas)) { throw new ProviderInitializationError('Could not load schemas from Strapi data file.'); diff --git a/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/entities.ts b/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/entities.ts index baccbb85ac..717136951f 100644 --- a/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/entities.ts +++ b/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/entities.ts @@ -1,4 +1,4 @@ -import type { SchemaUID } from '@strapi/strapi/lib/types/utils'; +import type { Common } from '@strapi/strapi'; import { get, last } from 'lodash/fp'; import { Writable } from 'stream'; @@ -10,7 +10,11 @@ import * as queries from '../../../../queries'; interface IEntitiesRestoreStreamOptions { strapi: Strapi.Strapi; - updateMappingTable(type: T, oldID: number, newID: number): void; + updateMappingTable( + type: TSchemaUID, + oldID: number, + newID: number + ): void; transaction?: Transaction; } @@ -31,7 +35,7 @@ const createEntitiesWriteStream = (options: IEntitiesRestoreStreamOptions) => { * Resolve the component UID of an entity's attribute based * on a given path (components & dynamic zones only) */ - const resolveType = (paths: string[]): string | undefined => { + const resolveType = (paths: string[]): Common.UID.Component | undefined => { let cType = contentType; let value: unknown = data; diff --git a/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/index.ts b/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/index.ts index 3d4808a17c..cc891350d0 100644 --- a/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/local-destination/strategies/restore/index.ts @@ -1,4 +1,4 @@ -import type { ContentTypeSchema } from '@strapi/strapi'; +import type { Schema } from '@strapi/strapi'; import { ProviderTransferError } from '../../../../../errors/providers'; import * as queries from '../../../../queries'; @@ -11,7 +11,7 @@ export interface IRestoreOptions { entities?: { include?: string[]; exclude?: string[]; - filters?: ((contentType: ContentTypeSchema) => boolean)[]; + filters?: ((contentType: Schema.ContentType) => boolean)[]; params?: { [uid: string]: unknown }; }; } @@ -38,7 +38,7 @@ const deleteEntitiesRecord = async ( ): Promise => { const { entities } = options; const query = queries.entity.createEntityQuery(strapi); - const contentTypes = Object.values(strapi.contentTypes); + const contentTypes = Object.values(strapi.contentTypes); const contentTypesToClear = contentTypes.filter((contentType) => { let keep = true; diff --git a/packages/core/data-transfer/src/strapi/providers/local-source/entities.ts b/packages/core/data-transfer/src/strapi/providers/local-source/entities.ts index 7aba49f26f..90a074c57f 100644 --- a/packages/core/data-transfer/src/strapi/providers/local-source/entities.ts +++ b/packages/core/data-transfer/src/strapi/providers/local-source/entities.ts @@ -1,4 +1,4 @@ -import type { ContentTypeSchema } from '@strapi/strapi'; +import type { Schema } from '@strapi/strapi'; import { Readable, PassThrough } from 'stream'; import * as shared from '../../queries'; @@ -8,7 +8,7 @@ import { IEntity } from '../../../../types'; * Generate and consume content-types streams in order to stream each entity individually */ export const createEntitiesStream = (strapi: Strapi.Strapi): Readable => { - const contentTypes: ContentTypeSchema[] = Object.values(strapi.contentTypes); + const contentTypes: Schema.ContentType[] = Object.values(strapi.contentTypes); async function* contentTypeStreamGenerator() { for (const contentType of contentTypes) { @@ -31,7 +31,7 @@ export const createEntitiesStream = (strapi: Strapi.Strapi): Readable => { return Readable.from( (async function* entitiesGenerator(): AsyncGenerator<{ entity: IEntity; - contentType: ContentTypeSchema; + contentType: Schema.ContentType; }> { for await (const { stream, contentType } of contentTypeStreamGenerator()) { try { diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts index 374bf09c5f..907eabe18b 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts @@ -2,11 +2,12 @@ import { WebSocket } from 'ws'; import { randomUUID } from 'crypto'; import { Writable } from 'stream'; import { once } from 'lodash/fp'; +import type { Schema, Utils } from '@strapi/strapi'; import { createDispatcher, connectToWebsocket, trimTrailingSlash } from '../utils'; import type { IDestinationProvider, IMetadata, ProviderType, IAsset } from '../../../../types'; -import type { client, server } from '../../../../types/remote/protocol'; +import type { Client, Server } from '../../../../types/remote/protocol'; import type { ILocalStrapiDestinationProviderOptions } from '../local-destination'; import { TRANSFER_PATH } from '../../remote/constants'; import { ProviderTransferError, ProviderValidationError } from '../../../errors/providers'; @@ -53,18 +54,18 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { params: { options: { strategy, restore }, transfer: 'push' }, }); - const res = (await query) as server.Payload; + const res = (await query) as Server.Payload; if (!res?.transferID) { throw new ProviderTransferError('Init failed, invalid response from the server'); } return res.transferID; } - #startStepOnce(stage: client.TransferPushStep) { + #startStepOnce(stage: Client.TransferPushStep) { return once(() => this.#startStep(stage)); } - async #startStep(step: T) { + async #startStep(step: T) { try { await this.dispatcher?.dispatchTransferStep({ action: 'start', step }); } catch (e) { @@ -82,7 +83,7 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { return null; } - async #endStep(step: T) { + async #endStep(step: T) { try { await this.dispatcher?.dispatchTransferStep({ action: 'end', step }); } catch (e) { @@ -100,9 +101,9 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { return null; } - async #streamStep( + async #streamStep( step: T, - data: client.GetTransferPushStreamData + data: Client.GetTransferPushStreamData ) { try { await this.dispatcher?.dispatchTransferStep({ action: 'stream', step, data }); @@ -121,13 +122,13 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { return null; } - #writeStream(step: Exclude): Writable { + #writeStream(step: Exclude): Writable { type Step = typeof step; const batchSize = 1024 * 1024; // 1MB; const startTransferOnce = this.#startStepOnce(step); - let batch = [] as client.GetTransferPushStreamData; + let batch = [] as Client.GetTransferPushStreamData; const batchLength = () => jsonLength(batch); @@ -259,12 +260,12 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { await this.dispatcher?.dispatchTransferAction('rollback'); } - getSchemas(): Promise { + getSchemas() { if (!this.dispatcher) { return Promise.resolve(null); } - return this.dispatcher.dispatchTransferAction('getSchemas'); + return this.dispatcher.dispatchTransferAction>('getSchemas'); } createEntitiesWriteStream(): Writable { @@ -280,7 +281,7 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { } createAssetsWriteStream(): Writable | Promise { - let batch: client.TransferAssetFlow[] = []; + let batch: Client.TransferAssetFlow[] = []; let hasStarted = false; const batchSize = 1024 * 1024; // 1MB; @@ -298,7 +299,7 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { return streamError; }; - const safePush = async (chunk: client.TransferAssetFlow) => { + const safePush = async (chunk: Client.TransferAssetFlow) => { batch.push(chunk); if (batchLength() >= batchSize) { diff --git a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts index 9c515dca0b..d51e6a9a41 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts @@ -1,3 +1,4 @@ +import type { Schema, Utils } from '@strapi/strapi'; import { PassThrough, Readable } from 'stream'; import { WebSocket } from 'ws'; @@ -10,7 +11,7 @@ import type { ProviderType, TransferStage, } from '../../../../types'; -import { client, server } from '../../../../types/remote/protocol'; +import { Client, Server } from '../../../../types/remote/protocol'; import { ProviderTransferError, ProviderValidationError } from '../../../errors/providers'; import { TRANSFER_PATH } from '../../remote/constants'; import { ILocalStrapiSourceProviderOptions } from '../local-source'; @@ -171,7 +172,7 @@ class RemoteStrapiSourceProvider implements ISourceProvider { command: 'init', }); - const res = (await query) as server.Payload; + const res = (await query) as Server.Payload; if (!res?.transferID) { throw new ProviderTransferError('Init failed, invalid response from the server'); @@ -234,14 +235,16 @@ class RemoteStrapiSourceProvider implements ISourceProvider { }); } - async getSchemas(): Promise { + async getSchemas() { const schemas = - (await this.dispatcher?.dispatchTransferAction('getSchemas')) ?? null; + (await this.dispatcher?.dispatchTransferAction>( + 'getSchemas' + )) ?? null; return schemas; } - async #startStep(step: T) { + async #startStep(step: T) { try { return await this.dispatcher?.dispatchTransferStep({ action: 'start', step }); } catch (e) { @@ -269,7 +272,7 @@ class RemoteStrapiSourceProvider implements ISourceProvider { }); } - async #endStep(step: T) { + async #endStep(step: T) { try { await this.dispatcher?.dispatchTransferStep({ action: 'end', step }); } catch (e) { diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index fbec438fed..4d80be861c 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -1,7 +1,7 @@ import { randomUUID } from 'crypto'; import { RawData, WebSocket } from 'ws'; -import type { client, server } from '../../../types/remote/protocol'; +import type { Client, Server } from '../../../types/remote/protocol'; import { ProviderError, ProviderTransferError, @@ -9,7 +9,7 @@ import { } from '../../errors/providers'; interface IDispatcherState { - transfer?: { kind: client.TransferKind; id: string }; + transfer?: { kind: Client.TransferKind; id: string }; } interface IDispatchOptions { @@ -27,7 +27,7 @@ export const createDispatcher = ( ) => { const state: IDispatcherState = {}; - type DispatchMessage = Dispatch; + type DispatchMessage = Dispatch; const dispatch = async ( message: DispatchMessage, @@ -68,7 +68,7 @@ export const createDispatcher = ( const interval = setInterval(sendPeriodically, retryMessageTimeout); const onResponse = (raw: RawData) => { - const response: server.Message = JSON.parse(raw.toString()); + const response: Server.Message = JSON.parse(raw.toString()); if (response.uuid === uuid) { clearInterval(interval); if (response.error) { @@ -84,33 +84,33 @@ export const createDispatcher = ( }); }; - const dispatchCommand = ( + const dispatchCommand = ( payload: { command: U; - } & ([client.GetCommandParams] extends [never] + } & ([Client.GetCommandParams] extends [never] ? unknown - : { params?: client.GetCommandParams }) + : { params?: Client.GetCommandParams }) ) => { - return dispatch({ type: 'command', ...payload } as client.CommandMessage); + return dispatch({ type: 'command', ...payload } as Client.CommandMessage); }; - const dispatchTransferAction = async (action: client.Action['action']) => { - const payload: Dispatch = { type: 'transfer', kind: 'action', action }; + const dispatchTransferAction = async (action: Client.Action['action']) => { + const payload: Dispatch = { type: 'transfer', kind: 'action', action }; return dispatch(payload, { attachTransfer: true }) ?? Promise.resolve(null); }; const dispatchTransferStep = async < T, - A extends client.TransferPushMessage['action'] = client.TransferPushMessage['action'], - S extends client.TransferPushStep = client.TransferPushStep + A extends Client.TransferPushMessage['action'] = Client.TransferPushMessage['action'], + S extends Client.TransferPushStep = Client.TransferPushStep >( payload: { step: S; action: A; - } & (A extends 'stream' ? { data: client.GetTransferPushStreamData } : unknown) + } & (A extends 'stream' ? { data: Client.GetTransferPushStreamData } : unknown) ) => { - const message: Dispatch = { + const message: Dispatch = { type: 'transfer', kind: 'step', ...payload, diff --git a/packages/core/data-transfer/src/strapi/queries/entity.ts b/packages/core/data-transfer/src/strapi/queries/entity.ts index 82003d0e08..36add753f1 100644 --- a/packages/core/data-transfer/src/strapi/queries/entity.ts +++ b/packages/core/data-transfer/src/strapi/queries/entity.ts @@ -1,15 +1,18 @@ -import type { ContentTypeSchema } from '@strapi/strapi'; +import type { Attribute, Schema } from '@strapi/strapi'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import * as componentsService from '@strapi/strapi/lib/services/entity-service/components'; import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp'; -const sanitizeComponentLikeAttributes = (model: ContentTypeSchema, data: T) => { +const sanitizeComponentLikeAttributes = ( + model: T, + data: Attribute.GetValues +) => { const { attributes } = model; const componentLikeAttributesKey = Object.entries(attributes) - .filter(([, attribute]) => ['component', 'dynamiczone'].includes(attribute.type)) + .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone') .map(([key]) => key); return omit(componentLikeAttributesKey, data); @@ -75,7 +78,7 @@ const createEntityQuery = (strapi: Strapi.Strapi) => { }; const getDeepPopulateComponentLikeQuery = ( - contentType: ContentTypeSchema, + contentType: Schema.ContentType, params = { select: '*' } ) => { const { attributes } = contentType; diff --git a/packages/core/data-transfer/src/strapi/queries/link.ts b/packages/core/data-transfer/src/strapi/queries/link.ts index 8562c45aae..3ba9bf47fd 100644 --- a/packages/core/data-transfer/src/strapi/queries/link.ts +++ b/packages/core/data-transfer/src/strapi/queries/link.ts @@ -1,9 +1,10 @@ +import type { Knex } from 'knex'; import { clone, isNil } from 'lodash/fp'; -import { ILink, KnexTransaction } from '../../../types'; +import { ILink } from '../../../types'; // TODO: Remove any types when we'll have types for DB metadata -export const createLinkQuery = (strapi: Strapi.Strapi, trx?: KnexTransaction) => { +export const createLinkQuery = (strapi: Strapi.Strapi, trx?: Knex.Transaction) => { const query = () => { const { connection } = strapi.db; diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts index e7d26a4671..ace6e41158 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts @@ -19,9 +19,9 @@ export interface PullHandler extends Handler { assertValidTransferAction(action: string): asserts action is PullTransferAction; - onTransferMessage(msg: Protocol.client.TransferMessage): Promise | unknown; - onTransferAction(msg: Protocol.client.Action): Promise | unknown; - onTransferStep(msg: Protocol.client.TransferPullMessage): Promise | unknown; + onTransferMessage(msg: Protocol.Client.TransferMessage): Promise | unknown; + onTransferAction(msg: Protocol.Client.Action): Promise | unknown; + onTransferStep(msg: Protocol.Client.TransferPullMessage): Promise | unknown; createReadableStreamForStep(step: TransferStage): Promise; @@ -121,7 +121,7 @@ export const createPullController = handlerControllerFactory - ): Promise> { + params: Protocol.Client.GetCommandParams<'end'> + ): Promise> { await this.verifyAuth(); if (this.transferID !== params.transferID) { diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/push.ts b/packages/core/data-transfer/src/strapi/remote/handlers/push.ts index fd328ae5f3..36ae4baf05 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/push.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/push.ts @@ -62,24 +62,24 @@ export interface PushHandler extends Handler { /** * Callback when receiving a regular transfer message */ - onTransferMessage(msg: Protocol.client.TransferMessage): Promise | unknown; + onTransferMessage(msg: Protocol.Client.TransferMessage): Promise | unknown; /** * Callback when receiving a transfer action message */ - onTransferAction(msg: Protocol.client.Action): Promise | unknown; + onTransferAction(msg: Protocol.Client.Action): Promise | unknown; /** * Callback when receiving a transfer step message */ - onTransferStep(msg: Protocol.client.TransferPushMessage): Promise | unknown; + onTransferStep(msg: Protocol.Client.TransferPushMessage): Promise | unknown; /** * Start streaming an asset */ streamAsset( this: PushHandler, - payload: Protocol.client.GetTransferPushStreamData<'assets'> + payload: Protocol.Client.GetTransferPushStreamData<'assets'> ): Promise; // Transfer Flow @@ -256,7 +256,7 @@ export const createPushController = handlerControllerFactory - ): Promise> { + params: Protocol.Client.GetCommandParams<'init'> + ): Promise> { if (this.transferID || this.provider) { throw new Error('Transfer already in progress'); } @@ -474,8 +474,8 @@ export const createPushController = handlerControllerFactory - ): Promise> { + params: Protocol.Client.GetCommandParams<'end'> + ): Promise> { await this.verifyAuth(); if (this.transferID !== params.transferID) { diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/utils.ts b/packages/core/data-transfer/src/strapi/remote/handlers/utils.ts index 6375026433..10bd6227d0 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/utils.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/utils.ts @@ -32,7 +32,7 @@ export const assertValidHeader = (ctx: Context) => { } }; -export const isDataTransferMessage = (message: unknown): message is Protocol.client.Message => { +export const isDataTransferMessage = (message: unknown): message is Protocol.Client.Message => { if (!message || typeof message !== 'object') { return false; } diff --git a/packages/core/data-transfer/src/utils/index.ts b/packages/core/data-transfer/src/utils/index.ts index 133de63aa9..c729abb69d 100644 --- a/packages/core/data-transfer/src/utils/index.ts +++ b/packages/core/data-transfer/src/utils/index.ts @@ -3,3 +3,4 @@ export * as stream from './stream'; export * as json from './json'; export * as schema from './schema'; export * as transaction from './transaction'; +export * as middleware from './middleware'; diff --git a/packages/core/data-transfer/src/utils/schema.ts b/packages/core/data-transfer/src/utils/schema.ts index 1ab4c1dfde..45143ddb78 100644 --- a/packages/core/data-transfer/src/utils/schema.ts +++ b/packages/core/data-transfer/src/utils/schema.ts @@ -1,4 +1,4 @@ -import type { Schema } from '@strapi/strapi'; +import type { Schema, Utils } from '@strapi/strapi'; import { mapValues, pick } from 'lodash/fp'; /** @@ -19,9 +19,9 @@ const VALID_SCHEMA_PROPERTIES = [ ]; /** - * Sanitize a schemas dictionnary by omiting unwanted properties + * Sanitize a schemas dictionary by omitting unwanted properties * The list of allowed properties can be found here: {@link VALID_SCHEMA_PROPERTIES} */ -export const mapSchemasValues = (schemas: Record) => { - return mapValues(pick(VALID_SCHEMA_PROPERTIES), schemas); +export const mapSchemasValues = (schemas: Utils.String.Dict) => { + return mapValues(pick(VALID_SCHEMA_PROPERTIES), schemas) as Utils.String.Dict; }; diff --git a/packages/core/data-transfer/types/common-entities.d.ts b/packages/core/data-transfer/types/common-entities.d.ts index 4c682b49e2..772e067eb0 100644 --- a/packages/core/data-transfer/types/common-entities.d.ts +++ b/packages/core/data-transfer/types/common-entities.d.ts @@ -1,5 +1,4 @@ -import type { GetAttributesValues, RelationsType } from '@strapi/strapi'; -import type { SchemaUID } from '@strapi/strapi/lib/types/utils'; +import type { Attribute, Common } from '@strapi/strapi'; import type { Readable } from 'stream'; export interface IMetadata { @@ -14,7 +13,7 @@ export interface IMetadata { * Common TransferEngine format to represent a Strapi entity * @template T The schema UID this entity represents */ -export interface IEntity { +export interface IEntity { /** * UID of the parent type (content-type, component, etc...) */ @@ -29,7 +28,7 @@ export interface IEntity { /** * The entity data (attributes value) */ - data: GetAttributesValues; + data: Attribute.GetValues; } /** @@ -50,7 +49,7 @@ interface IDefaultLink { /** * The relation type */ - relation: RelationsType; + relation: Attribute.RelationKind.Any; /** * Left side of the link diff --git a/packages/core/data-transfer/types/encryption.d.ts b/packages/core/data-transfer/types/encryption.d.ts index 70c840e715..d56f6bb178 100644 --- a/packages/core/data-transfer/types/encryption.d.ts +++ b/packages/core/data-transfer/types/encryption.d.ts @@ -1,4 +1,4 @@ -import type { Cipher, CipherKey, BinaryLike } from 'crypto'; +import type { Cipher } from 'crypto'; export type EncryptionStrategy = (key: string) => Cipher; diff --git a/packages/core/data-transfer/types/providers.d.ts b/packages/core/data-transfer/types/providers.d.ts index 97bc1f6977..9cad099d18 100644 --- a/packages/core/data-transfer/types/providers.d.ts +++ b/packages/core/data-transfer/types/providers.d.ts @@ -1,16 +1,16 @@ -import type { PipelineSource, PipelineDestination, Readable, Writable } from 'stream'; +import type { Schema, Utils } from '@strapi/strapi'; +import type { Readable, Writable } from 'stream'; import type { IDestinationProviderTransferResults, IProviderTransferResults, ISourceProviderTransferResults, - Stream, MaybePromise, } from './utils'; import type { IMetadata } from './common-entities'; -type ProviderType = 'source' | 'destination'; +export type ProviderType = 'source' | 'destination'; -interface IProvider { +export interface IProvider { type: ProviderType; name: string; results?: IProviderTransferResults; @@ -19,7 +19,7 @@ interface IProvider { close?(): MaybePromise; getMetadata(): MaybePromise; - getSchemas?(): MaybePromise; + getSchemas?(): MaybePromise | null>; beforeTransfer?(): MaybePromise; validateOptions?(): MaybePromise; diff --git a/packages/core/data-transfer/types/remote/protocol/client/transfer/index.d.ts b/packages/core/data-transfer/types/remote/protocol/client/transfer/index.d.ts index 037b3bc61f..8a58f8368b 100644 --- a/packages/core/data-transfer/types/remote/protocol/client/transfer/index.d.ts +++ b/packages/core/data-transfer/types/remote/protocol/client/transfer/index.d.ts @@ -5,6 +5,7 @@ import type { TransferPushMessage } from './push'; export * from './action'; export * from './pull'; export * from './push'; +export * from './utils'; export type TransferMessage = { type: 'transfer'; transferID: string } & ( | Action diff --git a/packages/core/data-transfer/types/remote/protocol/client/transfer/pull.d.ts b/packages/core/data-transfer/types/remote/protocol/client/transfer/pull.d.ts index 544d996b79..97c28acfe7 100644 --- a/packages/core/data-transfer/types/remote/protocol/client/transfer/pull.d.ts +++ b/packages/core/data-transfer/types/remote/protocol/client/transfer/pull.d.ts @@ -1,5 +1,5 @@ import type { IEntity, ILink, IConfiguration } from '../../../../common-entities'; -import { CreateTransferMessage } from './utils'; +import { CreateTransferMessage, TransferAssetFlow } from './utils'; export type TransferPullMessage = CreateTransferMessage< 'step', diff --git a/packages/core/data-transfer/types/remote/protocol/client/transfer/push.d.ts b/packages/core/data-transfer/types/remote/protocol/client/transfer/push.d.ts index 38867fad1b..0b9a0bd50b 100644 --- a/packages/core/data-transfer/types/remote/protocol/client/transfer/push.d.ts +++ b/packages/core/data-transfer/types/remote/protocol/client/transfer/push.d.ts @@ -1,5 +1,5 @@ -import type { CreateTransferMessage } from './utils'; -import type { IEntity, ILink, IConfiguration, IAsset } from '../../../../common-entities'; +import type { CreateTransferMessage, TransferAssetFlow } from './utils'; +import type { IEntity, ILink, IConfiguration } from '../../../../common-entities'; export type TransferPushMessage = CreateTransferMessage< 'step', @@ -23,9 +23,3 @@ export type TransferPushStep = TransferPushMessage['step']; type TransferStepCommands = { step: T } & TransferStepFlow; type TransferStepFlow = { action: 'start' } | { action: 'stream'; data: U } | { action: 'end' }; - -type TransferAssetFlow = { assetID: string } & ( - | { action: 'start'; data: Omit } - | { action: 'stream'; data: Buffer } - | { action: 'end' } -); diff --git a/packages/core/data-transfer/types/remote/protocol/client/transfer/utils.d.ts b/packages/core/data-transfer/types/remote/protocol/client/transfer/utils.d.ts index b9d838c95e..3ef2001240 100644 --- a/packages/core/data-transfer/types/remote/protocol/client/transfer/utils.d.ts +++ b/packages/core/data-transfer/types/remote/protocol/client/transfer/utils.d.ts @@ -1,5 +1,13 @@ +import type { IAsset } from '../../../../common-entities'; + export type CreateTransferMessage = { type: 'transfer'; kind: T; transferID: string; } & U; + +export type TransferAssetFlow = { assetID: string } & ( + | { action: 'start'; data: Omit } + | { action: 'stream'; data: Buffer } + | { action: 'end' } +); diff --git a/packages/core/data-transfer/types/remote/protocol/index.d.ts b/packages/core/data-transfer/types/remote/protocol/index.d.ts index 4cbe5b42a3..2fbdb56fd6 100644 --- a/packages/core/data-transfer/types/remote/protocol/index.d.ts +++ b/packages/core/data-transfer/types/remote/protocol/index.d.ts @@ -1,2 +1,2 @@ -export * as client from './client'; -export * as server from './server'; +export * as Client from './client'; +export * as Server from './server'; diff --git a/packages/core/data-transfer/types/transfer-engine.d.ts b/packages/core/data-transfer/types/transfer-engine.d.ts index 1c9c729739..32a8020f72 100644 --- a/packages/core/data-transfer/types/transfer-engine.d.ts +++ b/packages/core/data-transfer/types/transfer-engine.d.ts @@ -1,12 +1,11 @@ import type { PassThrough } from 'stream'; import type { ITransferResults, TransferTransforms, TransferProgress } from './utils'; import type { ISourceProvider, IDestinationProvider } from './providers'; -import type { DiagnosticReporter } from '../src/engine/diagnostic'; +import type { IDiagnosticReporter } from '../src/engine/diagnostic'; +import type { Diff } from '../src/utils/json'; export type TransferFilterPreset = 'content' | 'files' | 'config'; -type SchemaMap = Record; - // Error resolving handler middleware for the transfer engine export type NextMiddleware = (context: T) => void | Promise; export type Middleware = (context: T, next: NextMiddleware) => Promise | void; @@ -42,7 +41,7 @@ export interface ITransferEngine< * A diagnostic reporter instance used to gather information about * errors, warnings and information emitted by the engine */ - diagnostics: DiagnosticReporter; + diagnostics: IDiagnosticReporter; /** * Utilities used to retrieve transfer progress data */ diff --git a/packages/core/data-transfer/types/utils.d.ts b/packages/core/data-transfer/types/utils.d.ts index f72de86b88..b7b75d3e78 100644 --- a/packages/core/data-transfer/types/utils.d.ts +++ b/packages/core/data-transfer/types/utils.d.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/ban-types */ -import type { Readable, Writable, Duplex, Transform } from 'stream'; import type { Schema } from '@strapi/strapi'; -import type { KnexTransaction } from 'knex'; -import type { IDestinationProvider, ISourceProvider } from './providers'; +import type { Knex } from 'knex'; +import type { Duplex, Readable, Transform, Writable } from 'stream'; import type { IAsset, IEntity, ILink } from './common-entities'; +import type { IDestinationProvider, ISourceProvider } from './providers'; export type MaybePromise = T | Promise; // The data type passed in for each stage export type TransferStageTypeMap = { - schemas: Schema; + schemas: Schema.Schema; entities: IEntity; links: ILink; assets: IAsset; @@ -31,7 +31,7 @@ export type TransferMap = { }; export type Stream = Readable | Writable | Duplex | Transform; -export type TransformFunction = (chunk: any, encoding?: string) => any; +export type TransformFunction = (chunk: unknown, encoding?: string) => unknown; export type StreamItem = Stream | TransformFunction; export type TransferTransformsTypeMap = TransferStageTypeMap & { @@ -40,7 +40,9 @@ export type TransferTransformsTypeMap = TransferStageTypeMap & { export type TransferStage = keyof TransferStageTypeMap; -export type TransferTransformArray = TransferTransform[]; +export type TransferTransformArray = TransferTransform< + TransferTransformsTypeMap[T] +>[]; export type TransferTransformOption = keyof TransferTransformsTypeMap; @@ -51,7 +53,9 @@ export type TransferTransforms = { /* * Filters */ -export type TransferFilterArray = TransferFilter[]; +export type TransferFilterArray = TransferFilter< + TransferTransforms[T] +>[]; export type TransferFilters = { [key in TransferTransformOption]?: boolean | TransferFilterArray; @@ -86,8 +90,7 @@ export type IProviderTransferResults = {}; export type ISourceProviderTransferResults = {}; export type IDestinationProviderTransferResults = {}; -export type { KnexTransaction }; -export type TransactionCallback = (trx?: KnexTransaction) => Promise; +export type TransactionCallback = (trx?: Knex.Transaction) => Promise; export type Transaction = { attach(callback: TransactionCallback): Promise; end(): boolean; diff --git a/packages/core/database/package.json b/packages/core/database/package.json index 0bebe12058..07123dd385 100644 --- a/packages/core/database/package.json +++ b/packages/core/database/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/database", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi's database layer", "homepage": "https://strapi.io", "bugs": { @@ -33,7 +33,7 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "date-fns": "2.30.0", "debug": "4.3.4", "fs-extra": "10.0.0", diff --git a/packages/core/email/admin/src/permissions.js b/packages/core/email/admin/src/constants.js similarity index 84% rename from packages/core/email/admin/src/permissions.js rename to packages/core/email/admin/src/constants.js index 1ec296091b..a4b7e76629 100644 --- a/packages/core/email/admin/src/permissions.js +++ b/packages/core/email/admin/src/constants.js @@ -1,9 +1,7 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the // plugin directly in the browser settings: [{ action: 'plugin::email.settings.read', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/core/email/admin/src/index.js b/packages/core/email/admin/src/index.js index 656e713943..ca1537ae25 100644 --- a/packages/core/email/admin/src/index.js +++ b/packages/core/email/admin/src/index.js @@ -6,9 +6,11 @@ // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED import { prefixPluginTranslations } from '@strapi/helper-plugin'; + import pluginPkg from '../../package.json'; + +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; -import pluginPermissions from './permissions'; import getTrad from './utils/getTrad'; const name = pluginPkg.strapi.name; @@ -36,7 +38,7 @@ export default { return component; }, - permissions: pluginPermissions.settings, + permissions: PERMISSIONS.settings, }, ] ); diff --git a/packages/core/email/admin/src/pages/Settings/components/Configuration.js b/packages/core/email/admin/src/pages/Settings/components/Configuration.js index 4b80f73fbe..004b810070 100644 --- a/packages/core/email/admin/src/pages/Settings/components/Configuration.js +++ b/packages/core/email/admin/src/pages/Settings/components/Configuration.js @@ -1,10 +1,12 @@ /* eslint-disable no-useless-escape */ import React from 'react'; + +import { Flex, Grid, GridItem, Option, Select, TextInput, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { useIntl } from 'react-intl'; -import { Flex, Grid, GridItem, Typography, TextInput, Select, Option } from '@strapi/design-system'; +import styled from 'styled-components'; + import getTrad from '../../../utils/getTrad'; const DocumentationLink = styled.a` diff --git a/packages/core/email/admin/src/pages/Settings/components/EmailHeader.js b/packages/core/email/admin/src/pages/Settings/components/EmailHeader.js index ec736959f0..28debe9108 100644 --- a/packages/core/email/admin/src/pages/Settings/components/EmailHeader.js +++ b/packages/core/email/admin/src/pages/Settings/components/EmailHeader.js @@ -1,7 +1,9 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { SettingsPageTitle } from '@strapi/helper-plugin'; + import { HeaderLayout } from '@strapi/design-system'; +import { SettingsPageTitle } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; const EmailHeader = () => { diff --git a/packages/core/email/admin/src/pages/Settings/index.js b/packages/core/email/admin/src/pages/Settings/index.js index e8dfdeedac..cbcc205bc5 100644 --- a/packages/core/email/admin/src/pages/Settings/index.js +++ b/packages/core/email/admin/src/pages/Settings/index.js @@ -1,35 +1,38 @@ -import React, { useState, useEffect } from 'react'; -import { useIntl } from 'react-intl'; +import React, { useEffect, useState } from 'react'; + import { - getYupInnerErrors, - CheckPagePermissions, - useNotification, - LoadingIndicatorPage, - useOverlayBlocker, - useFocusWhenNavigate, -} from '@strapi/helper-plugin'; -import { - Main, - ContentLayout, Box, + Button, + ContentLayout, + Flex, Grid, GridItem, - Typography, + Main, TextInput, - Button, - Flex, + Typography, useNotifyAT, } from '@strapi/design-system'; +import { + CheckPagePermissions, + getYupInnerErrors, + LoadingIndicatorPage, + useFocusWhenNavigate, + useNotification, + useOverlayBlocker, +} from '@strapi/helper-plugin'; import { Envelop } from '@strapi/icons'; -import Configuration from './components/Configuration'; -import schema from '../../utils/schema'; -import pluginPermissions from '../../permissions'; -import { fetchEmailSettings, postEmailTest } from './utils/api'; -import EmailHeader from './components/EmailHeader'; +import { useIntl } from 'react-intl'; + +import { PERMISSIONS } from '../../constants'; import getTrad from '../../utils/getTrad'; +import schema from '../../utils/schema'; + +import Configuration from './components/Configuration'; +import EmailHeader from './components/EmailHeader'; +import { fetchEmailSettings, postEmailTest } from './utils/api'; const ProtectedSettingsPage = () => ( - + ); diff --git a/packages/core/email/admin/src/pages/Settings/tests/index.test.js b/packages/core/email/admin/src/pages/Settings/tests/index.test.js index 6b91864f91..ad0aa549bb 100644 --- a/packages/core/email/admin/src/pages/Settings/tests/index.test.js +++ b/packages/core/email/admin/src/pages/Settings/tests/index.test.js @@ -1,10 +1,13 @@ import React from 'react'; -import { render, waitFor, screen } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import server from './utils/server'; + import ProtectedSettingsPage from '../index'; +import server from './utils/server'; + jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), useNotification: jest.fn(), diff --git a/packages/core/email/admin/src/pages/Settings/tests/utils/server.js b/packages/core/email/admin/src/pages/Settings/tests/utils/server.js index d0b707eb0d..bf59abaea6 100644 --- a/packages/core/email/admin/src/pages/Settings/tests/utils/server.js +++ b/packages/core/email/admin/src/pages/Settings/tests/utils/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/email/settings', (req, res, ctx) => { diff --git a/packages/core/email/admin/src/utils/schema.js b/packages/core/email/admin/src/utils/schema.js index 13705a3f17..c2b870cd2f 100644 --- a/packages/core/email/admin/src/utils/schema.js +++ b/packages/core/email/admin/src/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ email: yup.string().email(translatedErrors.email).required(translatedErrors.required), diff --git a/packages/core/email/package.json b/packages/core/email/package.json index 584f8bd3aa..5ff1a60042 100644 --- a/packages/core/email/package.json +++ b/packages/core/email/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-email", - "version": "4.11.0", + "version": "4.11.1", "description": "Easily configure your Strapi application to send emails.", "repository": { "type": "git", @@ -29,15 +29,15 @@ "dependencies": { "@strapi/design-system": "1.8.0", "@strapi/icons": "1.8.0", - "@strapi/provider-email-sendmail": "4.11.0", - "@strapi/utils": "4.11.0", + "@strapi/provider-email-sendmail": "4.11.1", + "@strapi/utils": "4.11.1", "lodash": "4.17.21", "prop-types": "^15.8.1", "react-intl": "6.4.1", "yup": "^0.32.9" }, "devDependencies": { - "@strapi/helper-plugin": "4.11.0", + "@strapi/helper-plugin": "4.11.1", "@testing-library/react": "14.0.0", "msw": "1.2.1", "react": "^18.2.0", diff --git a/packages/core/helper-plugin/package.json b/packages/core/helper-plugin/package.json index 899141897e..20295dcfdc 100644 --- a/packages/core/helper-plugin/package.json +++ b/packages/core/helper-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/helper-plugin", - "version": "4.11.0", + "version": "4.11.1", "description": "Helper for Strapi plugins development", "repository": { "type": "git", diff --git a/packages/core/helper-plugin/src/components/AnErrorOccurred/index.js b/packages/core/helper-plugin/src/components/AnErrorOccurred/index.js index c268bb533d..ba70f79ec5 100644 --- a/packages/core/helper-plugin/src/components/AnErrorOccurred/index.js +++ b/packages/core/helper-plugin/src/components/AnErrorOccurred/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import { ExclamationMarkCircle } from '@strapi/icons'; + import { EmptyStateLayout } from '@strapi/design-system'; +import { ExclamationMarkCircle } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; diff --git a/packages/core/helper-plugin/src/components/CheckPagePermissions/index.js b/packages/core/helper-plugin/src/components/CheckPagePermissions/index.js index c2b21ab266..4b77290b51 100644 --- a/packages/core/helper-plugin/src/components/CheckPagePermissions/index.js +++ b/packages/core/helper-plugin/src/components/CheckPagePermissions/index.js @@ -1,6 +1,8 @@ import React, { useEffect, useRef, useState } from 'react'; -import { Redirect } from 'react-router-dom'; + import PropTypes from 'prop-types'; +import { Redirect } from 'react-router-dom'; + import { useNotification } from '../../features/Notifications'; import { useRBACProvider } from '../../features/RBAC'; import hasPermissions from '../../utils/hasPermissions'; diff --git a/packages/core/helper-plugin/src/components/CheckPermissions/index.js b/packages/core/helper-plugin/src/components/CheckPermissions/index.js index e62ed28183..83e25e4c36 100644 --- a/packages/core/helper-plugin/src/components/CheckPermissions/index.js +++ b/packages/core/helper-plugin/src/components/CheckPermissions/index.js @@ -1,9 +1,10 @@ import { useEffect, useRef, useState } from 'react'; -import PropTypes from 'prop-types'; -import { useNotification } from '../../features/Notifications'; -import hasPermissions from '../../utils/hasPermissions'; +import PropTypes from 'prop-types'; + +import { useNotification } from '../../features/Notifications'; import { useRBACProvider } from '../../features/RBAC'; +import hasPermissions from '../../utils/hasPermissions'; // NOTE: this component is very similar to the CheckPagePermissions // except that it does not handle redirections nor loading state diff --git a/packages/core/helper-plugin/src/components/ConfirmDialog/index.js b/packages/core/helper-plugin/src/components/ConfirmDialog/index.js index 9b7a9a665c..44ecd4022b 100644 --- a/packages/core/helper-plugin/src/components/ConfirmDialog/index.js +++ b/packages/core/helper-plugin/src/components/ConfirmDialog/index.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system'; +import { ExclamationMarkCircle, Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Dialog, DialogBody, DialogFooter, Flex, Typography, Button } from '@strapi/design-system'; -import { ExclamationMarkCircle, Trash } from '@strapi/icons'; const ConfirmDialog = ({ bodyText, diff --git a/packages/core/helper-plugin/src/components/ConfirmDialog/tests/index.test.js b/packages/core/helper-plugin/src/components/ConfirmDialog/tests/index.test.js index 3b1f66c7f6..0661feea86 100644 --- a/packages/core/helper-plugin/src/components/ConfirmDialog/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/ConfirmDialog/tests/index.test.js @@ -1,7 +1,9 @@ import React from 'react'; -import { render, waitFor, screen } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import ConfirmDialog from '../index'; const App = ( diff --git a/packages/core/helper-plugin/src/components/ContentBox/index.js b/packages/core/helper-plugin/src/components/ContentBox/index.js index fde8c77070..36ba8688b5 100644 --- a/packages/core/helper-plugin/src/components/ContentBox/index.js +++ b/packages/core/helper-plugin/src/components/ContentBox/index.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Flex, Typography } from '@strapi/design-system'; const IconWrapper = styled(Flex)` margin-right: ${({ theme }) => theme.spaces[6]}; diff --git a/packages/core/helper-plugin/src/components/ContentBox/tests/index.test.js b/packages/core/helper-plugin/src/components/ContentBox/tests/index.test.js index 084911453a..83f195dc48 100644 --- a/packages/core/helper-plugin/src/components/ContentBox/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/ContentBox/tests/index.test.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render, screen } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import ContentBox from '../index'; const App = ( diff --git a/packages/core/helper-plugin/src/components/DateTimePicker/index.js b/packages/core/helper-plugin/src/components/DateTimePicker/index.js index bc9c6476b1..ce5e3d3e63 100644 --- a/packages/core/helper-plugin/src/components/DateTimePicker/index.js +++ b/packages/core/helper-plugin/src/components/DateTimePicker/index.js @@ -1,4 +1,5 @@ import React, { useEffect } from 'react'; + import { DateTimePicker } from '@strapi/design-system'; // TODO: remove DateTimePicker component from the helper-plugin in V5 diff --git a/packages/core/helper-plugin/src/components/DateTimePicker/tests/index.test.js b/packages/core/helper-plugin/src/components/DateTimePicker/tests/index.test.js index be2bfd4ace..5974e2c386 100644 --- a/packages/core/helper-plugin/src/components/DateTimePicker/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/DateTimePicker/tests/index.test.js @@ -1,6 +1,8 @@ import * as React from 'react'; -import { render as renderRTL } from '@testing-library/react'; + import { DesignSystemProvider } from '@strapi/design-system'; +import { render as renderRTL } from '@testing-library/react'; + import DateTimePicker from '../index'; const render = (props) => diff --git a/packages/core/helper-plugin/src/components/DynamicTable/TableHead/index.js b/packages/core/helper-plugin/src/components/DynamicTable/TableHead/index.js index 4f0b75401d..51fddef185 100644 --- a/packages/core/helper-plugin/src/components/DynamicTable/TableHead/index.js +++ b/packages/core/helper-plugin/src/components/DynamicTable/TableHead/index.js @@ -1,18 +1,20 @@ import React from 'react'; + import { BaseCheckbox, IconButton, - Tooltip, - Typography, Th, Thead, + Tooltip, Tr, + Typography, VisuallyHidden, } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import SortIcon from '../../../icons/SortIcon'; + import useQueryParams from '../../../hooks/useQueryParams'; +import SortIcon from '../../../icons/SortIcon'; const TableHead = ({ areAllEntriesSelected, diff --git a/packages/core/helper-plugin/src/components/DynamicTable/index.js b/packages/core/helper-plugin/src/components/DynamicTable/index.js index eff3226ac1..786ce8380c 100644 --- a/packages/core/helper-plugin/src/components/DynamicTable/index.js +++ b/packages/core/helper-plugin/src/components/DynamicTable/index.js @@ -1,13 +1,15 @@ import React, { Children, cloneElement, useState } from 'react'; -import PropTypes from 'prop-types'; -import { Box, Flex, Button, Typography, Table as TableCompo } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; -import { Trash } from '@strapi/icons'; -import useQueryParams from '../../hooks/useQueryParams'; +import { Box, Button, Flex, Table as TableCompo, Typography } from '@strapi/design-system'; +import { Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { useTracking } from '../../features/Tracking'; +import useQueryParams from '../../hooks/useQueryParams'; import ConfirmDialog from '../ConfirmDialog'; import EmptyBodyTable from '../EmptyBodyTable'; + import TableHead from './TableHead'; const Table = ({ diff --git a/packages/core/helper-plugin/src/components/EmptyBodyTable/index.js b/packages/core/helper-plugin/src/components/EmptyBodyTable/index.js index d44a16f47b..0f50de3a1b 100644 --- a/packages/core/helper-plugin/src/components/EmptyBodyTable/index.js +++ b/packages/core/helper-plugin/src/components/EmptyBodyTable/index.js @@ -1,6 +1,8 @@ import React from 'react'; -import { Tbody, Tr, Td, Box, Flex, Loader } from '@strapi/design-system'; + +import { Box, Flex, Loader, Tbody, Td, Tr } from '@strapi/design-system'; import PropTypes from 'prop-types'; + import EmptyStateLayout from '../EmptyStateLayout'; const EmptyBodyTable = ({ colSpan, isLoading, ...rest }) => { diff --git a/packages/core/helper-plugin/src/components/EmptyStateLayout/index.js b/packages/core/helper-plugin/src/components/EmptyStateLayout/index.js index 7df619b94c..109b0af737 100644 --- a/packages/core/helper-plugin/src/components/EmptyStateLayout/index.js +++ b/packages/core/helper-plugin/src/components/EmptyStateLayout/index.js @@ -1,8 +1,9 @@ import React from 'react'; + import { EmptyStateLayout as Layout } from '@strapi/design-system'; import { EmptyDocuments, EmptyPermissions, EmptyPictures } from '@strapi/icons'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const icons = { document: EmptyDocuments, diff --git a/packages/core/helper-plugin/src/components/FilterListURLQuery/AttributeTag.js b/packages/core/helper-plugin/src/components/FilterListURLQuery/AttributeTag.js index 2dc6dca9cc..81799da920 100644 --- a/packages/core/helper-plugin/src/components/FilterListURLQuery/AttributeTag.js +++ b/packages/core/helper-plugin/src/components/FilterListURLQuery/AttributeTag.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Tag } from '@strapi/design-system'; import { Cross } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; const AttributeTag = ({ attribute, filter, onClick, operator, value }) => { diff --git a/packages/core/helper-plugin/src/components/FilterListURLQuery/index.js b/packages/core/helper-plugin/src/components/FilterListURLQuery/index.js index e556a1c927..6d37008b20 100644 --- a/packages/core/helper-plugin/src/components/FilterListURLQuery/index.js +++ b/packages/core/helper-plugin/src/components/FilterListURLQuery/index.js @@ -5,8 +5,11 @@ */ import React from 'react'; + import PropTypes from 'prop-types'; + import useQueryParams from '../../hooks/useQueryParams'; + import AttributeTag from './AttributeTag'; const FilterListURLQuery = ({ filtersSchema }) => { diff --git a/packages/core/helper-plugin/src/components/FilterListURLQuery/tests/index.test.js b/packages/core/helper-plugin/src/components/FilterListURLQuery/tests/index.test.js index e111987764..9b48567e2e 100644 --- a/packages/core/helper-plugin/src/components/FilterListURLQuery/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/FilterListURLQuery/tests/index.test.js @@ -5,12 +5,14 @@ */ import React from 'react'; -import { render, screen, act } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { Router } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, render, screen } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import qs from 'qs'; +import { IntlProvider } from 'react-intl'; +import { Router } from 'react-router-dom'; + import FilterListURLQuery from '../index'; // TO BE REMOVED: we have added this mock to prevent errors in the snapshots caused by the Unicode space character diff --git a/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/Inputs.js b/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/Inputs.js index 503765818c..7f22a2e6dd 100644 --- a/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/Inputs.js +++ b/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/Inputs.js @@ -1,17 +1,18 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import parseISO from 'date-fns/parseISO'; -import formatISO from 'date-fns/formatISO'; + import { DatePicker, DateTimePicker, Field, - NumberInput, - TimePicker, - Select, FieldInput, + NumberInput, Option, + Select, + TimePicker, } from '@strapi/design-system'; +import formatISO from 'date-fns/formatISO'; +import parseISO from 'date-fns/parseISO'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; const Inputs = ({ label, onChange, options, type, value }) => { diff --git a/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/index.js b/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/index.js index 0243e78392..1962764fb5 100644 --- a/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/index.js +++ b/packages/core/helper-plugin/src/components/FilterPopoverURLQuery/index.js @@ -5,13 +5,16 @@ */ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Button, Flex, Box, Popover, Select, Option } from '@strapi/design-system'; + +import { Box, Button, Flex, Option, Popover, Select } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import useQueryParams from '../../hooks/useQueryParams'; +import styled from 'styled-components'; + import { useTracking } from '../../features/Tracking'; +import useQueryParams from '../../hooks/useQueryParams'; + import DefaultInputs from './Inputs'; import getFilterList from './utils/getFilterList'; diff --git a/packages/core/helper-plugin/src/components/Form/index.js b/packages/core/helper-plugin/src/components/Form/index.js index c208e30a0f..2e66dea391 100644 --- a/packages/core/helper-plugin/src/components/Form/index.js +++ b/packages/core/helper-plugin/src/components/Form/index.js @@ -1,4 +1,5 @@ import React, { useEffect, useRef } from 'react'; + import { Form, useFormikContext } from 'formik'; const FormWithFocus = (props) => { diff --git a/packages/core/helper-plugin/src/components/GenericInput/NotSupported.js b/packages/core/helper-plugin/src/components/GenericInput/NotSupported.js index 4853915707..d77cdfb957 100644 --- a/packages/core/helper-plugin/src/components/GenericInput/NotSupported.js +++ b/packages/core/helper-plugin/src/components/GenericInput/NotSupported.js @@ -5,6 +5,7 @@ */ import React from 'react'; + import { TextInput } from '@strapi/design-system'; import PropTypes from 'prop-types'; diff --git a/packages/core/helper-plugin/src/components/GenericInput/index.js b/packages/core/helper-plugin/src/components/GenericInput/index.js index 1d8bbfe8cf..2494f365f4 100644 --- a/packages/core/helper-plugin/src/components/GenericInput/index.js +++ b/packages/core/helper-plugin/src/components/GenericInput/index.js @@ -5,31 +5,32 @@ */ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import parseISO from 'date-fns/parseISO'; -import formatISO from 'date-fns/formatISO'; -import { useIntl } from 'react-intl'; import { Checkbox, DatePicker, DateTimePicker, Icon, + JSONInput, NumberInput, + Option, Select, Textarea, TextInput, TimePicker, ToggleInput, - JSONInput, - Option, } from '@strapi/design-system'; -import { EyeStriked, Eye } from '@strapi/icons'; +import { Eye, EyeStriked } from '@strapi/icons'; +import formatISO from 'date-fns/formatISO'; +import parseISO from 'date-fns/parseISO'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; -import NotSupported from './NotSupported'; import useFieldHint from '../../hooks/useFieldHint'; import pxToRem from '../../utils/pxToRem'; +import NotSupported from './NotSupported'; + const GenericInput = ({ autoComplete, customInputs, diff --git a/packages/core/helper-plugin/src/components/GenericInput/tests/index.test.js b/packages/core/helper-plugin/src/components/GenericInput/tests/index.test.js index db7ac76146..72532dfb11 100644 --- a/packages/core/helper-plugin/src/components/GenericInput/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/GenericInput/tests/index.test.js @@ -1,8 +1,9 @@ import React from 'react'; + import { DesignSystemProvider } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; -import { render, fireEvent } from '@testing-library/react'; +import { fireEvent, render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { IntlProvider } from 'react-intl'; import GenericInput from '../index'; diff --git a/packages/core/helper-plugin/src/components/InjectionZone/InjectionZone.js b/packages/core/helper-plugin/src/components/InjectionZone/InjectionZone.js index a1df272b4e..48452a4064 100644 --- a/packages/core/helper-plugin/src/components/InjectionZone/InjectionZone.js +++ b/packages/core/helper-plugin/src/components/InjectionZone/InjectionZone.js @@ -1,5 +1,7 @@ import React from 'react'; + import PropTypes from 'prop-types'; + import useInjectionZone from './useInjectionZone'; const InjectionZone = ({ area, ...props }) => { diff --git a/packages/core/helper-plugin/src/components/Link/index.js b/packages/core/helper-plugin/src/components/Link/index.js index 88c555a18c..b9386184fc 100644 --- a/packages/core/helper-plugin/src/components/Link/index.js +++ b/packages/core/helper-plugin/src/components/Link/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import { NavLink } from 'react-router-dom'; + import { Link as DSLink } from '@strapi/design-system/v2'; +import { NavLink } from 'react-router-dom'; const Link = (props) => ; diff --git a/packages/core/helper-plugin/src/components/LinkButton/index.js b/packages/core/helper-plugin/src/components/LinkButton/index.js index 32e7b7a93c..0a8bdc35bb 100644 --- a/packages/core/helper-plugin/src/components/LinkButton/index.js +++ b/packages/core/helper-plugin/src/components/LinkButton/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import { NavLink } from 'react-router-dom'; + import { LinkButton as DSLinkButton } from '@strapi/design-system/v2'; +import { NavLink } from 'react-router-dom'; const LinkButton = (props) => ; diff --git a/packages/core/helper-plugin/src/components/LoadingIndicatorPage/index.js b/packages/core/helper-plugin/src/components/LoadingIndicatorPage/index.js index eb94a1eb1e..1145c3c8b8 100644 --- a/packages/core/helper-plugin/src/components/LoadingIndicatorPage/index.js +++ b/packages/core/helper-plugin/src/components/LoadingIndicatorPage/index.js @@ -1,5 +1,6 @@ import React from 'react'; -import { Loader, Flex } from '@strapi/design-system'; + +import { Flex, Loader } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; diff --git a/packages/core/helper-plugin/src/components/NoContent/index.js b/packages/core/helper-plugin/src/components/NoContent/index.js index 61eb04efc0..96c18270c3 100644 --- a/packages/core/helper-plugin/src/components/NoContent/index.js +++ b/packages/core/helper-plugin/src/components/NoContent/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import { EmptyDocuments } from '@strapi/icons'; + import { EmptyStateLayout } from '@strapi/design-system'; +import { EmptyDocuments } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; diff --git a/packages/core/helper-plugin/src/components/NoMedia/index.js b/packages/core/helper-plugin/src/components/NoMedia/index.js index fbe638f19d..3ccb7d510c 100644 --- a/packages/core/helper-plugin/src/components/NoMedia/index.js +++ b/packages/core/helper-plugin/src/components/NoMedia/index.js @@ -1,6 +1,7 @@ import React from 'react'; -import { EmptyPictures } from '@strapi/icons'; + import { EmptyStateLayout } from '@strapi/design-system'; +import { EmptyPictures } from '@strapi/icons'; const NoMedia = (props) => { return } {...props} />; diff --git a/packages/core/helper-plugin/src/components/NoPermissions/index.js b/packages/core/helper-plugin/src/components/NoPermissions/index.js index f1442eef45..620a37b33d 100644 --- a/packages/core/helper-plugin/src/components/NoPermissions/index.js +++ b/packages/core/helper-plugin/src/components/NoPermissions/index.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { EmptyStateLayout } from '@strapi/design-system'; +import { EmptyPermissions } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { EmptyPermissions } from '@strapi/icons'; -import { EmptyStateLayout } from '@strapi/design-system'; const NoPermissions = ({ action }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/helper-plugin/src/components/NotAllowedInput/index.js b/packages/core/helper-plugin/src/components/NotAllowedInput/index.js index e60b07e3c6..f7fa55fb6c 100644 --- a/packages/core/helper-plugin/src/components/NotAllowedInput/index.js +++ b/packages/core/helper-plugin/src/components/NotAllowedInput/index.js @@ -5,11 +5,12 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; + import { TextInput } from '@strapi/design-system'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { EyeStriked } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const StyledIcon = styled(EyeStriked)` > path { diff --git a/packages/core/helper-plugin/src/components/NotAllowedInput/tests/index.test.js b/packages/core/helper-plugin/src/components/NotAllowedInput/tests/index.test.js index bd57392934..1d804ed978 100644 --- a/packages/core/helper-plugin/src/components/NotAllowedInput/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/NotAllowedInput/tests/index.test.js @@ -5,9 +5,11 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; + import NotAllowedInput from '../index'; const messages = { diff --git a/packages/core/helper-plugin/src/components/PageSizeURLQuery/index.js b/packages/core/helper-plugin/src/components/PageSizeURLQuery/index.js index 527ce4559f..9c2edb2481 100644 --- a/packages/core/helper-plugin/src/components/PageSizeURLQuery/index.js +++ b/packages/core/helper-plugin/src/components/PageSizeURLQuery/index.js @@ -5,11 +5,13 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; -import { Box, Flex, Select, Option, Typography } from '@strapi/design-system'; + +import { Box, Flex, Option, Select, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import useQueryParams from '../../hooks/useQueryParams'; +import { useIntl } from 'react-intl'; + import { useTracking } from '../../features/Tracking'; +import useQueryParams from '../../hooks/useQueryParams'; const PageSizeURLQuery = ({ trackedEvent, options, defaultValue }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/helper-plugin/src/components/PageSizeURLQuery/tests/index.test.js b/packages/core/helper-plugin/src/components/PageSizeURLQuery/tests/index.test.js index de7df47c10..12d96d733b 100644 --- a/packages/core/helper-plugin/src/components/PageSizeURLQuery/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/PageSizeURLQuery/tests/index.test.js @@ -5,11 +5,13 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import PageSizeURLQuery from '../index'; jest.mock('../../../features/Tracking', () => ({ diff --git a/packages/core/helper-plugin/src/components/PaginationURLQuery/index.js b/packages/core/helper-plugin/src/components/PaginationURLQuery/index.js index 3e9e3c12df..216df4df31 100644 --- a/packages/core/helper-plugin/src/components/PaginationURLQuery/index.js +++ b/packages/core/helper-plugin/src/components/PaginationURLQuery/index.js @@ -15,11 +15,13 @@ */ import React from 'react'; -import { NextLink, Pagination, PreviousLink, Dots, PageLink } from '@strapi/design-system'; + +import { Dots, NextLink, PageLink, Pagination, PreviousLink } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { useLocation, NavLink } from 'react-router-dom'; -import { useIntl } from 'react-intl'; import { stringify } from 'qs'; +import { useIntl } from 'react-intl'; +import { NavLink, useLocation } from 'react-router-dom'; + import useQueryParams from '../../hooks/useQueryParams'; const PaginationURLQuery = ({ pagination: { pageCount } }) => { diff --git a/packages/core/helper-plugin/src/components/PaginationURLQuery/tests/index.test.js b/packages/core/helper-plugin/src/components/PaginationURLQuery/tests/index.test.js index aff19a9c5e..1c07e82324 100644 --- a/packages/core/helper-plugin/src/components/PaginationURLQuery/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/PaginationURLQuery/tests/index.test.js @@ -5,11 +5,13 @@ */ import React from 'react'; -import { act, render, screen, fireEvent, waitFor } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import PaginationURLQuery from '../index'; const messages = { diff --git a/packages/core/helper-plugin/src/components/ReactSelect/ReactSelect.js b/packages/core/helper-plugin/src/components/ReactSelect/ReactSelect.js index 6ae52785ff..bd8986915d 100644 --- a/packages/core/helper-plugin/src/components/ReactSelect/ReactSelect.js +++ b/packages/core/helper-plugin/src/components/ReactSelect/ReactSelect.js @@ -1,12 +1,12 @@ -import PropTypes from 'prop-types'; import React from 'react'; + +import PropTypes from 'prop-types'; import Select from 'react-select'; import { useTheme } from 'styled-components'; import ClearIndicator from './components/ClearIndicator'; import DropdownIndicator from './components/DropdownIndicator'; import IndicatorSeparator from './components/IndicatorSeparator'; - import getSelectStyles from './utils/getSelectStyles'; const ReactSelect = ({ components, styles, error, ariaErrorMessage, ...props }) => { diff --git a/packages/core/helper-plugin/src/components/ReactSelect/components/ClearIndicator.js b/packages/core/helper-plugin/src/components/ReactSelect/components/ClearIndicator.js index 25294fc160..1128f80235 100644 --- a/packages/core/helper-plugin/src/components/ReactSelect/components/ClearIndicator.js +++ b/packages/core/helper-plugin/src/components/ReactSelect/components/ClearIndicator.js @@ -1,6 +1,8 @@ import React from 'react'; -import { components } from 'react-select'; + import { Cross } from '@strapi/icons'; +import { components } from 'react-select'; + import IconBox from './IconBox'; const ClearIndicator = (props) => { diff --git a/packages/core/helper-plugin/src/components/ReactSelect/components/DropdownIndicator.js b/packages/core/helper-plugin/src/components/ReactSelect/components/DropdownIndicator.js index bc0911c49b..ef99588548 100644 --- a/packages/core/helper-plugin/src/components/ReactSelect/components/DropdownIndicator.js +++ b/packages/core/helper-plugin/src/components/ReactSelect/components/DropdownIndicator.js @@ -1,6 +1,8 @@ import React from 'react'; -import styled from 'styled-components'; + import { CarretDown } from '@strapi/icons'; +import styled from 'styled-components'; + import IconBox from './IconBox'; export const CarretBox = styled(IconBox)` diff --git a/packages/core/helper-plugin/src/components/ReactSelect/components/IconBox.js b/packages/core/helper-plugin/src/components/ReactSelect/components/IconBox.js index b5c41e9a55..517faab4f0 100644 --- a/packages/core/helper-plugin/src/components/ReactSelect/components/IconBox.js +++ b/packages/core/helper-plugin/src/components/ReactSelect/components/IconBox.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { Box } from '@strapi/design-system'; +import styled from 'styled-components'; export const IconBox = styled(Box)` background: transparent; diff --git a/packages/core/helper-plugin/src/components/RelativeTime/index.js b/packages/core/helper-plugin/src/components/RelativeTime/index.js index a3d71ab78e..899f5d15be 100644 --- a/packages/core/helper-plugin/src/components/RelativeTime/index.js +++ b/packages/core/helper-plugin/src/components/RelativeTime/index.js @@ -1,7 +1,8 @@ import React from 'react'; + import { intervalToDuration, isPast } from 'date-fns'; -import { useIntl } from 'react-intl'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const RelativeTime = ({ timestamp }) => { const { formatRelativeTime, formatDate, formatTime } = useIntl(); diff --git a/packages/core/helper-plugin/src/components/RelativeTime/tests/index.test.js b/packages/core/helper-plugin/src/components/RelativeTime/tests/index.test.js index 90e4c84b52..326640fe47 100644 --- a/packages/core/helper-plugin/src/components/RelativeTime/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/RelativeTime/tests/index.test.js @@ -1,7 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render, screen } from '@testing-library/react'; import { IntlProvider, useIntl } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import RelativeTime from '../index'; const App = ( diff --git a/packages/core/helper-plugin/src/components/SearchURLQuery/index.js b/packages/core/helper-plugin/src/components/SearchURLQuery/index.js index 54f79c2b42..54f08d3ec1 100644 --- a/packages/core/helper-plugin/src/components/SearchURLQuery/index.js +++ b/packages/core/helper-plugin/src/components/SearchURLQuery/index.js @@ -1,10 +1,12 @@ -import React, { useLayoutEffect, useState, useRef } from 'react'; +import React, { useLayoutEffect, useRef, useState } from 'react'; + +import { Icon, IconButton, Searchbar, SearchForm } from '@strapi/design-system'; +import { Search as SearchIcon } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Search as SearchIcon } from '@strapi/icons'; -import { Searchbar, SearchForm, IconButton, Icon } from '@strapi/design-system'; -import useQueryParams from '../../hooks/useQueryParams'; + import { useTracking } from '../../features/Tracking'; +import useQueryParams from '../../hooks/useQueryParams'; const SearchURLQuery = ({ label, placeholder, trackedEvent, trackedEventDetails }) => { const wrapperRef = useRef(null); diff --git a/packages/core/helper-plugin/src/components/SearchURLQuery/tests/index.test.js b/packages/core/helper-plugin/src/components/SearchURLQuery/tests/index.test.js index a834478c28..707c063257 100644 --- a/packages/core/helper-plugin/src/components/SearchURLQuery/tests/index.test.js +++ b/packages/core/helper-plugin/src/components/SearchURLQuery/tests/index.test.js @@ -5,11 +5,13 @@ */ import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import { IntlProvider } from 'react-intl'; import { Router } from 'react-router-dom'; -import { createMemoryHistory } from 'history'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import SearchURLQuery from '../index'; const trackUsage = jest.fn(); diff --git a/packages/core/helper-plugin/src/components/SettingsPageTitle/index.js b/packages/core/helper-plugin/src/components/SettingsPageTitle/index.js index bb31cc4c8e..8a1792d1a7 100644 --- a/packages/core/helper-plugin/src/components/SettingsPageTitle/index.js +++ b/packages/core/helper-plugin/src/components/SettingsPageTitle/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + import PropTypes from 'prop-types'; import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; const SettingsPageTitle = ({ name }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/helper-plugin/src/components/Status/index.js b/packages/core/helper-plugin/src/components/Status/index.js index e4e4e8f1cf..d12ad1ec66 100644 --- a/packages/core/helper-plugin/src/components/Status/index.js +++ b/packages/core/helper-plugin/src/components/Status/index.js @@ -1,4 +1,5 @@ import React from 'react'; + import PropTypes from 'prop-types'; import styled from 'styled-components'; diff --git a/packages/core/helper-plugin/src/content-manager/hooks/useCMEditViewDataManager/index.js b/packages/core/helper-plugin/src/content-manager/hooks/useCMEditViewDataManager/index.js index 01ac0ff8ef..a632208bdf 100644 --- a/packages/core/helper-plugin/src/content-manager/hooks/useCMEditViewDataManager/index.js +++ b/packages/core/helper-plugin/src/content-manager/hooks/useCMEditViewDataManager/index.js @@ -1,4 +1,5 @@ import { useContext } from 'react'; + import ContentManagerEditViewDataManagerContext from '../../contexts/ContentManagerEditViewDataManagerContext'; const useCMEditViewDataManager = () => { diff --git a/packages/core/helper-plugin/src/content-manager/utils/contentManagementUtilRemoveFieldsFromData.js b/packages/core/helper-plugin/src/content-manager/utils/contentManagementUtilRemoveFieldsFromData.js index 54cf1061f1..3718d7607d 100644 --- a/packages/core/helper-plugin/src/content-manager/utils/contentManagementUtilRemoveFieldsFromData.js +++ b/packages/core/helper-plugin/src/content-manager/utils/contentManagementUtilRemoveFieldsFromData.js @@ -1,6 +1,6 @@ import get from 'lodash/get'; -import { getType, getOtherInfos } from './getAttributeInfos'; +import { getOtherInfos, getType } from './getAttributeInfos'; const defaultFields = ['createdBy', 'updatedBy', 'publishedAt', 'id', '_id']; diff --git a/packages/core/helper-plugin/src/content-manager/utils/formatContentTypeData.js b/packages/core/helper-plugin/src/content-manager/utils/formatContentTypeData.js index 08a64513ad..c27da1f39c 100644 --- a/packages/core/helper-plugin/src/content-manager/utils/formatContentTypeData.js +++ b/packages/core/helper-plugin/src/content-manager/utils/formatContentTypeData.js @@ -2,7 +2,8 @@ // in order to have a unique identifier for the DnD import get from 'lodash/get'; -import { getType, getOtherInfos } from './getAttributeInfos'; + +import { getOtherInfos, getType } from './getAttributeInfos'; const formatContentTypeData = (data, ct, composSchema) => { const recursiveFormatData = (data, schema) => { diff --git a/packages/core/helper-plugin/src/content-manager/utils/getAttributeInfos.js b/packages/core/helper-plugin/src/content-manager/utils/getAttributeInfos.js index e6c9ed94ee..44b653fea0 100644 --- a/packages/core/helper-plugin/src/content-manager/utils/getAttributeInfos.js +++ b/packages/core/helper-plugin/src/content-manager/utils/getAttributeInfos.js @@ -3,4 +3,4 @@ import get from 'lodash/get'; const getType = (schema, attrName) => get(schema, ['attributes', attrName, 'type'], ''); const getOtherInfos = (schema, arr) => get(schema, ['attributes', ...arr], ''); -export { getType, getOtherInfos }; +export { getOtherInfos, getType }; diff --git a/packages/core/helper-plugin/src/content-manager/utils/tests/contentManagementUtilRemoveFieldsFromData.test.js b/packages/core/helper-plugin/src/content-manager/utils/tests/contentManagementUtilRemoveFieldsFromData.test.js index 9895cfea6b..1b19e78edb 100644 --- a/packages/core/helper-plugin/src/content-manager/utils/tests/contentManagementUtilRemoveFieldsFromData.test.js +++ b/packages/core/helper-plugin/src/content-manager/utils/tests/contentManagementUtilRemoveFieldsFromData.test.js @@ -1,6 +1,7 @@ -import testData from './testData'; import contentManagementUtilRemoveFieldsFromData from '../contentManagementUtilRemoveFieldsFromData'; +import testData from './testData'; + describe('STRAPI_HELPER_PLUGIN | utils', () => { describe('contentManagementUtilRemoveFieldsFromData', () => { it('should return an empty object', () => { diff --git a/packages/core/helper-plugin/src/content-manager/utils/tests/formatContentTypeData.test.js b/packages/core/helper-plugin/src/content-manager/utils/tests/formatContentTypeData.test.js index d78b048517..0a40652fe1 100644 --- a/packages/core/helper-plugin/src/content-manager/utils/tests/formatContentTypeData.test.js +++ b/packages/core/helper-plugin/src/content-manager/utils/tests/formatContentTypeData.test.js @@ -1,4 +1,5 @@ import formatContentTypeData from '../formatContentTypeData'; + import testData from './testData'; const { contentType, components, modifiedData } = testData; diff --git a/packages/core/helper-plugin/src/features/AppInfo.js b/packages/core/helper-plugin/src/features/AppInfo.js index ef010de231..540478067b 100644 --- a/packages/core/helper-plugin/src/features/AppInfo.js +++ b/packages/core/helper-plugin/src/features/AppInfo.js @@ -154,10 +154,10 @@ const AppInfosProvider = AppInfoProvider; const AppInfosContext = AppInfoContext; export { - AppInfoProvider, AppInfoContext, + AppInfoProvider, + AppInfosContext, + AppInfosProvider, useAppInfo, useAppInfos, - AppInfosProvider, - AppInfosContext, }; diff --git a/packages/core/helper-plugin/src/features/AutoReloadOverlayBlocker.js b/packages/core/helper-plugin/src/features/AutoReloadOverlayBlocker.js index 249744dcf8..c01f2236fe 100644 --- a/packages/core/helper-plugin/src/features/AutoReloadOverlayBlocker.js +++ b/packages/core/helper-plugin/src/features/AutoReloadOverlayBlocker.js @@ -1,12 +1,13 @@ import * as React from 'react'; -import PropTypes from 'prop-types'; -import styled, { keyframes } from 'styled-components'; -import { Flex, Box, Typography } from '@strapi/design-system'; -import { Refresh, Clock } from '@strapi/icons'; -import { useIntl } from 'react-intl'; -import { createPortal } from 'react-dom'; +import { Box, Flex, Typography } from '@strapi/design-system'; import { Link } from '@strapi/design-system/v2'; +import { Clock, Refresh } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { createPortal } from 'react-dom'; +import { useIntl } from 'react-intl'; +import styled, { keyframes } from 'styled-components'; + import pxToRem from '../utils/pxToRem'; /** diff --git a/packages/core/helper-plugin/src/features/CustomFields.js b/packages/core/helper-plugin/src/features/CustomFields.js index 842a5a2407..1f72f941bc 100644 --- a/packages/core/helper-plugin/src/features/CustomFields.js +++ b/packages/core/helper-plugin/src/features/CustomFields.js @@ -76,4 +76,4 @@ CustomFieldsProvider.propTypes = { */ const useCustomFields = () => React.useContext(CustomFieldsContext); -export { CustomFieldsProvider, useCustomFields, CustomFieldsContext }; +export { CustomFieldsContext, CustomFieldsProvider, useCustomFields }; diff --git a/packages/core/helper-plugin/src/features/GuidedTour.js b/packages/core/helper-plugin/src/features/GuidedTour.js index 3f90e367fa..562ce233b0 100644 --- a/packages/core/helper-plugin/src/features/GuidedTour.js +++ b/packages/core/helper-plugin/src/features/GuidedTour.js @@ -108,4 +108,4 @@ GuidedTourProvider.propTypes = { */ const useGuidedTour = () => React.useContext(GuidedTourContext); -export { GuidedTourProvider, useGuidedTour, GuidedTourContext }; +export { GuidedTourContext, GuidedTourProvider, useGuidedTour }; diff --git a/packages/core/helper-plugin/src/features/Library.js b/packages/core/helper-plugin/src/features/Library.js index dc49610010..d5fde40e85 100644 --- a/packages/core/helper-plugin/src/features/Library.js +++ b/packages/core/helper-plugin/src/features/Library.js @@ -45,4 +45,4 @@ LibraryProvider.propTypes = { */ const useLibrary = () => React.useContext(LibraryContext); -export { LibraryProvider, useLibrary, LibraryContext }; +export { LibraryContext, LibraryProvider, useLibrary }; diff --git a/packages/core/helper-plugin/src/features/Notifications.js b/packages/core/helper-plugin/src/features/Notifications.js index 73285922b1..e993202fdd 100644 --- a/packages/core/helper-plugin/src/features/Notifications.js +++ b/packages/core/helper-plugin/src/features/Notifications.js @@ -1,9 +1,10 @@ import * as React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; import { Alert, Flex } from '@strapi/design-system'; import { Link } from '@strapi/design-system/v2'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { useCallbackRef } from '../hooks/useCallbackRef'; /** @@ -302,4 +303,4 @@ Notification.propTypes = { */ const useNotification = () => React.useContext(NotificationsContext).toggleNotification; -export { NotificationsProvider, useNotification, NotificationsContext }; +export { NotificationsContext, NotificationsProvider, useNotification }; diff --git a/packages/core/helper-plugin/src/features/OverlayBlocker.js b/packages/core/helper-plugin/src/features/OverlayBlocker.js index 3032ff0ba3..236f063b6d 100644 --- a/packages/core/helper-plugin/src/features/OverlayBlocker.js +++ b/packages/core/helper-plugin/src/features/OverlayBlocker.js @@ -1,10 +1,10 @@ /* eslint-disable no-undef */ import * as React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { createPortal } from 'react-dom'; +import styled from 'styled-components'; /* ------------------------------------------------------------------------------------------------- * Context @@ -74,4 +74,4 @@ const Overlay = styled(Box)` */ const useOverlayBlocker = () => React.useContext(OverlayBlockerContext); -export { OverlayBlockerProvider, useOverlayBlocker, OverlayBlockerContext }; +export { OverlayBlockerContext, OverlayBlockerProvider, useOverlayBlocker }; diff --git a/packages/core/helper-plugin/src/features/StrapiApp.js b/packages/core/helper-plugin/src/features/StrapiApp.js index 413d6ad896..092f84d19e 100644 --- a/packages/core/helper-plugin/src/features/StrapiApp.js +++ b/packages/core/helper-plugin/src/features/StrapiApp.js @@ -103,4 +103,4 @@ StrapiAppProvider.propTypes = { */ const useStrapiApp = () => React.useContext(StrapiAppContext); -export { StrapiAppProvider, useStrapiApp, StrapiAppContext }; +export { StrapiAppContext, StrapiAppProvider, useStrapiApp }; diff --git a/packages/core/helper-plugin/src/features/Tracking.js b/packages/core/helper-plugin/src/features/Tracking.js index d74cc72783..96d26b1b94 100644 --- a/packages/core/helper-plugin/src/features/Tracking.js +++ b/packages/core/helper-plugin/src/features/Tracking.js @@ -122,7 +122,10 @@ const useTracking = () => { }, }, { - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': event, + }, } ); @@ -140,4 +143,4 @@ const useTracking = () => { return { trackUsage }; }; -export { TrackingProvider, useTracking, TrackingContext }; +export { TrackingContext, TrackingProvider, useTracking }; diff --git a/packages/core/helper-plugin/src/features/tests/Notifications.test.js b/packages/core/helper-plugin/src/features/tests/Notifications.test.js index e8f488f35e..cbfc03044d 100644 --- a/packages/core/helper-plugin/src/features/tests/Notifications.test.js +++ b/packages/core/helper-plugin/src/features/tests/Notifications.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { render as renderRTL, act } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { IntlProvider } from 'react-intl'; -import { lightTheme, ThemeProvider } from '@strapi/design-system'; + import { NotificationsProvider, useNotification } from '../Notifications'; const defaultNotificationConfig = { diff --git a/packages/core/helper-plugin/src/features/tests/Tracking.test.js b/packages/core/helper-plugin/src/features/tests/Tracking.test.js index 49d200b5aa..c87d69d881 100644 --- a/packages/core/helper-plugin/src/features/tests/Tracking.test.js +++ b/packages/core/helper-plugin/src/features/tests/Tracking.test.js @@ -1,9 +1,10 @@ import React from 'react'; + import { renderHook } from '@testing-library/react'; import axios from 'axios'; import { useAppInfo } from '../AppInfo'; -import { useTracking, TrackingProvider } from '../Tracking'; +import { TrackingProvider, useTracking } from '../Tracking'; jest.mock('../AppInfo'); @@ -68,7 +69,10 @@ describe('useTracking', () => { userProperties: {}, }, { - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': 'event', + }, } ); diff --git a/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/tests/useAPIErrorHandler.test.js b/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/tests/useAPIErrorHandler.test.js index 37e422248d..73a905cdea 100644 --- a/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/tests/useAPIErrorHandler.test.js +++ b/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/tests/useAPIErrorHandler.test.js @@ -1,6 +1,6 @@ -import { renderHook, act } from '@testing-library/react'; -import { useIntl } from 'react-intl'; +import { act, renderHook } from '@testing-library/react'; import { AxiosError } from 'axios'; +import { useIntl } from 'react-intl'; import { useAPIErrorHandler } from '../useAPIErrorHandler'; diff --git a/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/useAPIErrorHandler.js b/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/useAPIErrorHandler.js index cc7f4eedef..461242913b 100644 --- a/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/useAPIErrorHandler.js +++ b/packages/core/helper-plugin/src/hooks/useAPIErrorHandler/useAPIErrorHandler.js @@ -1,5 +1,5 @@ -import { useIntl } from 'react-intl'; import { AxiosError } from 'axios'; +import { useIntl } from 'react-intl'; import { formatAPIError } from './utils/formatAPIError'; import { formatAxiosError } from './utils/formatAxiosError'; diff --git a/packages/core/helper-plugin/src/hooks/useFetchClient/index.js b/packages/core/helper-plugin/src/hooks/useFetchClient/index.js index ba01844942..ff81abffc6 100644 --- a/packages/core/helper-plugin/src/hooks/useFetchClient/index.js +++ b/packages/core/helper-plugin/src/hooks/useFetchClient/index.js @@ -3,7 +3,8 @@ * useFetchClient * */ -import { useEffect, useRef, useMemo } from 'react'; +import { useEffect, useMemo, useRef } from 'react'; + import getFetchClient from '../../utils/getFetchClient'; const useFetchClient = () => { diff --git a/packages/core/helper-plugin/src/hooks/useFetchClient/tests/useFetchClient.test.js b/packages/core/helper-plugin/src/hooks/useFetchClient/tests/useFetchClient.test.js index cafe56ef8c..794d3a4963 100644 --- a/packages/core/helper-plugin/src/hooks/useFetchClient/tests/useFetchClient.test.js +++ b/packages/core/helper-plugin/src/hooks/useFetchClient/tests/useFetchClient.test.js @@ -1,6 +1,7 @@ import React, { useEffect } from 'react'; -import { render } from '@testing-library/react'; + import { useFetchClient } from '@strapi/helper-plugin'; +import { render } from '@testing-library/react'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/helper-plugin/src/hooks/useFieldHint/index.js b/packages/core/helper-plugin/src/hooks/useFieldHint/index.js index a5db9e2b9d..8273b3bcc7 100644 --- a/packages/core/helper-plugin/src/hooks/useFieldHint/index.js +++ b/packages/core/helper-plugin/src/hooks/useFieldHint/index.js @@ -1,5 +1,7 @@ import React from 'react'; + import { useIntl } from 'react-intl'; + import { getFieldUnits, getMinMax } from './utils'; /** diff --git a/packages/core/helper-plugin/src/hooks/useFieldHint/tests/useFieldHint.test.js b/packages/core/helper-plugin/src/hooks/useFieldHint/tests/useFieldHint.test.js index 374974a01b..09d6ce5e6f 100644 --- a/packages/core/helper-plugin/src/hooks/useFieldHint/tests/useFieldHint.test.js +++ b/packages/core/helper-plugin/src/hooks/useFieldHint/tests/useFieldHint.test.js @@ -1,5 +1,6 @@ import React from 'react'; -import { renderHook, act } from '@testing-library/react'; + +import { act, renderHook } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import useFieldHint from '../index'; diff --git a/packages/core/helper-plugin/src/hooks/useFormattedMessage/index.js b/packages/core/helper-plugin/src/hooks/useFormattedMessage/index.js index a41ec9a8e5..0ce13056df 100644 --- a/packages/core/helper-plugin/src/hooks/useFormattedMessage/index.js +++ b/packages/core/helper-plugin/src/hooks/useFormattedMessage/index.js @@ -1,5 +1,5 @@ -import { useIntl } from 'react-intl'; import isObject from 'lodash/isObject'; +import { useIntl } from 'react-intl'; const useFormattedMessage = (message) => { const { formatMessage } = useIntl(); diff --git a/packages/core/helper-plugin/src/hooks/usePersistentState/index.js b/packages/core/helper-plugin/src/hooks/usePersistentState/index.js index 8bab4e60b0..c4d588e02d 100644 --- a/packages/core/helper-plugin/src/hooks/usePersistentState/index.js +++ b/packages/core/helper-plugin/src/hooks/usePersistentState/index.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useEffect, useState } from 'react'; const usePersistentState = (key, defaultValue) => { const [value, setValue] = useState(() => { diff --git a/packages/core/helper-plugin/src/hooks/useQueryParams/index.js b/packages/core/helper-plugin/src/hooks/useQueryParams/index.js index 50dd606681..6a096bdc60 100644 --- a/packages/core/helper-plugin/src/hooks/useQueryParams/index.js +++ b/packages/core/helper-plugin/src/hooks/useQueryParams/index.js @@ -1,6 +1,7 @@ import { useCallback, useMemo } from 'react'; -import { useHistory, useLocation } from 'react-router-dom'; + import { parse, stringify } from 'qs'; +import { useHistory, useLocation } from 'react-router-dom'; const useQueryParams = (initialParams) => { const { search } = useLocation(); diff --git a/packages/core/helper-plugin/src/hooks/useRBAC/index.js b/packages/core/helper-plugin/src/hooks/useRBAC/index.js index 6dd26b2483..4b23855f8d 100644 --- a/packages/core/helper-plugin/src/hooks/useRBAC/index.js +++ b/packages/core/helper-plugin/src/hooks/useRBAC/index.js @@ -1,10 +1,11 @@ import { useCallback, useEffect, useMemo, useReducer, useRef } from 'react'; + +import { useRBACProvider } from '../../features/RBAC'; import hasPermissions from '../../utils/hasPermissions'; -import generateResultsObject from './utils/generateResultsObject'; -import reducer from './reducer'; import init from './init'; -import { useRBACProvider } from '../../features/RBAC'; +import reducer from './reducer'; +import generateResultsObject from './utils/generateResultsObject'; const useRBAC = (pluginPermissions, permissions) => { const abortController = new AbortController(); diff --git a/packages/core/helper-plugin/src/hooks/useRBAC/reducer.js b/packages/core/helper-plugin/src/hooks/useRBAC/reducer.js index d8099acaa1..11c5571149 100644 --- a/packages/core/helper-plugin/src/hooks/useRBAC/reducer.js +++ b/packages/core/helper-plugin/src/hooks/useRBAC/reducer.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import generateAllowedActions from './utils/generateAllowedActions'; const initialState = { diff --git a/packages/core/helper-plugin/src/hooks/useSelectionState/tests/useSelectionState.test.js b/packages/core/helper-plugin/src/hooks/useSelectionState/tests/useSelectionState.test.js index d5830167fb..6430453bbb 100644 --- a/packages/core/helper-plugin/src/hooks/useSelectionState/tests/useSelectionState.test.js +++ b/packages/core/helper-plugin/src/hooks/useSelectionState/tests/useSelectionState.test.js @@ -1,4 +1,4 @@ -import { renderHook, act } from '@testing-library/react'; +import { act, renderHook } from '@testing-library/react'; import { useSelectionState } from '../index'; diff --git a/packages/core/helper-plugin/src/icons/RemoveRoundedButton/index.js b/packages/core/helper-plugin/src/icons/RemoveRoundedButton/index.js index 37b3551d16..0b25147e2d 100644 --- a/packages/core/helper-plugin/src/icons/RemoveRoundedButton/index.js +++ b/packages/core/helper-plugin/src/icons/RemoveRoundedButton/index.js @@ -1,7 +1,9 @@ import React from 'react'; + import { IconButton } from '@strapi/design-system'; import { Minus } from '@strapi/icons'; import styled from 'styled-components'; + import pxToRem from '../../utils/pxToRem'; const StyledIconButton = styled(IconButton)( diff --git a/packages/core/helper-plugin/src/icons/SortIcon/index.js b/packages/core/helper-plugin/src/icons/SortIcon/index.js index 908ab84244..93afd24c8f 100644 --- a/packages/core/helper-plugin/src/icons/SortIcon/index.js +++ b/packages/core/helper-plugin/src/icons/SortIcon/index.js @@ -1,6 +1,6 @@ -import styled from 'styled-components'; import { CarretDown } from '@strapi/icons'; import PropTypes from 'prop-types'; +import styled from 'styled-components'; const transientProps = { isUp: true, diff --git a/packages/core/helper-plugin/src/index.js b/packages/core/helper-plugin/src/index.js index d8042ac0c0..e175e5416f 100644 --- a/packages/core/helper-plugin/src/index.js +++ b/packages/core/helper-plugin/src/index.js @@ -1,37 +1,37 @@ -import { getType, getOtherInfos } from './content-manager/utils/getAttributeInfos'; +import { getOtherInfos, getType } from './content-manager/utils/getAttributeInfos'; /* ------------------------------------------------------------------------------------------------- * Components * -----------------------------------------------------------------------------------------------*/ +export { default as AnErrorOccurred } from './components/AnErrorOccurred'; export { default as CheckPagePermissions } from './components/CheckPagePermissions'; export { default as CheckPermissions } from './components/CheckPermissions'; export { default as ConfirmDialog } from './components/ConfirmDialog'; export { default as ContentBox } from './components/ContentBox'; +export { default as DateTimePicker } from './components/DateTimePicker'; export { default as DynamicTable } from './components/DynamicTable'; -export { default as EmptyStateLayout } from './components/EmptyStateLayout'; -export { default as NoContent } from './components/NoContent'; -export { default as NoMedia } from './components/NoMedia'; -export { default as NoPermissions } from './components/NoPermissions'; -export { default as AnErrorOccurred } from './components/AnErrorOccurred'; export { default as EmptyBodyTable } from './components/EmptyBodyTable'; -export { default as GenericInput } from './components/GenericInput'; -export * from './components/InjectionZone'; -export { default as LoadingIndicatorPage } from './components/LoadingIndicatorPage'; -export { default as NotAllowedInput } from './components/NotAllowedInput'; -export { default as SettingsPageTitle } from './components/SettingsPageTitle'; -export { default as SearchURLQuery } from './components/SearchURLQuery'; -export { default as Status } from './components/Status'; +export { default as EmptyStateLayout } from './components/EmptyStateLayout'; export { default as FilterListURLQuery } from './components/FilterListURLQuery'; export { default as FilterPopoverURLQuery } from './components/FilterPopoverURLQuery'; export { default as Form } from './components/Form'; -export { default as PaginationURLQuery } from './components/PaginationURLQuery'; -export { default as PageSizeURLQuery } from './components/PageSizeURLQuery'; -export { default as RelativeTime } from './components/RelativeTime'; -export { default as DateTimePicker } from './components/DateTimePicker'; -export { default as ReactSelect } from './components/ReactSelect'; +export { default as GenericInput } from './components/GenericInput'; +export * from './components/InjectionZone'; export { default as Link } from './components/Link'; export { default as LinkButton } from './components/LinkButton'; +export { default as LoadingIndicatorPage } from './components/LoadingIndicatorPage'; +export { default as NoContent } from './components/NoContent'; +export { default as NoMedia } from './components/NoMedia'; +export { default as NoPermissions } from './components/NoPermissions'; +export { default as NotAllowedInput } from './components/NotAllowedInput'; +export { default as PageSizeURLQuery } from './components/PageSizeURLQuery'; +export { default as PaginationURLQuery } from './components/PaginationURLQuery'; +export { default as ReactSelect } from './components/ReactSelect'; +export { default as RelativeTime } from './components/RelativeTime'; +export { default as SearchURLQuery } from './components/SearchURLQuery'; +export { default as SettingsPageTitle } from './components/SettingsPageTitle'; +export { default as Status } from './components/Status'; /* ------------------------------------------------------------------------------------------------- * Content Manager @@ -51,8 +51,8 @@ export * from './features/AutoReloadOverlayBlocker'; export * from './features/CustomFields'; export * from './features/GuidedTour'; export * from './features/Library'; -export * from './features/OverlayBlocker'; export * from './features/Notifications'; +export * from './features/OverlayBlocker'; export * from './features/RBAC'; export * from './features/StrapiApp'; export * from './features/Tracking'; @@ -61,50 +61,47 @@ export * from './features/Tracking'; * Hooks * -----------------------------------------------------------------------------------------------*/ -export { default as useQuery } from './hooks/useQuery'; -export { useSelectionState } from './hooks/useSelectionState'; export * from './hooks/useAPIErrorHandler'; -export { useFilter } from './hooks/useFilter'; -export { useCollator } from './hooks/useCollator'; export { useCallbackRef } from './hooks/useCallbackRef'; export { useClipboard } from './hooks/useClipboard'; - -export { default as useQueryParams } from './hooks/useQueryParams'; -export { default as useRBAC } from './hooks/useRBAC'; -export { default as usePersistentState } from './hooks/usePersistentState'; +export { useCollator } from './hooks/useCollator'; +export { default as useFetchClient } from './hooks/useFetchClient'; +export { useFilter } from './hooks/useFilter'; export { default as useFocusWhenNavigate } from './hooks/useFocusWhenNavigate'; export { default as useLockScroll } from './hooks/useLockScroll'; -export { default as useFetchClient } from './hooks/useFetchClient'; +export { default as usePersistentState } from './hooks/usePersistentState'; +export { default as useQuery } from './hooks/useQuery'; +export { default as useQueryParams } from './hooks/useQueryParams'; +export { default as useRBAC } from './hooks/useRBAC'; +export { useSelectionState } from './hooks/useSelectionState'; /* ------------------------------------------------------------------------------------------------- * Icons * -----------------------------------------------------------------------------------------------*/ -export { default as SortIcon } from './icons/SortIcon'; export { default as RemoveRoundedButton } from './icons/RemoveRoundedButton'; +export { default as SortIcon } from './icons/SortIcon'; /* ------------------------------------------------------------------------------------------------- * Utils * -----------------------------------------------------------------------------------------------*/ +export { default as contentManagementUtilRemoveFieldsFromData } from './content-manager/utils/contentManagementUtilRemoveFieldsFromData'; +export { default as formatContentTypeData } from './content-manager/utils/formatContentTypeData'; export { default as auth } from './utils/auth'; +export { default as to } from './utils/await-to-js'; +export { default as difference } from './utils/difference'; +export { default as getAPIInnerErrors } from './utils/getAPIInnerErrors'; +export { default as getFetchClient } from './utils/getFetchClient'; +export { default as getFileExtension } from './utils/getFileExtension/getFileExtension'; +export { default as getYupInnerErrors } from './utils/getYupInnerErrors'; export { default as hasPermissions } from './utils/hasPermissions'; +export { findMatchingPermissions } from './utils/hasPermissions'; export { default as prefixFileUrlWithBackendUrl } from './utils/prefixFileUrlWithBackendUrl/prefixFileUrlWithBackendUrl'; export { default as prefixPluginTranslations } from './utils/prefixPluginTranslations'; export { default as pxToRem } from './utils/pxToRem'; -export { default as to } from './utils/await-to-js'; -export { default as setHexOpacity } from './utils/setHexOpacity'; -export { default as translatedErrors } from './utils/translatedErrors'; -export { default as formatContentTypeData } from './content-manager/utils/formatContentTypeData'; -export { findMatchingPermissions } from './utils/hasPermissions'; -export { default as contentManagementUtilRemoveFieldsFromData } from './content-manager/utils/contentManagementUtilRemoveFieldsFromData'; -export { default as getFileExtension } from './utils/getFileExtension/getFileExtension'; -export * from './utils/stopPropagation'; -export { default as difference } from './utils/difference'; -export { default as wrapAxiosInstance } from './utils/wrapAxiosInstance'; - export { default as request } from './utils/request'; -export { default as getAPIInnerErrors } from './utils/getAPIInnerErrors'; -export { default as getYupInnerErrors } from './utils/getYupInnerErrors'; - -export { default as getFetchClient } from './utils/getFetchClient'; +export { default as setHexOpacity } from './utils/setHexOpacity'; +export * from './utils/stopPropagation'; +export { default as translatedErrors } from './utils/translatedErrors'; +export { default as wrapAxiosInstance } from './utils/wrapAxiosInstance'; diff --git a/packages/core/helper-plugin/webpack.config.js b/packages/core/helper-plugin/webpack.config.js index a0420f37cb..680d54bb85 100644 --- a/packages/core/helper-plugin/webpack.config.js +++ b/packages/core/helper-plugin/webpack.config.js @@ -1,6 +1,6 @@ -const webpack = require('webpack'); -const { ESBuildMinifyPlugin } = require('esbuild-loader'); const browserslistToEsbuild = require('browserslist-to-esbuild'); +const { ESBuildMinifyPlugin } = require('esbuild-loader'); +const webpack = require('webpack'); const packageJson = require('./package.json'); diff --git a/packages/core/permissions/package.json b/packages/core/permissions/package.json index d6464cf715..0e51f7dc39 100644 --- a/packages/core/permissions/package.json +++ b/packages/core/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/permissions", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi's permission layer.", "repository": { "type": "git", @@ -27,7 +27,7 @@ }, "dependencies": { "@casl/ability": "5.4.4", - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "lodash": "4.17.21", "sift": "16.0.1" }, diff --git a/packages/core/strapi/lib/commands/actions/develop/action.js b/packages/core/strapi/lib/commands/actions/develop/action.js index f9133858ef..2b8e74f457 100644 --- a/packages/core/strapi/lib/commands/actions/develop/action.js +++ b/packages/core/strapi/lib/commands/actions/develop/action.js @@ -121,13 +121,12 @@ const workerProcess = async ({ appDir, distDir, watchAdmin, polling, isTSProject const shouldGenerateTypeScriptTypes = strapiInstance.config.get('typescript.autogenerate', false); if (shouldGenerateTypeScriptTypes) { - // This is run in an uncaught promise on purpose so that it doesn't block Strapi startup - // NOTE: We should probably add some configuration options to manage the file structure output or the verbosity level - tsUtils.generators.generateSchemasDefinitions({ + await tsUtils.generators.generate({ strapi: strapiInstance, - outDir: appDir, - verbose: false, - silent: true, + pwd: appDir, + rootDir: undefined, + logger: { silent: true, debug: false }, + artifacts: { contentTypes: true, components: true }, }); } diff --git a/packages/core/strapi/lib/commands/actions/telemetry/disable/action.js b/packages/core/strapi/lib/commands/actions/telemetry/disable/action.js index 26c3130834..c507b616cf 100644 --- a/packages/core/strapi/lib/commands/actions/telemetry/disable/action.js +++ b/packages/core/strapi/lib/commands/actions/telemetry/disable/action.js @@ -28,14 +28,19 @@ const writePackageJSON = async (path, file, spacing) => { const sendEvent = async (uuid) => { try { + const event = 'didOptOutTelemetry'; + await fetch('https://analytics.strapi.io/api/v2/track', { method: 'POST', body: JSON.stringify({ - event: 'didOptOutTelemetry', + event, deviceId: machineID(), groupProperties: { projectId: uuid }, }), - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': event, + }, }); } catch (e) { // ... diff --git a/packages/core/strapi/lib/commands/actions/telemetry/enable/action.js b/packages/core/strapi/lib/commands/actions/telemetry/enable/action.js index 09be27726e..044fd538fa 100644 --- a/packages/core/strapi/lib/commands/actions/telemetry/enable/action.js +++ b/packages/core/strapi/lib/commands/actions/telemetry/enable/action.js @@ -53,14 +53,19 @@ const generateNewPackageJSON = (packageObj) => { const sendEvent = async (uuid) => { try { + const event = 'didOptInTelemetry'; + await fetch('https://analytics.strapi.io/api/v2/track', { method: 'POST', body: JSON.stringify({ - event: 'didOptInTelemetry', + event, deviceId: machineID(), groupProperties: { projectId: uuid }, }), - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': event, + }, }); } catch (e) { // ... diff --git a/packages/core/strapi/lib/commands/actions/ts/generate-types/action.js b/packages/core/strapi/lib/commands/actions/ts/generate-types/action.js index d16fa5a71c..922254950f 100644 --- a/packages/core/strapi/lib/commands/actions/ts/generate-types/action.js +++ b/packages/core/strapi/lib/commands/actions/ts/generate-types/action.js @@ -4,22 +4,25 @@ const tsUtils = require('@strapi/typescript-utils'); const strapi = require('../../../../index'); -module.exports = async ({ outDir, file, verbose, silent }) => { - if (verbose && silent) { - console.error('You cannot enable verbose and silent flags at the same time, exiting...'); +module.exports = async ({ debug, silent, verbose, outDir }) => { + if ((debug || verbose) && silent) { + console.error('Flags conflict: both silent and debug mode are enabled, exiting...'); process.exit(1); } const appContext = await strapi.compile(); const app = await strapi(appContext).register(); - await tsUtils.generators.generateSchemasDefinitions({ + await tsUtils.generators.generate({ strapi: app, - outDir: outDir || appContext.appDir, - file, - dirs: appContext, - verbose, - silent, + pwd: appContext.appDir, + rootDir: outDir ?? undefined, + logger: { + silent, + // TODO V5: verbose is deprecated and should be removed + debug: debug || verbose, + }, + artifacts: { contentTypes: true, components: true }, }); app.destroy(); diff --git a/packages/core/strapi/lib/commands/actions/ts/generate-types/command.js b/packages/core/strapi/lib/commands/actions/ts/generate-types/command.js index 3a4c151a64..32384244e5 100644 --- a/packages/core/strapi/lib/commands/actions/ts/generate-types/command.js +++ b/packages/core/strapi/lib/commands/actions/ts/generate-types/command.js @@ -10,12 +10,12 @@ module.exports = ({ command }) => { command .command('ts:generate-types') .description(`Generate TypeScript typings for your schemas`) + .option('--verbose', `[DEPRECATED] The verbose option has been replaced by debug`, false) + .option('-d, --debug', `Run the generation with debug messages`, false) + .option('-s, --silent', `Run the generation silently, without any output`, false) .option( '-o, --out-dir ', - 'Specify a relative directory in which the schemas definitions will be generated' + 'Specify a relative root directory in which the definitions will be generated. Changing this value might break types exposed by Strapi that relies on generated types.' ) - .option('-f, --file ', 'Specify a filename to store the schemas definitions') - .option('--verbose', `Display more information about the types generation`, false) - .option('-s, --silent', `Run the generation silently, without any output`, false) .action(getLocalScript('ts/generate-types')); }; diff --git a/packages/core/strapi/lib/core-api/controller/index.d.ts b/packages/core/strapi/lib/core-api/controller/index.d.ts deleted file mode 100644 index 62ece69d2d..0000000000 --- a/packages/core/strapi/lib/core-api/controller/index.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Context, Next } from 'koa'; - -type ControllerResponse = T | Promise | undefined; - -interface Controller { - transformResponse(data: object, meta: object): object; - sanitizeOutput(data: object, ctx: Context): Promise; - sanitizeInput(data: object, ctx: Context): Promise; -} - -export interface SingleTypeController extends Controller { - find?(ctx: Context, next: Next): ControllerResponse; - update?(ctx: Context, next: Next): ControllerResponse; - delete?(ctx: Context, next: Next): ControllerResponse; -} - -export interface CollectionTypeController extends Controller { - find?(ctx: Context, next: Next): ControllerResponse; - findOne?(ctx: Context, next: Next): ControllerResponse; - create?(ctx: Context, next: Next): ControllerResponse; - update?(ctx: Context, next: Next): ControllerResponse; - delete?(ctx: Context, next: Next): ControllerResponse; -} - -export type GenericController = Partial & { - [method: string | number | symbol]: (ctx: Context) => unknown; -}; diff --git a/packages/core/strapi/lib/core-api/service/index.d.ts b/packages/core/strapi/lib/core-api/service/index.d.ts deleted file mode 100644 index a507857b71..0000000000 --- a/packages/core/strapi/lib/core-api/service/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -type Entity = object; - -interface BaseService { - getFetchParams?(params: object): object; -} - -export interface SingleTypeService extends BaseService { - find?(params: object): Promise | Entity; - createOrUpdate?(params: object): Promise | Entity; - delete?(params: object): Promise | Entity; -} - -export interface CollectionTypeService extends BaseService { - find?(params: object): Promise | Entity; - findOne?(entityId: string, params: object): Promise | Entity; - create?(params: object): Promise | Entity; - update?(entityId: string, params: object): Promise | Entity; - delete?(entityId: string, params: object): Promise | Entity; -} - -export type Service = SingleTypeService | CollectionTypeService; - -export type GenericService = Partial & { - [method: string | number | symbol]: (...args: any) => any; -}; diff --git a/packages/core/strapi/lib/core/registries/services.d.ts b/packages/core/strapi/lib/core/registries/services.d.ts deleted file mode 100644 index 7a172f927f..0000000000 --- a/packages/core/strapi/lib/core/registries/services.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Strapi } from '../../'; - -export type Service = { - [key: string]: (...args: any) => any; -}; - -export type ServiceFactory = ({ strapi: Strapi }) => Service; diff --git a/packages/core/strapi/lib/factories.d.ts b/packages/core/strapi/lib/factories.d.ts new file mode 100644 index 0000000000..55ca15111a --- /dev/null +++ b/packages/core/strapi/lib/factories.d.ts @@ -0,0 +1,21 @@ +import type { Common, CoreApi, Strapi } from '@strapi/strapi'; + +type WithStrapiCallback = (params: S) => T; + +export declare function createCoreRouter( + uid: T, + cfg?: CoreApi.Router.RouterConfig +): () => CoreApi.Router.Router; + +export declare function createCoreController< + T extends Common.UID.ContentType, + S extends Partial> +>( + uid: T, + config?: WithStrapiCallback | S +): () => Required>; + +export declare function createCoreService< + T extends Common.UID.ContentType, + S extends Partial> +>(uid: T, config?: WithStrapiCallback | S): () => Required>; diff --git a/packages/core/strapi/lib/global.d.ts b/packages/core/strapi/lib/global.d.ts index e85956ffa0..6f86cfd985 100644 --- a/packages/core/strapi/lib/global.d.ts +++ b/packages/core/strapi/lib/global.d.ts @@ -1,51 +1,7 @@ import type { Strapi as StrapiInterface } from './types/core'; -import type { - CollectionTypeSchema, - SingleTypeSchema, - ComponentSchema, - ContentTypeSchema, -} from './types/core/schemas'; -import type { KeysBy } from './types/utils'; declare global { namespace Strapi { - /** - * Map of UID / schemas used as a schemas database for other types. - * It must be extended by the user application or plugins. - * - * @example - * ```ts - * declare global { - * namespace Strapi { - * interface Schemas { - * 'xxx::xxx.uid: ContentTypeSchema | ComponentSchema; - * } - * } - * } - * ``` - */ - interface Schemas {} - - /** - * Literal union type of every content type registered in Strapi.Schemas - */ - type ContentTypeUIDs = KeysBy; - - /** - * Literal union type of every collection type registered in Strapi.Schemas - */ - type CollectionTypeUIDs = KeysBy; - - /** - * Literal union type of every single type registered in Strapi.Schemas - */ - type SingleTypeUIDs = KeysBy; - - /** - * Literal union type of every component registered in Strapi.Schemas - */ - type ComponentUIDs = KeysBy; - /** * Global shorthand to access the `StrapiInterface` type */ diff --git a/packages/core/strapi/lib/index.d.ts b/packages/core/strapi/lib/index.d.ts index 1f7f33cd14..9b0fecd589 100644 --- a/packages/core/strapi/lib/index.d.ts +++ b/packages/core/strapi/lib/index.d.ts @@ -1,5 +1,6 @@ import './global'; export * from './types'; +export * as factories from './factories'; -export default function (opts): Strapi; +export default function (opts): Strapi.Strapi; diff --git a/packages/core/strapi/lib/services/metrics/__tests__/index.test.js b/packages/core/strapi/lib/services/metrics/__tests__/index.test.js index 0438430f67..9a4fe878a0 100644 --- a/packages/core/strapi/lib/services/metrics/__tests__/index.test.js +++ b/packages/core/strapi/lib/services/metrics/__tests__/index.test.js @@ -119,6 +119,10 @@ describe('metrics', () => { projectId: 'test', }, }); + expect(fetch.mock.calls[0][1].headers).toMatchObject({ + 'Content-Type': 'application/json', + 'X-Strapi-Event': 'someEvent', + }); fetch.mockClear(); }); diff --git a/packages/core/strapi/lib/services/metrics/sender.js b/packages/core/strapi/lib/services/metrics/sender.js index 134f10c07d..a5123ff47e 100644 --- a/packages/core/strapi/lib/services/metrics/sender.js +++ b/packages/core/strapi/lib/services/metrics/sender.js @@ -77,7 +77,7 @@ module.exports = (strapi) => { ...payload.groupProperties, }, }), - ..._.merge({}, defaultQueryOpts, opts), + ..._.merge({ headers: { 'X-Strapi-Event': event } }, defaultQueryOpts, opts), }; try { diff --git a/packages/core/strapi/lib/services/server/register-routes.js b/packages/core/strapi/lib/services/server/register-routes.js index 1f55c1dd26..85aa7f4a7c 100644 --- a/packages/core/strapi/lib/services/server/register-routes.js +++ b/packages/core/strapi/lib/services/server/register-routes.js @@ -94,7 +94,7 @@ const registerAPIRoutes = (strapi) => { // TODO: remove once auth setup // pass meta down to compose endpoint router.type = 'content-api'; - router.routes.forEach((route) => { + router.routes?.forEach((route) => { generateRouteScope(route); route.info = { apiName }; }); diff --git a/packages/core/strapi/lib/types/core-api/controller.d.ts b/packages/core/strapi/lib/types/core-api/controller.d.ts new file mode 100644 index 0000000000..1687486095 --- /dev/null +++ b/packages/core/strapi/lib/types/core-api/controller.d.ts @@ -0,0 +1,52 @@ +import type { Common, CoreApi, Utils } from '@strapi/strapi'; +import type { ExtendableContext } from 'koa'; + +/** + * Base Core-API controller type + * + * TODO: Make use of the T generic to type the other methods based on the given content type + */ +export interface Base { + // TODO: Use actual entities instead of regular object + transformResponse(data: TData, meta: object): TResponse; + sanitizeOutput(data: TData, ctx: ExtendableContext): Promise; + sanitizeInput(data: TData, ctx: ExtendableContext): Promise; + sanitizeQuery(data: TData, ctx: ExtendableContext): Promise; +} + +/** + * Generic controller structure + */ +export type Generic = { + [name: string]: Common.ControllerHandler; +}; + +/** + * Core-API collection type controller + */ +export interface CollectionType extends Base { + find?: Common.ControllerHandler; + findOne?: Common.ControllerHandler; + create?: Common.ControllerHandler; + update?: Common.ControllerHandler; + delete?: Common.ControllerHandler; +} + +/** + * Core-API single type controller + */ +export interface SingleType extends Base { + find?: Common.ControllerHandler; + update?: Common.ControllerHandler; + delete?: Common.ControllerHandler; +} + +export type ContentType = Utils.Expression.MatchFirst< + [ + Utils.Expression.Test, CollectionType>, + Utils.Expression.Test, SingleType> + ], + Base +>; + +export type Extendable = ContentType & Generic; diff --git a/packages/core/strapi/lib/types/core-api/index.d.ts b/packages/core/strapi/lib/types/core-api/index.d.ts new file mode 100644 index 0000000000..5c5204e7bd --- /dev/null +++ b/packages/core/strapi/lib/types/core-api/index.d.ts @@ -0,0 +1,3 @@ +export * as Controller from './controller'; +export * as Service from './service'; +export * as Router from './router'; diff --git a/packages/core/strapi/lib/types/core-api/router.d.ts b/packages/core/strapi/lib/types/core-api/router.d.ts new file mode 100644 index 0000000000..f74cebdecb --- /dev/null +++ b/packages/core/strapi/lib/types/core-api/router.d.ts @@ -0,0 +1,68 @@ +import type { Common, Strapi, Utils } from '@strapi/strapi'; + +import { ExtendableContext } from 'koa'; +import { Middleware as KoaMiddleware } from 'koa'; + +export type MiddlewareFactory = (config: any, ctx: { strapi: Strapi }) => Middleware | null; + +export type Middleware = KoaMiddleware | MiddlewareFactory; + +export interface PolicyContext extends ExtendableContext { + type: string; +} + +export type PolicyImplementation = ( + ctx: PolicyContext, + cfg: TCfg, + { strapi }: { strapi: Strapi } +) => boolean | undefined; + +type HandlerConfig = { + auth?: false | { scope: string[] }; + policies?: Array; + middlewares?: Array; +}; + +export type Generic = { + [method: string | number | symbol]: HandlerConfig; +}; + +export interface SingleTypeRouterConfig extends Generic { + find?: HandlerConfig; + update?: HandlerConfig; + delete?: HandlerConfig; +} + +export interface CollectionTypeRouterConfig extends Generic { + find?: HandlerConfig; + findOne?: HandlerConfig; + create?: HandlerConfig; + update?: HandlerConfig; + delete?: HandlerConfig; +} + +export type RouterConfig = { + prefix?: string; + // TODO Refactor when we have a controller registry + only?: string[]; + except?: string[]; + config: Utils.Expression.MatchFirst< + [ + Utils.Expression.Test< + Common.UID.IsCollectionType, + CollectionTypeRouterConfig + >, + Utils.Expression.Test, SingleTypeRouterConfig> + ], + Generic + >; +}; + +export type Route = { + method: string; + path: string; +}; +export type Router = { + prefix: string; + routes: Route[]; +}; diff --git a/packages/core/strapi/lib/types/core-api/service.d.ts b/packages/core/strapi/lib/types/core-api/service.d.ts new file mode 100644 index 0000000000..3f502b192c --- /dev/null +++ b/packages/core/strapi/lib/types/core-api/service.d.ts @@ -0,0 +1,50 @@ +import type { Common, Utils } from '@strapi/strapi'; + +// TODO Use actual entities instead of regular object +type Entity = unknown; + +/** + * Base Core-API service type + */ +export interface Base { + getFetchParams?(params: object): object; +} + +/** + * Generic core api service structure + */ +export type Generic = { + [key: keyof any]: unknown; +}; + +/** + * Core-API collection type service + */ +export interface CollectionType extends Base { + find?(params: object): Promise | Entity[]; + findOne?(entityId: string, params: object): Promise | Entity; + create?(params: object): Promise | Entity; + update?(entityId: string, params: object): Promise | Entity; + delete?(entityId: string, params: object): Promise | Entity; +} + +/** + * Core-API single type service + */ +export interface SingleType extends Base { + find?(params: object): Promise | Entity; + createOrUpdate?(params: object): Promise | Entity; + delete?(params: object): Promise | Entity; +} + +export type ContentType = + Utils.Expression.MatchFirst< + [ + Utils.Expression.Test, CollectionType>, + Utils.Expression.Test, SingleType> + ], + Base + >; + +export type Extendable = + ContentType & Generic; diff --git a/packages/core/strapi/lib/types/core/attributes/base.d.ts b/packages/core/strapi/lib/types/core/attributes/base.d.ts index 860d12cad7..71e964fcb9 100644 --- a/packages/core/strapi/lib/types/core/attributes/base.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/base.d.ts @@ -1,9 +1,7 @@ -import { GetAttributeValue } from './utils'; - /** * List of all the Strapi attribute types */ -export type AttributeType = +export type Kind = | 'string' | 'text' | 'richtext' @@ -29,11 +27,11 @@ export type AttributeType = /** * Most basic shape of a schema attribute */ -export interface Attribute { +export interface Attribute { /** * Type of the attribute */ - type: T; + type: TKind; /** * Options defined and used by the plugins @@ -41,6 +39,11 @@ export interface Attribute { pluginOptions?: object; } +/** + * Creates a basic Attribute of type T + */ +export type OfType = Attribute; + // Common attributes Options export interface RequiredOption { diff --git a/packages/core/strapi/lib/types/core/attributes/biginteger.d.ts b/packages/core/strapi/lib/types/core/attributes/biginteger.d.ts index 963c45481f..f1848ab94a 100644 --- a/packages/core/strapi/lib/types/core/attributes/biginteger.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/biginteger.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type BigIntegerAttribute = Attribute<'biginteger'> & +export type BigInteger = Attribute.OfType<'biginteger'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type BigIntegerValue = string; -export type GetBigIntegerAttributeValue = T extends BigIntegerAttribute +export type GetBigIntegerValue = T extends BigInteger ? BigIntegerValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/boolean.d.ts b/packages/core/strapi/lib/types/core/attributes/boolean.d.ts index f58bd5cc8b..c83f0d4f27 100644 --- a/packages/core/strapi/lib/types/core/attributes/boolean.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/boolean.d.ts @@ -1,20 +1,14 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type BooleanAttribute = Attribute<'boolean'> & +export type Boolean = Attribute.OfType<'boolean'> & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type BooleanValue = boolean; -export type GetBooleanAttributeValue = T extends BooleanAttribute +export type GetBooleanValue = T extends Boolean ? BooleanValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/common.d.ts b/packages/core/strapi/lib/types/core/attributes/common.d.ts index b06dc04e75..39ab454cd9 100644 --- a/packages/core/strapi/lib/types/core/attributes/common.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/common.d.ts @@ -2,47 +2,73 @@ * Strapi custom scalar types */ -import { MinMaxLengthOption, MinMaxOption } from './base'; -import { StringAttribute } from './string'; - -export type JSON = T; - -export type Media = any; +import { Attribute, Common } from '@strapi/strapi'; /** * Setters for the attributes options */ // required -export type RequiredAttribute = { required: true }; -export type NonRequiredAttribute = { required: false }; +export type Required = { required: true }; +export type NonRequired = { required: false }; // private -export type PrivateAttribute = { private: true }; -export type NonPrivateAttribute = { private: false }; +export type Private = { private: true }; +export type NonPrivate = { private: false }; // unique -export type UniqueAttribute = { unique: true }; -export type NonUniqueAttribute = { unique: false }; +export type Unique = { unique: true }; +export type NonUnique = { unique: false }; // configurable -export type ConfigurableAttribute = { configurable: true }; -export type NonConfigurableAttribute = { configurable: false }; +export type Configurable = { configurable: true }; +export type NonConfigurable = { configurable: false }; // custom field -export type CustomField = { - customField: T; - options?: P; +export type CustomField = { + customField: TKind; + options?: TOptions; }; // min/max -export type SetMinMax, U = number> = T; +export type SetMinMax, TType = number> = TConfig; // minLength/maxLength -export type SetMinMaxLength = T; +export type SetMinMaxLength = TConfig; // pluginOptions -export type SetPluginOptions = { pluginOptions?: T }; +export type SetPluginOptions = { pluginOptions?: TConfig }; // default export type DefaultTo = { default: T }; + +// Any Attribute +export type Any = + | Attribute.BigInteger + | Attribute.Boolean + | Attribute.Component + | Attribute.DateTime + | Attribute.Date + | Attribute.Decimal + | Attribute.DynamicZone + | Attribute.Email + | Attribute.Enumeration + | Attribute.Float + | Attribute.Integer + | Attribute.JSON + | Attribute.Media + | Attribute.Password + | ( + | Attribute.Relation< + Common.UID.Schema, + Attribute.RelationKind.BiDirectional, + Common.UID.Schema + > + | Attribute.Relation + ) + | Attribute.RichText + | Attribute.String + | Attribute.Text + | Attribute.Time + | Attribute.Timestamp + | Attribute.UID; diff --git a/packages/core/strapi/lib/types/core/attributes/component.d.ts b/packages/core/strapi/lib/types/core/attributes/component.d.ts index 089b31f267..8fb759d849 100644 --- a/packages/core/strapi/lib/types/core/attributes/component.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/component.d.ts @@ -1,38 +1,33 @@ -import { Attribute, ConfigurableOption, MinMaxOption, PrivateOption, RequiredOption } from './base'; -import { GetAttributesValues } from './utils'; +import type { Common, Attribute, Utils } from '@strapi/strapi'; -export interface ComponentAttributeProperties< - // Targeted component - T extends Strapi.ComponentUIDs, - // Repeatable - R extends boolean = false +export interface ComponentProperties< + TComponentUID extends Common.UID.Component, + TRepeatable extends Utils.Expression.BooleanValue = Utils.Expression.False > { - component: T; - repeatable?: R; + component: TComponentUID; + repeatable?: TRepeatable; } -export type ComponentAttribute< - // Targeted component - T extends Strapi.ComponentUIDs, - // Repeatable - R extends boolean = false -> = Attribute<'component'> & +export type Component< + TComponentUID extends Common.UID.Component = Common.UID.Component, + TRepeatable extends Utils.Expression.BooleanValue = Utils.Expression.False +> = Attribute.OfType<'component'> & // Component Properties - ComponentAttributeProperties & + ComponentProperties & // Options - ConfigurableOption & - MinMaxOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.MinMaxOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type ComponentValue< - T extends Strapi.ComponentUIDs, - R extends boolean -> = GetAttributesValues extends infer V ? (R extends true ? V[] : V) : never; - -export type GetComponentAttributeValue = T extends ComponentAttribute< - infer U, - infer R -> - ? ComponentValue + TComponentUID extends Common.UID.Component, + TRepeatable extends Utils.Expression.BooleanValue +> = Attribute.GetValues extends infer TValues + ? Utils.Expression.If : never; + +export type GetComponentValue = + TAttribute extends Component + ? ComponentValue + : never; diff --git a/packages/core/strapi/lib/types/core/attributes/date-time.d.ts b/packages/core/strapi/lib/types/core/attributes/date-time.d.ts index 7a52d59f01..471e358d12 100644 --- a/packages/core/strapi/lib/types/core/attributes/date-time.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/date-time.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type DateTimeAttribute = Attribute<'datetime'> & +export type DateTime = Attribute.OfType<'datetime'> & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption & - UniqueOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption & + Attribute.UniqueOption; export type DateTimeValue = string; -export type GetDateTimeAttributeValue = T extends DateTimeAttribute +export type GetDateTimeValue = T extends DateTime ? DateTimeValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/date.d.ts b/packages/core/strapi/lib/types/core/attributes/date.d.ts index b7d8ac2c6c..937955fe0b 100644 --- a/packages/core/strapi/lib/types/core/attributes/date.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/date.d.ts @@ -1,22 +1,13 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type DateAttribute = Attribute<'date'> & +export type Date = Attribute.OfType<'date'> & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption & - UniqueOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption & + Attribute.UniqueOption; export type DateValue = Date; -export type GetDateAttributeValue = T extends DateAttribute - ? DateValue - : never; +export type GetDateValue = T extends Date ? DateValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/decimal.d.ts b/packages/core/strapi/lib/types/core/attributes/decimal.d.ts index 976ba22c82..02adc7d2de 100644 --- a/packages/core/strapi/lib/types/core/attributes/decimal.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/decimal.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type DecimalAttribute = Attribute<'decimal'> & +export type Decimal = Attribute.OfType<'decimal'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type DecimalValue = number; -export type GetDecimalAttributeValue = T extends DecimalAttribute +export type GetDecimalValue = T extends Decimal ? DecimalValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/dynamic-zone.d.ts b/packages/core/strapi/lib/types/core/attributes/dynamic-zone.d.ts index 582a37539e..0ade9cf48b 100644 --- a/packages/core/strapi/lib/types/core/attributes/dynamic-zone.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/dynamic-zone.d.ts @@ -1,29 +1,26 @@ -import { SchemaUID, GetArrayValues } from '../../utils'; -import { Attribute, ConfigurableOption, MinMaxOption, RequiredOption } from './base'; -import { GetAttributesValues } from './utils'; +import type { Utils, Attribute, Common } from '@strapi/strapi'; -export interface DynamicZoneAttributeProperties { - components: T; +export interface DynamicZoneProperties { + components: TComponentsUIDs; } -export type DynamicZoneAttribute = Attribute<'dynamiczone'> & - // Properties - DynamicZoneAttributeProperties & - // Options - ConfigurableOption & - MinMaxOption & - RequiredOption; +export type DynamicZone = + Attribute.OfType<'dynamiczone'> & + // Properties + DynamicZoneProperties & + // Options + Attribute.ConfigurableOption & + Attribute.MinMaxOption & + Attribute.RequiredOption; -type DynamicZoneValue = Array< - GetArrayValues extends infer P - ? P extends SchemaUID - ? GetAttributesValues

& { __component: P } +type DynamicZoneValue = Array< + // Extract tuple values to a component uid union type + Utils.Array.Values extends infer TComponentUID + ? TComponentUID extends Common.UID.Component + ? Attribute.GetValues & { __component: TComponentUID } : never : never >; -export type GetDynamicZoneAttributeValue = T extends DynamicZoneAttribute< - infer U -> - ? DynamicZoneValue - : never; +export type GetDynamicZoneValue = + TAttribute extends DynamicZone ? DynamicZoneValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/email.d.ts b/packages/core/strapi/lib/types/core/attributes/email.d.ts index 2c3881fae6..54710fb78b 100644 --- a/packages/core/strapi/lib/types/core/attributes/email.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/email.d.ts @@ -1,24 +1,14 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type EmailAttribute = Attribute<'email'> & +export type Email = Attribute.OfType<'email'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - RequiredOption & - UniqueOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.RequiredOption & + Attribute.UniqueOption; export type EmailValue = string; -export type GetEmailAttributeValue = T extends EmailAttribute - ? EmailValue - : never; +export type GetEmailValue = T extends Email ? EmailValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/enumeration.d.ts b/packages/core/strapi/lib/types/core/attributes/enumeration.d.ts index c7ab004f0c..bee4b3bafd 100644 --- a/packages/core/strapi/lib/types/core/attributes/enumeration.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/enumeration.d.ts @@ -1,28 +1,18 @@ -import { GetArrayValues } from '../../utils'; -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute, Utils } from '@strapi/strapi'; -export interface EnumerationAttributeProperties { - enum: T; +export interface EnumerationProperties { + enum: TValues; } -export type EnumerationAttribute = Attribute<'enumeration'> & - EnumerationAttributeProperties & +export type Enumeration = Attribute.OfType<'enumeration'> & + EnumerationProperties & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption; -export type EnumerationValue = GetArrayValues; +export type EnumerationValue = Utils.Array.Values; -export type GetEnumerationAttributeValue = T extends EnumerationAttribute< - infer U -> - ? EnumerationValue - : never; +export type GetEnumerationValue = + TAttribute extends Enumeration ? EnumerationValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/float.d.ts b/packages/core/strapi/lib/types/core/attributes/float.d.ts index 93a20eff7c..1207e4aeca 100644 --- a/packages/core/strapi/lib/types/core/attributes/float.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/float.d.ts @@ -1,22 +1,13 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type FloatAttribute = Attribute<'float'> & +export type Float = Attribute.OfType<'float'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type FloatValue = number; -export type GetFloatAttributeValue = T extends FloatAttribute - ? FloatValue - : never; +export type GetFloatValue = T extends Float ? FloatValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/integer.d.ts b/packages/core/strapi/lib/types/core/attributes/integer.d.ts index 860b34464f..afd76ae01f 100644 --- a/packages/core/strapi/lib/types/core/attributes/integer.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/integer.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type IntegerAttribute = Attribute<'integer'> & +export type Integer = Attribute.OfType<'integer'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type IntegerValue = number; -export type GetIntegerAttributeValue = T extends IntegerAttribute +export type GetIntegerValue = T extends Integer ? IntegerValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/json.d.ts b/packages/core/strapi/lib/types/core/attributes/json.d.ts index 36bbae56b4..4441416b5a 100644 --- a/packages/core/strapi/lib/types/core/attributes/json.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/json.d.ts @@ -1,14 +1,11 @@ -import { Attribute, ConfigurableOption, PrivateOption, RequiredOption } from './base'; -import { JSON } from './common'; +import type { Attribute } from '@strapi/strapi'; -export type JSONAttribute = Attribute<'json'> & - //Options - ConfigurableOption & - RequiredOption & - PrivateOption; +export type JSON = Attribute.OfType<'json'> & + // Options + Attribute.ConfigurableOption & + Attribute.RequiredOption & + Attribute.PrivateOption; -export type JsonValue = JSON; +export type JsonValue = T; -export type GetJsonAttributeValue = T extends JSONAttribute - ? JsonValue - : never; +export type GetJsonValue = T extends JSON ? JsonValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/media.d.ts b/packages/core/strapi/lib/types/core/attributes/media.d.ts index 5ea6e3bb36..ee91f22a2d 100644 --- a/packages/core/strapi/lib/types/core/attributes/media.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/media.d.ts @@ -1,36 +1,34 @@ -import { Attribute, ConfigurableOption, PrivateOption, RequiredOption } from './base'; -import { Media } from './common'; +import type { Attribute, Utils } from '@strapi/strapi'; -export type AllowedMediaTypes = 'images' | 'videos' | 'files' | 'audios'; +export type MediaKind = 'images' | 'videos' | 'files' | 'audios'; -export interface MediaAttributeProperties< - // Media Type - T extends AllowedMediaTypes = undefined, - // Multiple - U extends boolean = false +export interface MediaProperties< + TKind extends MediaKind | undefined = undefined, + TMultiple extends Utils.Expression.BooleanValue = Utils.Expression.False > { - allowedTypes?: T; - multiple?: U; + allowedTypes?: TKind; + multiple?: TMultiple; } -export type MediaAttribute< - // Media Type - T extends AllowedMediaTypes = undefined, - // Multiple - U extends boolean = false -> = Attribute<'media'> & +export type Media< + TKind extends MediaKind | undefined = undefined, + TMultiple extends Utils.Expression.BooleanValue = Utils.Expression.False +> = Attribute.OfType<'media'> & // Properties - MediaAttributeProperties & + MediaProperties & // Options - ConfigurableOption & - RequiredOption & - PrivateOption; + Attribute.ConfigurableOption & + Attribute.RequiredOption & + Attribute.PrivateOption; -export type MediaValue = T extends true ? Media[] : Media; +// TODO: Introduce a real type for the media values +export type MediaValue = + Utils.Expression.If; -export type GetMediaAttributeValue = T extends MediaAttribute< - infer _U, - infer S +export type GetMediaValue = TAttribute extends Media< + // Unused as long as the media value is any + infer _TKind, + infer TMultiple > - ? MediaValue + ? MediaValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/password.d.ts b/packages/core/strapi/lib/types/core/attributes/password.d.ts index c87d96bb6d..232268de9a 100644 --- a/packages/core/strapi/lib/types/core/attributes/password.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/password.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type PasswordAttribute = Attribute<'password'> & +export type Password = Attribute.OfType<'password'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type PasswordValue = string; -export type GetPasswordAttributeValue = T extends PasswordAttribute +export type GetPasswordValue = T extends Password ? PasswordValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/relation.d.ts b/packages/core/strapi/lib/types/core/attributes/relation.d.ts index 7b29901227..2a81d78381 100644 --- a/packages/core/strapi/lib/types/core/attributes/relation.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/relation.d.ts @@ -1,63 +1,111 @@ -import { SchemaUID } from '../../utils'; -import { Attribute, ConfigurableOption, PrivateOption } from './base'; -import { GetAttributesByType, GetAttributesValues } from './utils'; +import type { Attribute, Common, Utils } from '@strapi/strapi'; -export type BasicRelationsType = 'oneToOne' | 'oneToMany' | 'manyToOne' | 'manyToMany'; -export type PolymorphicRelationsType = 'morphToOne' | 'morphToMany' | 'morphOne' | 'morphMany'; -export type RelationsType = BasicRelationsType | PolymorphicRelationsType; - -export interface BasicRelationAttributeProperties< - S extends SchemaUID, - R extends RelationsType, - T extends SchemaUID -> { - relation: R; - target: T; - inversedBy?: RelationsKeysFromTo; - mappedBy?: RelationsKeysFromTo; -} - -export interface PolymorphicRelationAttributeProperties { - relation: R; -} - -export type RelationAttribute< - S extends SchemaUID, - R extends RelationsType, - T extends R extends PolymorphicRelationsType ? never : SchemaUID = never -> = Attribute<'relation'> & +export type Relation< + // TODO: TOrigin was originally needed to infer precise attribute literal types by doing a reverse lookup + // on TTarget -> TOrigin relations. Due to errors because of Attribute.Any [relation] very generic + // representation, type mismatches were encountered and mappedBy/inversedBy are now regular strings. + // It is kept to allow for future iterations without breaking the current type API + TOrigin extends Common.UID.Schema = Common.UID.Schema, + TRelationKind extends RelationKind.Any = RelationKind.Any, + TTarget extends Common.UID.Schema = never +> = Attribute.OfType<'relation'> & // Properties - (R extends BasicRelationsType - ? BasicRelationAttributeProperties - : PolymorphicRelationAttributeProperties) & + RelationProperties & // Options - ConfigurableOption & - PrivateOption; + Attribute.ConfigurableOption & + Attribute.PrivateOption; + +export type RelationProperties< + _TOrigin extends Common.UID.Schema, + TRelationKind extends RelationKind.Any, + TTarget extends Common.UID.Schema +> = Utils.Expression.MatchFirst< + [ + Utils.Expression.Test< + Utils.Expression.Extends, + { + relation: TRelationKind; + target: TTarget; + inversedBy?: string; + mappedBy?: string; + } + >, + Utils.Expression.Test< + Utils.Expression.Extends, + { relation: TRelationKind } + >, + Utils.Expression.Test< + Utils.Expression.Extends, + { + relation: TRelationKind; + target: TTarget; + morphBy?: Utils.Guard.Never< + Attribute.GetKeysByType, + string + >; + } + > + ] +>; export type RelationsKeysFromTo< - TTarget extends SchemaUID, - TSource extends SchemaUID -> = keyof PickRelationsFromTo; + TTarget extends Common.UID.Schema, + TOrigin extends Common.UID.Schema +> = keyof PickRelationsFromTo; export type PickRelationsFromTo< - TTarget extends SchemaUID, - TSource extends SchemaUID -> = GetAttributesByType; + TTarget extends Common.UID.Schema, + TOrigin extends Common.UID.Schema +> = Attribute.GetByType; export type RelationPluralityModifier< - TRelation extends RelationsType, - TValue extends Record -> = TRelation extends `${string}Many` ? TValue[] : TValue; + TRelationKind extends RelationKind.Any, + TValue +> = TRelationKind extends Utils.String.Suffix ? TValue[] : TValue; export type RelationValue< - TRelation extends RelationsType, - TTarget extends SchemaUID -> = RelationPluralityModifier>; + TRelationKind extends RelationKind.Any, + TTarget extends Common.UID.Schema +> = RelationPluralityModifier>; -export type GetRelationAttributeValue = T extends RelationAttribute< - infer _TSource, - infer TRelation, +export type GetRelationValue = TAttribute extends Relation< + infer _TOrigin, + infer TRelationKind, infer TTarget > - ? RelationValue + ? RelationValue : never; + +export module RelationKind { + type GetOppositePlurality = { + one: 'many'; + One: 'Many'; + many: 'one'; + Many: 'One'; + }[TPlurality]; + + export type Plurality = 'one' | 'many'; + + export type Left = Lowercase; + export type Right = Capitalize; + + export type MorphOwner = `morphTo${RelationKind.Right}`; + export type MorphReference = `morph${RelationKind.Right}`; + export type Morph = RelationKind.MorphOwner | RelationKind.MorphReference; + + export type XWay = `${RelationKind.Left}Way`; + + export type BiDirectional = `${RelationKind.Left}To${RelationKind.Right}`; + export type UniDirectional = RelationKind.Morph | RelationKind.XWay; + + export type Any = RelationKind.BiDirectional | RelationKind.UniDirectional; + + export type Reverse = + TRelationKind extends `${infer TLeft extends RelationKind.Left}To${infer TRight extends RelationKind.Right}` + ? Utils.Expression.If< + Utils.Expression.Extends, Uppercase>, + TRelationKind, + `${GetOppositePlurality}To${GetOppositePlurality}` + > + : TRelationKind; +} diff --git a/packages/core/strapi/lib/types/core/attributes/richtext.d.ts b/packages/core/strapi/lib/types/core/attributes/richtext.d.ts index 89a6251413..92ac062121 100644 --- a/packages/core/strapi/lib/types/core/attributes/richtext.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/richtext.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type RichTextAttribute = Attribute<'richtext'> & +export type RichText = Attribute.OfType<'richtext'> & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.RequiredOption; export type RichTextValue = string; -export type GetRichTextAttributeValue = T extends RichTextAttribute +export type GetRichTextValue = T extends RichText ? RichTextValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/string.d.ts b/packages/core/strapi/lib/types/core/attributes/string.d.ts index 4bfd9684f3..488e4b7f27 100644 --- a/packages/core/strapi/lib/types/core/attributes/string.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/string.d.ts @@ -1,30 +1,20 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export interface StringAttributeProperties { +export interface StringProperties { regex?: RegExp; } -export type StringAttribute = Attribute<'string'> & +export type String = Attribute.OfType<'string'> & // Properties - StringAttributeProperties & + StringProperties & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - UniqueOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.UniqueOption & + Attribute.RequiredOption; export type StringValue = string; -export type GetStringAttributeValue = T extends StringAttribute - ? StringValue - : never; +export type GetStringValue = T extends String ? StringValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/text.d.ts b/packages/core/strapi/lib/types/core/attributes/text.d.ts index 579fb1431d..41aa0c982f 100644 --- a/packages/core/strapi/lib/types/core/attributes/text.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/text.d.ts @@ -1,30 +1,20 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export interface TextAttributeProperties { +export interface TextProperties { regex?: RegExp; } -export type TextAttribute = Attribute<'text'> & +export type Text = Attribute.OfType<'text'> & // Properties - TextAttributeProperties & + TextProperties & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - UniqueOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.UniqueOption & + Attribute.RequiredOption; export type TextValue = string; -export type GetTextAttributeValue = T extends TextAttribute - ? TextValue - : never; +export type GetTextValue = T extends Text ? TextValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/time.d.ts b/packages/core/strapi/lib/types/core/attributes/time.d.ts index 26dc0046a6..f38ddcb623 100644 --- a/packages/core/strapi/lib/types/core/attributes/time.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/time.d.ts @@ -1,22 +1,13 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type TimeAttribute = Attribute<'time'> & +export type Time = Attribute.OfType<'time'> & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption & - UniqueOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption & + Attribute.UniqueOption; export type TimeValue = string; -export type GetTimeAttributeValue = T extends TimeAttribute - ? TimeValue - : never; +export type GetTimeValue = T extends Time ? TimeValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/timestamp.d.ts b/packages/core/strapi/lib/types/core/attributes/timestamp.d.ts index c632d11a0b..9d37223115 100644 --- a/packages/core/strapi/lib/types/core/attributes/timestamp.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/timestamp.d.ts @@ -1,22 +1,15 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - PrivateOption, - RequiredOption, - UniqueOption, -} from './base'; +import type { Attribute } from '@strapi/strapi'; -export type TimestampAttribute = Attribute<'timestamp'> & +export type Timestamp = Attribute.OfType<'timestamp'> & // Options - ConfigurableOption & - DefaultOption & - PrivateOption & - RequiredOption & - UniqueOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.PrivateOption & + Attribute.RequiredOption & + Attribute.UniqueOption; export type TimestampValue = string; -export type GetTimestampAttributeValue = T extends TimestampAttribute +export type GetTimestampValue = T extends Timestamp ? TimestampValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/uid.d.ts b/packages/core/strapi/lib/types/core/attributes/uid.d.ts index f620940290..8b962e9da7 100644 --- a/packages/core/strapi/lib/types/core/attributes/uid.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/uid.d.ts @@ -1,15 +1,6 @@ -import { - Attribute, - ConfigurableOption, - DefaultOption, - MinMaxLengthOption, - PrivateOption, - RequiredOption, -} from './base'; -import { SchemaUID } from '../../utils'; -import { GetAttributesKeysByType } from './utils'; +import type { Attribute, Common, Utils } from '@strapi/strapi'; -export interface UIDAttributeOptions { +export interface UIDOptions { separator?: string; lowercase?: boolean; decamelize?: boolean; @@ -17,41 +8,46 @@ export interface UIDAttributeOptions { preserveLeadingUnderscore?: boolean; } -export interface UIDAttributeProperties< - // Own Schema Reference - T extends SchemaUID | undefined = undefined, - // Target attribute - U extends T extends SchemaUID - ? GetAttributesKeysByType - : undefined = undefined, - // UID options - S extends UIDAttributeOptions = UIDAttributeOptions +export interface UIDProperties< + TOrigin extends Common.UID.Schema, + TTargetAttribute extends AllowedTargetAttributes, + TOptions extends UIDOptions = UIDOptions > { - targetField?: U; - options?: UIDAttributeOptions & S; + targetField: TTargetAttribute; + options: UIDOptions & TOptions; } -export type UIDAttribute< - // Own Schema Reference - T extends SchemaUID | undefined = undefined, - // Target attribute - U extends T extends SchemaUID - ? GetAttributesKeysByType - : undefined = undefined, - // UID options - S extends UIDAttributeOptions = UIDAttributeOptions -> = Attribute<'uid'> & +export interface GenericUIDProperties { + targetField?: string; + options: TOptions & UIDOptions; +} + +export type UID< + TOrigin extends Common.UID.Schema | undefined = undefined, + TTargetAttribute extends AllowedTargetAttributes = AllowedTargetAttributes, + TOptions extends UIDOptions = UIDOptions +> = Attribute.OfType<'uid'> & // Properties - UIDAttributeProperties & + (TOrigin extends Common.UID.Schema + ? UIDProperties + : GenericUIDProperties) & // Options - ConfigurableOption & - DefaultOption & - MinMaxLengthOption & - PrivateOption & - RequiredOption; + Attribute.ConfigurableOption & + Attribute.DefaultOption & + Attribute.MinMaxLengthOption & + Attribute.PrivateOption & + Attribute.RequiredOption; + +type AllowedTargetAttributes = + TOrigin extends Common.UID.Schema + ? Utils.Guard.Never, string> + : never; export type UIDValue = string; -export type GetUIDAttributeValue = T extends UIDAttribute +export type GetUIDValue = TAttribute extends UID< + infer _TOrigin, + infer _TTargetAttribute +> ? UIDValue : never; diff --git a/packages/core/strapi/lib/types/core/attributes/utils.d.ts b/packages/core/strapi/lib/types/core/attributes/utils.d.ts index 9c76a28f15..b8d5925ad1 100644 --- a/packages/core/strapi/lib/types/core/attributes/utils.d.ts +++ b/packages/core/strapi/lib/types/core/attributes/utils.d.ts @@ -1,98 +1,88 @@ -import { Get, KeysBy, NeverGuard, PickBy, SchemaUID } from '../../utils'; -import { - Attribute, - AttributeType, - GetBigIntegerAttributeValue, - GetBooleanAttributeValue, - GetDecimalAttributeValue, - GetDynamicZoneAttributeValue, - GetEnumerationAttributeValue, - GetFloatAttributeValue, - GetIntegerAttributeValue, - GetJsonAttributeValue, - GetMediaAttributeValue, - GetPasswordAttributeValue, - GetRelationAttributeValue, - GetRichTextAttributeValue, - GetStringAttributeValue, - GetTextAttributeValue, - GetUIDAttributeValue, - GetComponentAttributeValue, - GetEmailAttributeValue, -} from '.'; -import { GetDateAttributeValue } from './date'; -import { GetDateTimeAttributeValue } from './date-time'; -import { GetTimeAttributeValue } from './time'; -import { GetTimestampAttributeValue } from './timestamp'; +import type { Attribute, Common, Utils } from '@strapi/strapi'; -export type PickTypes = T; - -export type GetAttributesKeysByType< - T extends SchemaUID, - U extends AttributeType, - P = never -> = KeysBy, Attribute & NeverGuard>; - -export type GetAttributesByType = PickBy< - GetAttributes, - Attribute & NeverGuard +export type GetKeysByType< + TSchemaUID extends Common.UID.Schema, + TKind extends Attribute.Kind, + TCondition = never +> = Utils.Object.KeysBy< + GetAll, + Attribute.OfType & Utils.Guard.Never >; -export type GetAttribute> = Get< - GetAttributes, - U +export type GetByType< + TSchemaUID extends Common.UID.Schema, + TKind extends Attribute.Kind, + TCondition = never +> = Utils.Object.PickBy< + GetAll, + Attribute.OfType & Utils.Guard.Never >; -export type GetAttributes = Get; +export type Get> = Utils.Get< + GetAll, + TKey +>; -export type GetAttributesKey = keyof GetAttributes; +export type GetAll = Utils.Get< + Common.Schemas[TSchemaUID], + 'attributes' +>; -export type GetAttributeValue = - | GetBigIntegerAttributeValue - | GetBooleanAttributeValue - | GetComponentAttributeValue - | GetDecimalAttributeValue - | GetDynamicZoneAttributeValue - | GetEnumerationAttributeValue - | GetEmailAttributeValue - | GetFloatAttributeValue - | GetIntegerAttributeValue - | GetJsonAttributeValue - | GetMediaAttributeValue - | GetPasswordAttributeValue - | GetRelationAttributeValue - | GetRichTextAttributeValue - | GetStringAttributeValue - | GetTextAttributeValue - | GetUIDAttributeValue - | GetMediaAttributeValue - | GetDateAttributeValue - | GetDateTimeAttributeValue - | GetTimeAttributeValue - | GetTimestampAttributeValue; +export type GetKeys = keyof GetAll; -export type GetAttributeValueByKey< - T extends SchemaUID, - U extends GetAttributesKey -> = GetAttribute extends infer P - ? P extends Attribute - ? GetAttributeValue

- : never +export type GetValue = + | Attribute.GetBigIntegerValue + | Attribute.GetBooleanValue + | Attribute.GetComponentValue + | Attribute.GetDecimalValue + | Attribute.GetDynamicZoneValue + | Attribute.GetEnumerationValue + | Attribute.GetEmailValue + | Attribute.GetFloatValue + | Attribute.GetIntegerValue + | Attribute.GetJsonValue + | Attribute.GetMediaValue + | Attribute.GetPasswordValue + | Attribute.GetRelationValue + | Attribute.GetRichTextValue + | Attribute.GetStringValue + | Attribute.GetTextValue + | Attribute.GetUIDValue + | Attribute.GetDateValue + | Attribute.GetDateTimeValue + | Attribute.GetTimeValue + | Attribute.GetTimestampValue; + +export type GetValueByKey< + TSchemaUID extends Common.UID.Schema, + TKey extends GetKeys +> = Get extends infer TAttribute extends Attribute.Attribute + ? GetValue : never; -export type GetAttributesValues = { +export type GetValues< + TSchemaUID extends Common.UID.Schema, + TKey extends GetKeys = GetKeys +> = { // Handle required attributes - [key in GetAttributesRequiredKeys]-?: GetAttributeValueByKey; + [key in GetRequiredKeys as key extends TKey ? key : never]-?: GetValueByKey< + TSchemaUID, + key + >; } & { // Handle optional attributes - [key in GetAttributesOptionalKeys]?: GetAttributeValueByKey; + [key in GetOptionalKeys as key extends TKey ? key : never]?: GetValueByKey< + TSchemaUID, + key + >; }; -export type GetAttributesRequiredKeys = KeysBy< - GetAttributes, +export type GetRequiredKeys = Utils.Object.KeysBy< + GetAll, { required: true } >; -export type GetAttributesOptionalKeys = keyof Omit< - GetAttributes, - GetAttributesRequiredKeys + +export type GetOptionalKeys = keyof Omit< + GetAll, + GetRequiredKeys >; diff --git a/packages/core/strapi/lib/types/core/common/controller.d.ts b/packages/core/strapi/lib/types/core/common/controller.d.ts new file mode 100644 index 0000000000..463f570c40 --- /dev/null +++ b/packages/core/strapi/lib/types/core/common/controller.d.ts @@ -0,0 +1,8 @@ +import type { ExtendableContext, Next } from 'koa'; + +export type ControllerHandler = ( + context: ExtendableContext, + next: Next +) => Promise | TResponse | void; + +export type Controller = Record; diff --git a/packages/core/strapi/lib/types/core/common/index.d.ts b/packages/core/strapi/lib/types/core/common/index.d.ts new file mode 100644 index 0000000000..a7427bd521 --- /dev/null +++ b/packages/core/strapi/lib/types/core/common/index.d.ts @@ -0,0 +1,4 @@ +export * from './controller'; +export * from './service'; +export * from './schema'; +export * as UID from './uid'; diff --git a/packages/core/strapi/lib/types/core/common/schema.d.ts b/packages/core/strapi/lib/types/core/common/schema.d.ts new file mode 100644 index 0000000000..03ac86f9ea --- /dev/null +++ b/packages/core/strapi/lib/types/core/common/schema.d.ts @@ -0,0 +1,3 @@ +import type { Shared } from '@strapi/strapi'; + +export type Schemas = Shared.ContentTypes & Shared.Components; diff --git a/packages/core/strapi/lib/types/core/common/service.d.ts b/packages/core/strapi/lib/types/core/common/service.d.ts new file mode 100644 index 0000000000..2fafcf64e2 --- /dev/null +++ b/packages/core/strapi/lib/types/core/common/service.d.ts @@ -0,0 +1,5 @@ +export type Service = { + // TODO [V5] Consider changing the any value to unknown. + // See: https://github.com/strapi/strapi/issues/16993 and https://github.com/strapi/strapi/pull/17020 for further information + [key: keyof any]: any; +}; diff --git a/packages/core/strapi/lib/types/core/common/uid.d.ts b/packages/core/strapi/lib/types/core/common/uid.d.ts new file mode 100644 index 0000000000..51ae5f9158 --- /dev/null +++ b/packages/core/strapi/lib/types/core/common/uid.d.ts @@ -0,0 +1,62 @@ +import type { + Shared, + Schema as SchemaNamespace, + Common, + Registry, + UID, + Utils, +} from '@strapi/strapi'; + +export type Service = Registry.Keys; + +export type Controller = Registry.Keys; + +export type Policy = Registry.Keys; + +export type Middleware = Registry.Keys; + +export type ContentType = Registry.Keys; + +export type CollectionType = Utils.Guard.Never< + // extract uids only for collection types + Extract, ContentType>, + // if no collection type is found (never), fallback to a generic content type uid + ContentType +>; + +export type SingleType = Utils.Guard.Never< + // extract uids only for single types + Extract, ContentType>, + // if no single type is found (never), fallback to a generic content type uid + ContentType +>; + +export type Component = Registry.Keys; +export type ComponentCategory = Component extends UID.Component + ? TCategory + : never; + +export type Schema = Registry.Keys< + Common.Schemas, + UID.ContentType | UID.Component +>; + +export type IsCollectionType = Utils.Expression.Extends< + Shared.ContentTypes[TContentTypeUID], + SchemaNamespace.CollectionType +>; + +export type IsSingleType = Utils.Expression.Extends< + Shared.ContentTypes[TContentTypeUID], + SchemaNamespace.SingleType +>; + +export type IsComponent = Utils.Expression.Extends< + Shared.Components[TComponentUID], + SchemaNamespace.Component +>; + +export type IsContentType = Utils.Expression.Or< + IsCollectionType, + IsSingleType +>; diff --git a/packages/core/strapi/lib/types/core/index.d.ts b/packages/core/strapi/lib/types/core/index.d.ts index e9c0460970..9b5322ad44 100644 --- a/packages/core/strapi/lib/types/core/index.d.ts +++ b/packages/core/strapi/lib/types/core/index.d.ts @@ -1,3 +1,8 @@ -export * from './attributes'; -export * from './schemas'; +export * as Attribute from './attributes'; +export * as Schema from './schemas'; export * from './strapi'; + +export * as Common from './common'; +export * as Namespace from './namespace'; +export * as UID from './uid'; +export * as Registry from './registry'; diff --git a/packages/core/strapi/lib/types/core/namespace.d.ts b/packages/core/strapi/lib/types/core/namespace.d.ts new file mode 100644 index 0000000000..638b5713ee --- /dev/null +++ b/packages/core/strapi/lib/types/core/namespace.d.ts @@ -0,0 +1,99 @@ +import type * as Utils from '../utils'; + +/** + * Namespace for admin resources + */ +export type Admin = 'admin'; + +/** + * Namespace for strapi internal resources + */ +export type Strapi = 'strapi'; + +/** + * Namespace for scoped APIs resources + */ +export type API = `api${ColonsSeparator}${T}`; + +/** + * Namespace for scoped plugins resources + */ +export type Plugin = `plugin${ColonsSeparator}${T}`; + +/** + * Namespace for global resources + */ +export type Global = 'global'; + +/** + * Represents any namespace + */ +export type Any = API | Plugin | Admin | Strapi | Global; + +/** + * Return a {@link Separator} based on the given {@link Any} ({@link DotSeparator} for {@link Scoped} and {@link ColonsSeparator} for regular ones) + * + * @example + * type S = GetSeparator + * // ^ '::' + * + * type S = GetSeparator + * // ^ '.' + * + * type S = GetSeparator + * // ^ '.' | '::' + */ +export type GetSeparator = TNamespace extends Scoped + ? // 'api::foo' | 'plugin::bar' => '.' + DotSeparator + : // 'admin' | 'strapi' | 'global' => '::' + ColonsSeparator; + +/** + * Adds the corresponding separator (using {@link GetSeparator}) at the end of a namespace + * + * Warning: Using WithSeparator with a union type might produce undesired results as it'll distribute every matching suffix to every union member + * + * @example + * type T = WithSeparator + * // ^ 'admin::' + * + * type T = WithSeparator + * // ^ 'api::{string}.' + * + * type T = WithSeparator + * // ^ 'admin::' | 'admin.' | 'api::{string}.' | 'api::{string}::' + * + * type T = WithSeparator | WithSeparator + * // ^ 'admin::' | 'api::{string}.' + */ +export type WithSeparator = Utils.String.Suffix< + TNamespace, + GetSeparator +>; + +/** + * Represents namespaces composed of an origin and a scope, separated by colons + */ +export type Scoped = Any & + `${TOrigin}${ColonsSeparator}${TScope}`; + +/** + * Extract the scope from the given scoped namespace + */ +export type ExtractScope = + TNamespace extends `${string}${ColonsSeparator}${infer TScope}` ? TScope : never; + +/** + * Extract the origin from the given scoped namespace + */ +export type ExtractOrigin = + TNamespace extends `${infer TOrigin}${ColonsSeparator}${string}` ? TOrigin : never; + +/** + * Separators used to join the different parts of a namespace (e.g. building a uid) + */ +export type Separator = ColonsSeparator | DotSeparator; + +type ColonsSeparator = '::'; +type DotSeparator = '.'; diff --git a/packages/core/strapi/lib/types/core/registry.d.ts b/packages/core/strapi/lib/types/core/registry.d.ts new file mode 100644 index 0000000000..fbc068564c --- /dev/null +++ b/packages/core/strapi/lib/types/core/registry.d.ts @@ -0,0 +1,68 @@ +import type * as UID from './uid'; + +/** + * Extract valid keys from a given registry. + * + * It looks for {@link UID.Any} by default but the search can be narrowed to any UID subset using the `TUidFormat` generic. + * + * @example + * interface Registry { + * 'foo': unknown; + * 'default.foo': 'unknown'; + * 'global::foo': unknown; + * 'api::foo.bar': unknown; + * } + * + * type T = Keys; + * // ^ 'default.foo' | 'global::foo' | 'api::foo.bar' + * type T = Keys; + * // ^ 'global::foo' | 'api::foo.bar' + * type T = Keys + * // ^ 'api::foo.bar' + */ +export type Keys = Extract< + keyof TRegistry, + TUidFormat +>; + +/** + * Performs a `TQuery` filtering operation on the given `TRegistry` registry. + * + * `TQuery` needs to be a partial representation of a {@link UID.Parsed} + * + * Note: For additional filtering, the registry keys' type can be passed as the third parameter. + * + * @example + * interface Registry { + * 'admin::foo': unknown; + * 'admin::bar': unknown; + * 'api::foo.bar': unknown; + * 'api::foo.baz': unknown; + * 'api::bar.foo': unknown; + * 'plugin::foo.bar': unknown; + * } + * + * type T = keyof WhereKeys; + * // ^ "api::foo.bar" | "api::foo.baz" | "api::bar.foo" + * + * type T = keyof WhereKeys; + * // ^ "admin::bar" | "api::foo.bar" | "plugin::foo.bar" + * + * type T = keyof WhereKeys; + * // ^ "api::foo.bar" | "api::foo.baz" | "api::bar.foo" | 'plugin::foo.bar" + * + * type T = keyof WhereKeys; + * // ^ "plugin::foo.bar" | "admin::foo" | "admin::bar" + * + * type T = keyof WhereKeys }>; + * // ^ "api::foo.bar" | "api::foo.baz" + */ +export type WhereKeys< + TRegistry, + TQuery extends Partial, + TUidFormat extends UID.Any = UID.Any +> = { + [uid in Keys as UID.Parse extends TQuery + ? uid + : never]: TRegistry[uid]; +}; diff --git a/packages/core/strapi/lib/types/core/schemas/index.d.ts b/packages/core/strapi/lib/types/core/schemas/index.d.ts index 6fadf21e4a..8e24b09065 100644 --- a/packages/core/strapi/lib/types/core/schemas/index.d.ts +++ b/packages/core/strapi/lib/types/core/schemas/index.d.ts @@ -1,5 +1,4 @@ -import { Attribute, ComponentAttribute } from '../attributes'; -import { KeysBy, SchemaUID, StringRecord } from '../../utils'; +import type { Attribute, Utils, Common } from '@strapi/strapi'; /** * Literal union type representing the possible natures of a content type @@ -9,7 +8,7 @@ export type ContentTypeKind = 'singleType' | 'collectionType'; /** * Literal union type representing the possible types of a model */ -export type SchemaModelType = 'contentType' | 'component'; +export type ModelType = 'contentType' | 'component'; /** * Data structure that can either represent a content type or a component @@ -18,17 +17,17 @@ export interface Schema { /** * The type of the model. Useful to discriminate content-types from component */ - modelType: SchemaModelType; + modelType: ModelType; /** * Informations about schema naming and display */ - info: SchemaInfo; + info: Info; /** * Map of all the attributes with their name and definition */ - attributes: SchemaAttributes; + attributes: Attributes; /** * Options declared and read by the plugins @@ -38,7 +37,7 @@ export interface Schema { /** * Options object dedicated to Strapi core features */ - options?: SchemaOptions; + options?: Options; /** * Custom table name for the schema @@ -49,7 +48,7 @@ export interface Schema { /** * Data structure containing naming and display information for a Schema */ -export interface SchemaInfo { +export interface Info { /** * Default name to use in the admin panel */ @@ -79,12 +78,14 @@ export interface SchemaInfo { /** * Low level data structure referencing every schema attribute and its name */ -export interface SchemaAttributes extends StringRecord {} +export interface Attributes { + [key: string]: Attribute.Any; +} /** * Structure containing every core schema options and their associated value */ -export interface SchemaOptions { +export interface Options { draftAndPublish?: boolean; populateCreatorFields?: boolean; comment?: string; @@ -95,13 +96,13 @@ export interface PluginOptions {} /** * Schema for a content type */ -export interface ContentTypeSchema extends Schema { +export interface ContentType extends Schema { modelType: 'contentType'; /** * Unique identifier of the schema */ - uid: SchemaUID; + uid: Common.UID.ContentType; /** * Determine the type of the content type (single-type or collection-type) @@ -112,20 +113,20 @@ export interface ContentTypeSchema extends Schema { /** * Schema for a collection type */ -export interface CollectionTypeSchema extends ContentTypeSchema { +export interface CollectionType extends ContentType { kind: 'collectionType'; } /** * Schema for a single type */ -export interface SingleTypeSchema extends ContentTypeSchema { +export interface SingleType extends ContentType { kind: 'singleType'; } /** * Schema for a component */ -export interface ComponentSchema extends Schema { +export interface Component extends Schema { modelType: 'component'; } diff --git a/packages/core/strapi/lib/types/core/strapi/index.d.ts b/packages/core/strapi/lib/types/core/strapi/index.d.ts index 94fdff73b8..88e0a5c5f9 100644 --- a/packages/core/strapi/lib/types/core/strapi/index.d.ts +++ b/packages/core/strapi/lib/types/core/strapi/index.d.ts @@ -1,9 +1,5 @@ -import type Koa from 'koa'; -import { Database } from '@strapi/database'; - -import type { StringMap } from './utils'; -import type { GenericController } from '../../../core-api/controller'; -import type { GenericService } from '../../../core-api/service'; +import type { Database } from '@strapi/database'; +import type { Shared, Common } from '@strapi/strapi'; // TODO move custom fields types to a separate file interface CustomFieldServerOptions { @@ -69,24 +65,26 @@ export interface Strapi { * * It returns all the registered services */ - readonly services: StringMap; + readonly services: Shared.Services; /** * Find a service using its unique identifier */ - service(uid: string): T | undefined; + service(uid: string): TService | undefined; /** * Getter for the Strapi controllers container * * It returns all the registered controllers */ - readonly controllers: StringMap; + readonly controllers: Shared.Controllers; /** * Find a controller using its unique identifier */ - controller(uid: string): GenericController | undefined; + controller( + uid: TContentTypeUID + ): Shared.Controllers[TContentTypeUID]; /** * Getter for the Strapi content types container diff --git a/packages/core/strapi/lib/types/core/uid.d.ts b/packages/core/strapi/lib/types/core/uid.d.ts new file mode 100644 index 0000000000..3e32520e92 --- /dev/null +++ b/packages/core/strapi/lib/types/core/uid.d.ts @@ -0,0 +1,167 @@ +import type * as Namespace from './namespace'; +import type * as Utils from '../utils'; + +type StringSuffix = Utils.String.Suffix; + +/** + * Template for services' unique identifier + */ +export type Service = StringSuffix< + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator +>; + +/** + * Template for controllers' unique identifier + */ +export type Controller = StringSuffix< + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator +>; + +/** + * Template for policies' unique identifier + */ +export type Policy = StringSuffix< + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator +>; + +/** + * Template for middlewares' unique identifier + */ +export type Middleware = StringSuffix< + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator +>; + +/** + * Template for content-types' unique identifier + */ +export type ContentType = StringSuffix< + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator + | Namespace.WithSeparator +>; + +/** + * Template for components' unique identifier + * + * @example + * 'default.foo' extends Component => true (T = 'default', N = 'foo') + * + * @example + * // /!\ Warning: Can cause overlap with other UID formats: + * // 'api::foo.bar' both extends ContentType and Component + * 'api::foo.bar' extends ContentType => true (N = 'api', S='::', T='foo') + * 'api::foo.bar' extends Component => true (T = 'api::foo', N = 'bar') + */ +export type Component< + TCategory extends string = string, + TName extends string = string +> = `${TCategory}.${TName}`; + +/** + * Represents any UID + */ +export type Any = Service | Controller | Policy | Middleware | ContentType | Component; + +/** + * Type representation of every UID component. + * + * The separator type is automatically inferred from the given namespace + */ +export interface Parsed< + TNamespace extends Namespace.Any = Namespace.Any, + TName extends string = string +> { + raw: `${TNamespace}${Namespace.GetSeparator}${TName}`; + namespace: TNamespace; + origin: TNamespace extends Namespace.Scoped ? Namespace.ExtractOrigin : TNamespace; + scope: TNamespace extends Namespace.Scoped ? Namespace.ExtractScope : never; + separator: Namespace.GetSeparator; + name: TName; +} + +/** + * Parse a UID literal and returns a {@link Parsed} type. + * + * Warning: Using ParseUID with a union type might produce undesired results as it'll distribute every matching namespace parsing to every union member + * + * @example + * type T = Parse<'admin::foo'> + * // ^ { namespace: 'admin'; separator: '::'; name: 'foo'; } + * + * type T = Parse<'api::foo.bar'> + * // ^ { namespace: 'api::foo'; separator: '.'; name: 'bar'; } + * + * type T = Parse<'admin::foo' | 'api::foo.bar'> + * // ^ { namespace: 'admin' | 'api::foo' ; separator: '.' | '::'; name: 'foo' | 'bar' | 'foo.bar'; } + */ +export type Parse = + ExtractNamespace extends infer TExtractedNamespace extends Namespace.Any + ? Namespace.GetSeparator extends infer TSeparator extends Namespace.Separator + ? TUid extends `${infer TInferredNamespace extends TExtractedNamespace}${TSeparator}${infer TName extends string}` + ? Parsed + : never + : never + : never; + +/** + * Determines if the UID's namespace matches the given one. + * + * It returns TNamespace (the {@link Namespace.Any} literal) if there is a match, never otherwise. + * + * @example + * type T = EnsureNamespaceMatches<'admin::foo', Namespace.Admin> + * // ^ Namespace.Admin + * @example + * type T = EnsureNamespaceMatches<'foo.bar', Namespace.API> + * // ^ never + * @example + * type T = EnsureNamespaceMatches<'api::foo.bar', Namespace.Plugin> + * // ^ never + */ +export type EnsureNamespaceMatches< + TUid extends Any, + TNamespace extends Namespace.Any +> = TUid extends StringSuffix> ? TNamespace : never; + +/** + * Get parsed properties from a given raw UID + */ +export type Get = Parse[TKey]; + +/** + * Pick parsed properties from a given raw UID + */ +export type Select> = Pick, TKey>; + +/** + * Extract the namespace literal from a given UID. + * + * @example + * type T = ExtractNamespace<'admin::foo'> + * // ^ Namespace.Admin + * @example + * type T = ExtractNamespace<'api::foo.bar'> + * // ^ Namespace.API + * @example + * type T = ExtractNamespace<'admin::foo' | 'api::foo.bar'> + * // ^ Namespace.Admin | Namespace.API + */ +export type ExtractNamespace = + | EnsureNamespaceMatches + | EnsureNamespaceMatches + | EnsureNamespaceMatches + | EnsureNamespaceMatches + | EnsureNamespaceMatches; diff --git a/packages/core/strapi/lib/types/factories.d.ts b/packages/core/strapi/lib/types/factories.d.ts deleted file mode 100644 index 64156bbb36..0000000000 --- a/packages/core/strapi/lib/types/factories.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Service, GenericService } from '../core-api/service'; -import { Controller, GenericController } from '../core-api/controller'; -import { Middleware } from '../middlewares'; -import { Policy } from '../core/registries/policies'; -import { Strapi } from './core/strapi'; - -type ControllerConfig = T; - -type ServiceConfig = Service; - -type HandlerConfig = { - auth?: false | { scope: string[] }; - policies?: Array; - middlewares?: Array; -}; - -type SingleTypeRouterConfig = { - find?: HandlerConfig; - update?: HandlerConfig; - delete?: HandlerConfig; -}; - -type CollectionTypeRouterConfig = { - find?: HandlerConfig; - findOne?: HandlerConfig; - create?: HandlerConfig; - update?: HandlerConfig; - delete?: HandlerConfig; -}; - -type RouterConfig = { - prefix?: string; - only?: string[]; - except?: string[]; - config: SingleTypeRouterConfig | CollectionTypeRouterConfig; -}; - -interface Route { - method: string; - path: string; -} -interface Router { - prefix: string; - routes: Route[]; -} - -type ControllerCallback = (params: { - strapi: Strapi; -}) => T; -type ServiceCallback = (params: { strapi: Strapi }) => T; - -export function createCoreRouter(uid: string, cfg?: RouterConfig = {}): () => Router; -export function createCoreController( - uid: string, - cfg?: ControllerCallback | T = {} -): () => T & Controller; -export function createCoreService( - uid: string, - cfg?: ServiceCallback | T = {} -): () => T; diff --git a/packages/core/strapi/lib/types/index.d.ts b/packages/core/strapi/lib/types/index.d.ts index ada06e2723..780786a88e 100644 --- a/packages/core/strapi/lib/types/index.d.ts +++ b/packages/core/strapi/lib/types/index.d.ts @@ -1,4 +1,6 @@ +// Exports from core should already be modules export * from './core'; -export * as utils from './utils'; -export * as factories from './factories'; +export * as CoreApi from './core-api'; +export * as Utils from './utils'; +export * as Shared from './shared'; diff --git a/packages/core/strapi/lib/types/shared/index.d.ts b/packages/core/strapi/lib/types/shared/index.d.ts new file mode 100644 index 0000000000..62ba4caa69 --- /dev/null +++ b/packages/core/strapi/lib/types/shared/index.d.ts @@ -0,0 +1 @@ +export * from './registries'; diff --git a/packages/core/strapi/lib/types/shared/registries.d.ts b/packages/core/strapi/lib/types/shared/registries.d.ts new file mode 100644 index 0000000000..0ab778a272 --- /dev/null +++ b/packages/core/strapi/lib/types/shared/registries.d.ts @@ -0,0 +1,45 @@ +import type { Common, Schema, UID } from '@strapi/strapi'; + +/** + * Shared service registry + */ +export interface Services { + [uid: UID.Service]: Common.Service; +} + +/** + * Shared controller registry + */ +export interface Controllers { + [uid: UID.Controller]: Common.Controller; +} + +/** + * Shared policy registry + */ +export interface Policies { + // TODO: Create generic policy type + [uid: UID.Policy]: unknown; +} + +/** + * Shared middleware registry + */ +export interface Middlewares { + // TODO: Create generic middleware type + [uid: UID.Middleware]: unknown; +} + +/** + * Shared content-types registry + */ +export interface ContentTypes { + [key: UID.ContentType]: Schema.ContentType; +} + +/** + * Shared component registry + */ +export interface Components { + [key: UID.Component]: Schema.Component; +} diff --git a/packages/core/strapi/lib/types/utils.d.ts b/packages/core/strapi/lib/types/utils.d.ts deleted file mode 100644 index b1360c377b..0000000000 --- a/packages/core/strapi/lib/types/utils.d.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * - * Common utilities used across Strapi typings - * - * */ - -/** - * - * Extract the array values into an union type - * - **/ -export type GetArrayValues> = T extends Array ? U : never; - -/** - * Creates a record where every key is a string and every value is `T` - */ -export type StringRecord = Record; - -/** - * Retrieve object's (`T`) keys if they extends the given `U` type. - * - * @example - * type X = KeysBy<{ foo: 'bar', bar: 'foo', foobar: 2 }, string> - * // 'foo' | 'bar' - * - * type Base = { x: 'foo' | 'bar' }; - * type Obj = { foo: { x: 'foo' }, bar: { x: 'bar' }, other: { x: '42' } }; - * type X = KeysBy - * // 'foo' | 'bar' - */ -export type KeysBy = { - [key in keyof T]: T[key] extends U ? key : never; -}[keyof T]; - -/** - * Retrieve object's (`T`) properties if their value extends the given `U` type. - * - * @example - * type X = KeysBy<{ foo: 'bar', bar: 'foo', foobar: 2 }, string> - * // { foo: 'bar', bar: 'foo' } - * - * type Base = { x: 'foo' | 'bar' }; - * type Obj = { foo: { x: 'foo' }, bar: { x: 'bar' }, other: { x: '42' } }; - * type X = KeysBy - * // { foo: { x: 'foo' }, bar: { x: 'bar' } } - */ -export type PickBy = Pick>; - -/** - * Assign a default value `U` to `T` if `T` is of type `never` - * - * @example - * type X = NeverGuard<{ foo: 'bar' }, string> - * // { foo: 'bar' } - * - * type X = NeverGuard - * // unknown - * - * type X = NeverGuard - * // string - */ -export type NeverGuard = [T] extends [never] ? U : T; - -/** - * Dynamic type based on the keys of `Strapi.Schemas`. - * It represents all the registered schemas' UID as a union type. - * - * @example - * - * declare global { - * namespace Strapi { - * interface Schemas { - * 'api::foo.foo': CollectionTypeSchema; - * 'api::bar.bar': ComponentSchema; - * } - * } - * } - * - * type X = SchemaUID; - * // 'api::foo.foo' | 'api::bar.bar' - */ -export type SchemaUID = keyof Strapi.Schemas; - -/** - * Get the type of a specific key `U` in `T` - * - * @example - * - * type X = Get<{ foo: 'bar', 'bar': 'foo' }, 'foo'> - * // 'bar' - * - * type X = Get<{ foo: 'bar', 'bar': 'foo' }, 'bar'> - * // 'foo' - */ -export type Get = T[U]; diff --git a/packages/core/strapi/lib/types/utils/array.d.ts b/packages/core/strapi/lib/types/utils/array.d.ts new file mode 100644 index 0000000000..6dfa04adbb --- /dev/null +++ b/packages/core/strapi/lib/types/utils/array.d.ts @@ -0,0 +1,25 @@ +import type { Utils } from '@strapi/strapi'; + +/** + * Extract the array values into an union type + **/ +export type Values> = TCollection extends Array + ? TValues + : never; + +/** + * Checks if the size of the given collection equals 0 + */ +export type IsEmpty> = Utils.Expression.Extends< + TCollection['length'], + 0 +>; + +/** + * Checks if the size of the given collection is not 0 + * + * Returns a {@link Utils.Expression.Boolean} expression + */ +export type IsNotEmpty> = Utils.Expression.Not< + IsEmpty +>; diff --git a/packages/core/strapi/lib/types/utils/expression.d.ts b/packages/core/strapi/lib/types/utils/expression.d.ts new file mode 100644 index 0000000000..eceebf2e00 --- /dev/null +++ b/packages/core/strapi/lib/types/utils/expression.d.ts @@ -0,0 +1,68 @@ +import type { Utils } from '@strapi/strapi'; + +export type True = true; +export type False = false; +export type BooleanValue = True | False; + +export type Extends = [TLeft] extends [TRight] ? True : False; + +export type Not = If; + +export type If = [ + TExpression +] extends [True] + ? TOnTrue + : TOnFalse; + +export type MatchFirst = TTests extends [ + infer THead extends Test, + ...infer TTail extends Test[] +] + ? THead extends Test + ? If< + TExpression, + TValue, + If, MatchFirst, TDefault> + > + : never + : never; + +export type MatchAll = TTests extends [ + infer THead extends Test, + ...infer TTail extends Test[] +] + ? THead extends Test + ? Utils.Guard.Never< + If | If, MatchAll>, + TDefault + > + : never + : never; + +export type Test = [ + TExpression, + TValue +]; + +export type Some = TExpressions extends [ + infer THead extends BooleanValue, + ...infer TTail extends BooleanValue[] +] + ? If, Or>, Or> + : never; + +export type Every = TExpressions extends [ + infer THead extends BooleanValue, + ...infer TTail extends BooleanValue[] +] + ? If, And>, And> + : never; + +export type And = Extends< + Extends | Extends, + True +>; + +export type Or = Not< + Extends | Extends, False> +>; diff --git a/packages/core/strapi/lib/types/utils/guard.d.ts b/packages/core/strapi/lib/types/utils/guard.d.ts new file mode 100644 index 0000000000..1872d3500f --- /dev/null +++ b/packages/core/strapi/lib/types/utils/guard.d.ts @@ -0,0 +1,14 @@ +/** + * Assign a default value `TDefault` to `TValue` if `TValue` is of type `never` + * + * @example + * type X = Never<{ foo: 'bar' }, string> + * // { foo: 'bar' } + * + * type X = Never + * // unknown + * + * type X = Never + * // string + */ +export type Never = [TValue] extends [never] ? TDefault : TValue; diff --git a/packages/core/strapi/lib/types/utils/index.d.ts b/packages/core/strapi/lib/types/utils/index.d.ts new file mode 100644 index 0000000000..2a636ec0d0 --- /dev/null +++ b/packages/core/strapi/lib/types/utils/index.d.ts @@ -0,0 +1,19 @@ +export * as Array from './array'; +export * as Guard from './guard'; +export * as Object from './object'; +export * as String from './string'; +export * as Tuple from './tuple'; +export * as Expression from './expression'; + +/** + * Get the type of a specific key `TKey` in `TValue` + * + * @example + * + * type X = Get<{ foo: 'bar', 'bar': 'foo' }, 'foo'> + * // 'bar' + * + * type X = Get<{ foo: 'bar', 'bar': 'foo' }, 'bar'> + * // 'foo' + */ +export type Get = TValue[TKey]; diff --git a/packages/core/strapi/lib/types/utils/object.d.ts b/packages/core/strapi/lib/types/utils/object.d.ts new file mode 100644 index 0000000000..ba52e33519 --- /dev/null +++ b/packages/core/strapi/lib/types/utils/object.d.ts @@ -0,0 +1,29 @@ +/** + * Retrieve object's (`TValue`) keys if they extends the given `TTest` type. + * + * @example + * type X = KeysBy<{ foo: 'bar', bar: 'foo', foobar: 2 }, string> + * // 'foo' | 'bar' + * + * type Base = { x: 'foo' | 'bar' }; + * type Obj = { foo: { x: 'foo' }, bar: { x: 'bar' }, other: { x: '42' } }; + * type X = KeysBy + * // 'foo' | 'bar' + */ +export type KeysBy = { + [key in keyof TValue]: TValue[key] extends TTest ? key : never; +}[keyof TValue]; + +/** + * Retrieve object's (`TValue`) properties if their value extends the given `TTest` type. + * + * @example + * type X = KeysBy<{ foo: 'bar', bar: 'foo', foobar: 2 }, string> + * // { foo: 'bar', bar: 'foo' } + * + * type Base = { x: 'foo' | 'bar' }; + * type Obj = { foo: { x: 'foo' }, bar: { x: 'bar' }, other: { x: '42' } }; + * type X = KeysBy + * // { foo: { x: 'foo' }, bar: { x: 'bar' } } + */ +export type PickBy = Pick>; diff --git a/packages/core/strapi/lib/types/utils/string.d.ts b/packages/core/strapi/lib/types/utils/string.d.ts new file mode 100644 index 0000000000..ef8ee9c584 --- /dev/null +++ b/packages/core/strapi/lib/types/utils/string.d.ts @@ -0,0 +1,41 @@ +/** + * Alias for any literal type (useful for template string parameters) + */ +export type Literal = string | number | bigint | boolean; + +/** + * Used to check if a string includes a given literal + */ +export type Includes = `${string}${T}${string}`; + +/** + * Used to make sure the given string is not empty + */ +export type NonEmpty = T extends '' ? never : T; + +/** + * Split the given string into a tuple using the given `TSeparator` literal + */ +export type Split< + TValue extends string, + TSeparator extends Literal +> = TValue extends `${infer TLeft}${TSeparator}${infer TRight}` + ? [TLeft, ...Split] + : TValue extends '' + ? [] + : [TValue]; + +/** + * Add a literal suffix (`TSuffix`) at the end of the given string + */ +export type Suffix = `${TValue}${TSuffix}`; + +/** + * Add a literal prefix (`TPrefix`) at the beginning of the given string + */ +export type Prefix = `${TPrefix}${TValue}`; + +/** + * Creates a record where every key is a string and every value is `T` + */ +export type Dict = Record; diff --git a/packages/core/strapi/lib/types/utils/tuple.d.ts b/packages/core/strapi/lib/types/utils/tuple.d.ts new file mode 100644 index 0000000000..cdcd495239 --- /dev/null +++ b/packages/core/strapi/lib/types/utils/tuple.d.ts @@ -0,0 +1,13 @@ +import type { Literal } from './string'; + +/** + * Aggregate the given tuple into a string, separated by the given `TSeparator` literal + */ +export type Join = TCollection extends [ + infer THead extends Literal, + ...infer TTail +] + ? TTail['length'] extends 0 + ? THead + : `${THead}${TSeparator}${Join}` + : never; diff --git a/packages/core/strapi/lib/utils/success.js b/packages/core/strapi/lib/utils/success.js index ddd30c4af8..22790f9fa5 100644 --- a/packages/core/strapi/lib/utils/success.js +++ b/packages/core/strapi/lib/utils/success.js @@ -17,13 +17,17 @@ try { process.env.npm_config_global === 'true' || JSON.parse(process.env.npm_config_argv).original.includes('global') ) { + const event = 'didInstallStrapi'; fetch('https://analytics.strapi.io/api/v2/track', { method: 'POST', body: JSON.stringify({ - event: 'didInstallStrapi', + event, deviceId: machineID(), }), - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': event, + }, }).catch(() => {}); } } catch (e) { diff --git a/packages/core/strapi/package.json b/packages/core/strapi/package.json index 534d8d7d4f..3ce2458a42 100644 --- a/packages/core/strapi/package.json +++ b/packages/core/strapi/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/strapi", - "version": "4.11.0", + "version": "4.11.1", "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite", "keywords": [ "strapi", @@ -81,19 +81,19 @@ "dependencies": { "@koa/cors": "3.4.3", "@koa/router": "10.1.1", - "@strapi/admin": "4.11.0", - "@strapi/data-transfer": "4.11.0", - "@strapi/database": "4.11.0", - "@strapi/generate-new": "4.11.0", - "@strapi/generators": "4.11.0", - "@strapi/logger": "4.11.0", - "@strapi/permissions": "4.11.0", - "@strapi/plugin-content-manager": "4.11.0", - "@strapi/plugin-content-type-builder": "4.11.0", - "@strapi/plugin-email": "4.11.0", - "@strapi/plugin-upload": "4.11.0", - "@strapi/typescript-utils": "4.11.0", - "@strapi/utils": "4.11.0", + "@strapi/admin": "4.11.1", + "@strapi/data-transfer": "4.11.1", + "@strapi/database": "4.11.1", + "@strapi/generate-new": "4.11.1", + "@strapi/generators": "4.11.1", + "@strapi/logger": "4.11.1", + "@strapi/permissions": "4.11.1", + "@strapi/plugin-content-manager": "4.11.1", + "@strapi/plugin-content-type-builder": "4.11.1", + "@strapi/plugin-email": "4.11.1", + "@strapi/plugin-upload": "4.11.1", + "@strapi/typescript-utils": "4.11.1", + "@strapi/utils": "4.11.1", "bcryptjs": "2.4.3", "boxen": "5.1.2", "chalk": "4.1.2", diff --git a/packages/core/upload/admin/src/components/AssetCard/AssetCard.js b/packages/core/upload/admin/src/components/AssetCard/AssetCard.js index 77fb534497..b2f61c9429 100644 --- a/packages/core/upload/admin/src/components/AssetCard/AssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/AssetCard.js @@ -1,12 +1,15 @@ import React from 'react'; + +import { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; -import { prefixFileUrlWithBackendUrl, getFileExtension } from '@strapi/helper-plugin'; + +import { AssetDefinition, AssetType } from '../../constants'; +import { createAssetUrl } from '../../utils'; + +import { AudioAssetCard } from './AudioAssetCard'; +import { DocAssetCard } from './DocAssetCard'; import { ImageAssetCard } from './ImageAssetCard'; import { VideoAssetCard } from './VideoAssetCard'; -import { DocAssetCard } from './DocAssetCard'; -import { AudioAssetCard } from './AudioAssetCard'; -import { AssetType, AssetDefinition } from '../../constants'; -import { createAssetUrl } from '../../utils'; export const AssetCard = ({ asset, isSelected, onSelect, onEdit, onRemove, size, local }) => { const handleSelect = onSelect ? () => onSelect(asset) : undefined; diff --git a/packages/core/upload/admin/src/components/AssetCard/AssetCardBase.js b/packages/core/upload/admin/src/components/AssetCard/AssetCardBase.js index 2a8f5a6961..1d22e9a92f 100644 --- a/packages/core/upload/admin/src/components/AssetCard/AssetCardBase.js +++ b/packages/core/upload/admin/src/components/AssetCard/AssetCardBase.js @@ -1,6 +1,5 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; + import { Box, Card, @@ -10,13 +9,15 @@ import { CardCheckbox, CardContent, CardHeader, - CardTitle, CardSubtitle, + CardTitle, Flex, IconButton, } from '@strapi/design-system'; import { Pencil, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { getTrad } from '../../utils'; diff --git a/packages/core/upload/admin/src/components/AssetCard/AudioAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/AudioAssetCard.js index 2282c60a68..df6333c0be 100644 --- a/packages/core/upload/admin/src/components/AssetCard/AudioAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/AudioAssetCard.js @@ -1,10 +1,11 @@ import React from 'react'; + +import { Box, CardAsset } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { CardAsset, Box } from '@strapi/design-system'; -import { AudioPreview } from './AudioPreview'; import { AssetCardBase } from './AssetCardBase'; +import { AudioPreview } from './AudioPreview'; const AudioPreviewWrapper = styled(Box)` canvas, diff --git a/packages/core/upload/admin/src/components/AssetCard/AudioPreview.js b/packages/core/upload/admin/src/components/AssetCard/AudioPreview.js index 1feee76a32..4a89e0be14 100644 --- a/packages/core/upload/admin/src/components/AssetCard/AudioPreview.js +++ b/packages/core/upload/admin/src/components/AssetCard/AudioPreview.js @@ -1,7 +1,8 @@ /* eslint-disable jsx-a11y/media-has-caption */ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box } from '@strapi/design-system'; +import PropTypes from 'prop-types'; export const AudioPreview = ({ url, alt }) => { return ( diff --git a/packages/core/upload/admin/src/components/AssetCard/DocAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/DocAssetCard.js index c72efec16f..5e8a52d8bb 100644 --- a/packages/core/upload/admin/src/components/AssetCard/DocAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/DocAssetCard.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Flex } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; +import { File, FilePdf } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Flex } from '@strapi/design-system'; -import { File, FilePdf } from '@strapi/icons'; -import { pxToRem } from '@strapi/helper-plugin'; import { AssetCardBase } from './AssetCardBase'; diff --git a/packages/core/upload/admin/src/components/AssetCard/ImageAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/ImageAssetCard.js index 63aa8a754d..98d86672fb 100644 --- a/packages/core/upload/admin/src/components/AssetCard/ImageAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/ImageAssetCard.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { CardAsset } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { AssetCardBase } from './AssetCardBase'; diff --git a/packages/core/upload/admin/src/components/AssetCard/UploadingAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/UploadingAssetCard.js index 4ee9737c2c..4f033cf874 100644 --- a/packages/core/upload/admin/src/components/AssetCard/UploadingAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/UploadingAssetCard.js @@ -1,24 +1,24 @@ import React, { useEffect } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; import { + Box, Card, + CardBadge, CardBody, CardContent, CardHeader, - CardTitle, CardSubtitle, - CardBadge, - Typography, - Box, + CardTitle, Flex, + Typography, } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; -import { getTrad } from '../../utils'; import { AssetType } from '../../constants'; import { useUpload } from '../../hooks/useUpload'; +import { getTrad } from '../../utils'; import { UploadProgress } from '../UploadProgress'; const UploadProgressWrapper = styled.div` diff --git a/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js b/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js index fc52b9195b..ec66ff9540 100644 --- a/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js +++ b/packages/core/upload/admin/src/components/AssetCard/VideoAssetCard.js @@ -1,13 +1,14 @@ import React, { useState } from 'react'; + +import { Box, CardAsset, CardTimer } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { CardAsset, CardTimer, Box } from '@strapi/design-system'; - -import { VideoPreview } from './VideoPreview'; -import { AssetCardBase } from './AssetCardBase'; import { formatDuration } from '../../utils'; +import { AssetCardBase } from './AssetCardBase'; +import { VideoPreview } from './VideoPreview'; + const VideoPreviewWrapper = styled(Box)` canvas, video { diff --git a/packages/core/upload/admin/src/components/AssetCard/VideoPreview.js b/packages/core/upload/admin/src/components/AssetCard/VideoPreview.js index 9e6840038d..420197bcf5 100644 --- a/packages/core/upload/admin/src/components/AssetCard/VideoPreview.js +++ b/packages/core/upload/admin/src/components/AssetCard/VideoPreview.js @@ -1,7 +1,8 @@ /* eslint-disable jsx-a11y/media-has-caption */ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, VisuallyHidden } from '@strapi/design-system'; +import PropTypes from 'prop-types'; // According to MDN // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState#value diff --git a/packages/core/upload/admin/src/components/AssetCard/tests/AssetCardBase.test.js b/packages/core/upload/admin/src/components/AssetCard/tests/AssetCardBase.test.js index 70e6ce95a1..d514b67009 100644 --- a/packages/core/upload/admin/src/components/AssetCard/tests/AssetCardBase.test.js +++ b/packages/core/upload/admin/src/components/AssetCard/tests/AssetCardBase.test.js @@ -1,5 +1,6 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { IntlProvider } from 'react-intl'; diff --git a/packages/core/upload/admin/src/components/AssetCard/tests/DocAssetCard.test.js b/packages/core/upload/admin/src/components/AssetCard/tests/DocAssetCard.test.js index 1a6d1d8476..a9b9d9add8 100644 --- a/packages/core/upload/admin/src/components/AssetCard/tests/DocAssetCard.test.js +++ b/packages/core/upload/admin/src/components/AssetCard/tests/DocAssetCard.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; -import { DocAssetCard } from '../DocAssetCard'; + import en from '../../../translations/en.json'; +import { DocAssetCard } from '../DocAssetCard'; jest.mock('../../../utils', () => ({ ...jest.requireActual('../../../utils'), diff --git a/packages/core/upload/admin/src/components/AssetCard/tests/ImageAssetCard.test.js b/packages/core/upload/admin/src/components/AssetCard/tests/ImageAssetCard.test.js index bcbb423828..d779498382 100644 --- a/packages/core/upload/admin/src/components/AssetCard/tests/ImageAssetCard.test.js +++ b/packages/core/upload/admin/src/components/AssetCard/tests/ImageAssetCard.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; -import { ImageAssetCard } from '../ImageAssetCard'; + import en from '../../../translations/en.json'; +import { ImageAssetCard } from '../ImageAssetCard'; jest.mock('../../../utils', () => ({ ...jest.requireActual('../../../utils'), diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/Filters.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/Filters.js index aa664dd6bb..83a93b476c 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/Filters.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/Filters.js @@ -1,11 +1,13 @@ -import React, { useState, useRef } from 'react'; -import PropTypes from 'prop-types'; +import React, { useRef, useState } from 'react'; + import { Button } from '@strapi/design-system'; import { Filter } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + +import displayedFilters from '../../../utils/displayedFilters'; import FilterList from '../../FilterList'; import FilterPopover from '../../FilterPopover'; -import displayedFilters from '../../../utils/displayedFilters'; export const Filters = ({ appliedFilters, onChangeFilters }) => { const buttonRef = useRef(null); diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PageSize.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PageSize.js index 79799d6f5e..ebf922334f 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PageSize.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PageSize.js @@ -5,9 +5,10 @@ */ import React from 'react'; -import { useIntl } from 'react-intl'; -import { Box, Flex, Select, Option, Typography } from '@strapi/design-system'; + +import { Box, Flex, Option, Select, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; const PageSize = ({ onChangePageSize, pageSize }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js index 352020d403..1adfbbbac4 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js @@ -1,6 +1,8 @@ import React, { useMemo } from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; +import PropTypes from 'prop-types'; + import { PaginationContext } from './PaginationContext'; export const Pagination = ({ children, label, activePage, pageCount }) => { diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.js index 22e3b766e6..1e24c6846b 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/components.js @@ -1,8 +1,10 @@ import React from 'react'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; + +import { buttonFocusStyle, Typography, VisuallyHidden } from '@strapi/design-system'; import { ChevronLeft, ChevronRight } from '@strapi/icons'; -import { Typography, buttonFocusStyle, VisuallyHidden } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; + import { usePagination } from './PaginationContext'; const PaginationText = styled(Typography)` diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.js index f9026ada56..340dc9fb50 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/PaginationFooter/index.js @@ -12,10 +12,12 @@ * 1, ... 6, `7`, 8, 9, 10 */ import React from 'react'; + import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; + +import { Dots, NextLink, PageLink, PreviousLink } from './components'; import { Pagination } from './Pagination'; -import { PreviousLink, NextLink, PageLink, Dots } from './components'; const PaginationFooter = ({ activePage, onChangePage, pagination: { pageCount } }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/index.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/index.js index 217103f805..1355b5672b 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/index.js @@ -1,9 +1,11 @@ -import React, { useState, useLayoutEffect, useRef } from 'react'; +import React, { useLayoutEffect, useRef, useState } from 'react'; + +import { IconButton, Searchbar, SearchForm } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; +import { Search } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useTracking } from '@strapi/helper-plugin'; -import { Searchbar, SearchForm, IconButton } from '@strapi/design-system'; -import { Search } from '@strapi/icons'; + import getTrad from '../../../../utils/getTrad'; const SearchAsset = ({ onChangeSearch, queryValue }) => { diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/tests/index.test.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/tests/index.test.js index 2bffb4aceb..b86ada803c 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/tests/index.test.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/SearchAsset/tests/index.test.js @@ -5,9 +5,11 @@ */ import React from 'react'; -import { render, fireEvent } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import SearchAsset from '../index'; const handleChange = jest.fn(); diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/index.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/index.js index 8d0d8f0dbd..9759b5e2a7 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/index.js @@ -1,42 +1,43 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { usePersistentState } from '@strapi/helper-plugin'; import { - Button, - Flex, - Box, - Divider, BaseCheckbox, + Box, + Button, + Divider, + Flex, GridItem, - Typography, IconButton, + Typography, VisuallyHidden, } from '@strapi/design-system'; -import { Pencil, Plus, Grid, List } from '@strapi/icons'; +import { usePersistentState } from '@strapi/helper-plugin'; +import { Grid, List, Pencil, Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import { - FolderDefinition, AssetDefinition, - viewOptions, + FolderDefinition, localStorageKeys, + viewOptions, } from '../../../constants'; -import getTrad from '../../../utils/getTrad'; +import { useFolder } from '../../../hooks/useFolder'; import { getBreadcrumbDataCM, toSingularTypes } from '../../../utils'; import getAllowedFiles from '../../../utils/getAllowedFiles'; +import getTrad from '../../../utils/getTrad'; import { AssetGridList } from '../../AssetGridList'; -import { TableList } from '../../TableList'; -import { FolderGridList } from '../../FolderGridList'; -import { EmptyAssets } from '../../EmptyAssets'; import { Breadcrumbs } from '../../Breadcrumbs'; -import SortPicker from '../../SortPicker'; -import { useFolder } from '../../../hooks/useFolder'; +import { EmptyAssets } from '../../EmptyAssets'; import { FolderCard, FolderCardBody, FolderCardBodyAction } from '../../FolderCard'; +import { FolderGridList } from '../../FolderGridList'; +import SortPicker from '../../SortPicker'; +import { TableList } from '../../TableList'; + import { Filters } from './Filters'; -import PaginationFooter from './PaginationFooter'; import PageSize from './PageSize'; +import PaginationFooter from './PaginationFooter'; import SearchAsset from './SearchAsset'; import { isSelectable } from './utils/isSelectable'; diff --git a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/index.test.js b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/index.test.js index bd77f62ce9..19af0b1978 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/index.test.js +++ b/packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/index.test.js @@ -1,14 +1,15 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { render, fireEvent, screen } from '@testing-library/react'; -import { NotificationsProvider, usePersistentState } from '@strapi/helper-plugin'; -import { MemoryRouter } from 'react-router-dom'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { useFolder } from '../../../../hooks/useFolder'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, usePersistentState } from '@strapi/helper-plugin'; +import { fireEvent, render, screen } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; + import { BrowseStep } from '..'; import { viewOptions } from '../../../../constants'; +import { useFolder } from '../../../../hooks/useFolder'; jest.mock('../../../../hooks/useFolder'); diff --git a/packages/core/upload/admin/src/components/AssetDialog/DialogFooter.js b/packages/core/upload/admin/src/components/AssetDialog/DialogFooter.js index 4c3cd73be9..fb93c75560 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/DialogFooter.js +++ b/packages/core/upload/admin/src/components/AssetDialog/DialogFooter.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Button, ModalFooter } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; export const DialogFooter = ({ onClose, onValidate }) => { diff --git a/packages/core/upload/admin/src/components/AssetDialog/SelectedStep/index.js b/packages/core/upload/admin/src/components/AssetDialog/SelectedStep/index.js index 45a82f2ecb..3aa36c9b6a 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/SelectedStep/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/SelectedStep/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; + import { Flex, Typography } from '@strapi/design-system'; -import { AssetGridList } from '../../AssetGridList'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; +import { AssetGridList } from '../../AssetGridList'; export const SelectedStep = ({ selectedAssets, onSelectAsset, onReorderAsset }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/AssetDialog/index.js b/packages/core/upload/admin/src/components/AssetDialog/index.js index e7548d7a5f..b9b0b7a3c4 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/index.js +++ b/packages/core/upload/admin/src/components/AssetDialog/index.js @@ -1,38 +1,41 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; + import { - ModalLayout, - ModalBody, - ModalHeader, - Flex, + Badge, Button, Divider, - Typography, - Tabs, + Flex, + Loader, + ModalBody, + ModalHeader, + ModalLayout, Tab, TabGroup, - TabPanels, TabPanel, - Badge, - Loader, + TabPanels, + Tabs, + Typography, } from '@strapi/design-system'; -import { NoPermissions, AnErrorOccurred, useSelectionState, pxToRem } from '@strapi/helper-plugin'; -import { getTrad, containsAssetFilter } from '../../utils'; -import { SelectedStep } from './SelectedStep'; -import { BrowseStep } from './BrowseStep'; -import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions'; +import { AnErrorOccurred, NoPermissions, pxToRem, useSelectionState } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + +import { AssetDefinition } from '../../constants'; import { useAssets } from '../../hooks/useAssets'; import { useFolders } from '../../hooks/useFolders'; +import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions'; import useModalQueryParams from '../../hooks/useModalQueryParams'; -import { AssetDefinition } from '../../constants'; +import { containsAssetFilter, getTrad } from '../../utils'; import getAllowedFiles from '../../utils/getAllowedFiles'; -import { DialogFooter } from './DialogFooter'; -import { EditAssetDialog } from '../EditAssetDialog'; import { moveElement } from '../../utils/moveElement'; +import { EditAssetDialog } from '../EditAssetDialog'; import { EditFolderDialog } from '../EditFolderDialog'; +import { BrowseStep } from './BrowseStep'; +import { DialogFooter } from './DialogFooter'; +import { SelectedStep } from './SelectedStep'; + const LoadingBody = styled(Flex)` /* 80px are coming from the Tabs component that is not included in the ModalBody */ min-height: ${() => `calc(60vh + ${pxToRem(80)})`}; diff --git a/packages/core/upload/admin/src/components/AssetDialog/tests/AssetDialog.test.js b/packages/core/upload/admin/src/components/AssetDialog/tests/AssetDialog.test.js index 82d27d6a75..7fe231caa8 100644 --- a/packages/core/upload/admin/src/components/AssetDialog/tests/AssetDialog.test.js +++ b/packages/core/upload/admin/src/components/AssetDialog/tests/AssetDialog.test.js @@ -1,13 +1,14 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL, screen } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { MemoryRouter } from 'react-router-dom'; import { AssetDialog } from '..'; -import { useFolders } from '../../../hooks/useFolders'; import { useAssets } from '../../../hooks/useAssets'; +import { useFolders } from '../../../hooks/useFolders'; import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions'; import useModalQueryParams from '../../../hooks/useModalQueryParams'; diff --git a/packages/core/upload/admin/src/components/AssetGridList/Draggable.js b/packages/core/upload/admin/src/components/AssetGridList/Draggable.js index 824a2845fe..b741e858b9 100644 --- a/packages/core/upload/admin/src/components/AssetGridList/Draggable.js +++ b/packages/core/upload/admin/src/components/AssetGridList/Draggable.js @@ -1,4 +1,5 @@ import React, { useRef } from 'react'; + import PropTypes from 'prop-types'; import { useDrag, useDrop } from 'react-dnd'; diff --git a/packages/core/upload/admin/src/components/AssetGridList/index.js b/packages/core/upload/admin/src/components/AssetGridList/index.js index 634299b2df..1c8d0c5829 100644 --- a/packages/core/upload/admin/src/components/AssetGridList/index.js +++ b/packages/core/upload/admin/src/components/AssetGridList/index.js @@ -1,8 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Grid, GridItem, KeyboardNavigable, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { AssetCard } from '../AssetCard/AssetCard'; + import { Draggable } from './Draggable'; export const AssetGridList = ({ diff --git a/packages/core/upload/admin/src/components/AssetGridList/tests/AssetGridList.test.js b/packages/core/upload/admin/src/components/AssetGridList/tests/AssetGridList.test.js index b68c599bdb..f5e0ca0775 100644 --- a/packages/core/upload/admin/src/components/AssetGridList/tests/AssetGridList.test.js +++ b/packages/core/upload/admin/src/components/AssetGridList/tests/AssetGridList.test.js @@ -1,7 +1,9 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; + import { AssetGridList } from '..'; import en from '../../../translations/en.json'; diff --git a/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap b/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap index 9538c9ee8c..8899cdcc01 100644 --- a/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap +++ b/packages/core/upload/admin/src/components/AssetGridList/tests/__snapshots__/AssetGridList.test.js.snap @@ -317,14 +317,6 @@ exports[`MediaLibrary / AssetList snapshots the asset list 1`] = ` cursor: pointer; } -.c29 canvas, -.c29 video { - display: block; - pointer-events: none; - max-width: 100%; - max-height: 10.25rem; -} - .c35 svg { font-size: 3rem; } @@ -334,6 +326,14 @@ exports[`MediaLibrary / AssetList snapshots the asset list 1`] = ` background: linear-gradient(180deg,#ffffff 0%,#f6f6f9 121.48%); } +.c29 canvas, +.c29 video { + display: block; + pointer-events: none; + max-width: 100%; + max-height: 10.25rem; +} + @media (max-width:68.75rem) { .c2 { grid-column: span; diff --git a/packages/core/upload/admin/src/components/Breadcrumbs/Breadcrumbs.js b/packages/core/upload/admin/src/components/Breadcrumbs/Breadcrumbs.js index eb65f1f493..1c72a6bf78 100644 --- a/packages/core/upload/admin/src/components/Breadcrumbs/Breadcrumbs.js +++ b/packages/core/upload/admin/src/components/Breadcrumbs/Breadcrumbs.js @@ -1,12 +1,14 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { NavLink } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import { Crumb, CrumbLink, Breadcrumbs as BaseBreadcrumbs } from '@strapi/design-system/v2'; -import { CrumbSimpleMenuAsync } from './CrumbSimpleMenuAsync'; +import { Breadcrumbs as BaseBreadcrumbs, Crumb, CrumbLink } from '@strapi/design-system/v2'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { NavLink } from 'react-router-dom'; + import { BreadcrumbsDefinition } from '../../constants'; +import { CrumbSimpleMenuAsync } from './CrumbSimpleMenuAsync'; + export const Breadcrumbs = ({ breadcrumbs, onChangeFolder, currentFolderId, ...props }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/Breadcrumbs/CrumbSimpleMenuAsync.js b/packages/core/upload/admin/src/components/Breadcrumbs/CrumbSimpleMenuAsync.js index e88f5d5e37..5b93d1b9ff 100644 --- a/packages/core/upload/admin/src/components/Breadcrumbs/CrumbSimpleMenuAsync.js +++ b/packages/core/upload/admin/src/components/Breadcrumbs/CrumbSimpleMenuAsync.js @@ -1,10 +1,12 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { NavLink, useLocation } from 'react-router-dom'; -import { useIntl } from 'react-intl'; -import { useQueryParams } from '@strapi/helper-plugin'; -import { MenuItem, CrumbSimpleMenu } from '@strapi/design-system/v2'; + import { Loader } from '@strapi/design-system'; +import { CrumbSimpleMenu, MenuItem } from '@strapi/design-system/v2'; +import { useQueryParams } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { NavLink, useLocation } from 'react-router-dom'; + import { useFolderStructure } from '../../hooks/useFolderStructure'; import { getFolderParents, getFolderURL, getTrad } from '../../utils'; diff --git a/packages/core/upload/admin/src/components/Breadcrumbs/tests/index.test.js b/packages/core/upload/admin/src/components/Breadcrumbs/tests/index.test.js index ec82e308f0..7dbbde7c31 100644 --- a/packages/core/upload/admin/src/components/Breadcrumbs/tests/index.test.js +++ b/packages/core/upload/admin/src/components/Breadcrumbs/tests/index.test.js @@ -1,11 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { MemoryRouter } from 'react-router-dom'; import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { Breadcrumbs } from '../index'; jest.mock('../../../hooks/useFolderStructure'); diff --git a/packages/core/upload/admin/src/components/BulkMoveDialog/BulkMoveDialog.js b/packages/core/upload/admin/src/components/BulkMoveDialog/BulkMoveDialog.js index 5270f6c09a..8168054e10 100644 --- a/packages/core/upload/admin/src/components/BulkMoveDialog/BulkMoveDialog.js +++ b/packages/core/upload/admin/src/components/BulkMoveDialog/BulkMoveDialog.js @@ -1,28 +1,29 @@ -import { Formik } from 'formik'; import React from 'react'; -import PropTypes from 'prop-types'; -import isEmpty from 'lodash/isEmpty'; -import { useIntl } from 'react-intl'; + import { Button, + FieldLabel, + Flex, Grid, GridItem, - Flex, Loader, - ModalLayout, - ModalHeader, ModalBody, ModalFooter, - FieldLabel, + ModalHeader, + ModalLayout, Typography, } from '@strapi/design-system'; import { Form, normalizeAPIError } from '@strapi/helper-plugin'; +import { Formik } from 'formik'; +import isEmpty from 'lodash/isEmpty'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { AssetDefinition, FolderDefinition } from '../../constants'; import { useBulkMove } from '../../hooks/useBulkMove'; +import { useFolderStructure } from '../../hooks/useFolderStructure'; import { getTrad } from '../../utils'; import SelectTree from '../SelectTree'; -import { useFolderStructure } from '../../hooks/useFolderStructure'; -import { FolderDefinition, AssetDefinition } from '../../constants'; export const BulkMoveDialog = ({ onClose, selected, currentFolder }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/BulkMoveDialog/tests/BulkMoveDialog.test.js b/packages/core/upload/admin/src/components/BulkMoveDialog/tests/BulkMoveDialog.test.js index ad01a655f9..e6837081ae 100644 --- a/packages/core/upload/admin/src/components/BulkMoveDialog/tests/BulkMoveDialog.test.js +++ b/packages/core/upload/admin/src/components/BulkMoveDialog/tests/BulkMoveDialog.test.js @@ -1,9 +1,10 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; -import { render } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { NotificationsProvider } from '@strapi/helper-plugin'; -import { QueryClientProvider, QueryClient } from 'react-query'; +import { render } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { BulkMoveDialog } from '..'; diff --git a/packages/core/upload/admin/src/components/ContextInfo/ContextInfo.js b/packages/core/upload/admin/src/components/ContextInfo/ContextInfo.js index 51181a40e2..ee33ce0603 100644 --- a/packages/core/upload/admin/src/components/ContextInfo/ContextInfo.js +++ b/packages/core/upload/admin/src/components/ContextInfo/ContextInfo.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; export const ContextInfo = ({ blocks }) => { return ( diff --git a/packages/core/upload/admin/src/components/ContextInfo/tests/ContextInfo.test.js b/packages/core/upload/admin/src/components/ContextInfo/tests/ContextInfo.test.js index 2c9dcbe0cc..df1522333b 100644 --- a/packages/core/upload/admin/src/components/ContextInfo/tests/ContextInfo.test.js +++ b/packages/core/upload/admin/src/components/ContextInfo/tests/ContextInfo.test.js @@ -1,5 +1,6 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { ContextInfo } from '../index'; diff --git a/packages/core/upload/admin/src/components/CopyLinkButton/index.js b/packages/core/upload/admin/src/components/CopyLinkButton/index.js index 49f5758297..b5d60dac60 100644 --- a/packages/core/upload/admin/src/components/CopyLinkButton/index.js +++ b/packages/core/upload/admin/src/components/CopyLinkButton/index.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { IconButton } from '@strapi/design-system'; +import { useClipboard, useNotification } from '@strapi/helper-plugin'; +import { Link as LinkIcon } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { IconButton } from '@strapi/design-system'; -import { useNotification, useClipboard } from '@strapi/helper-plugin'; -import { Link as LinkIcon } from '@strapi/icons'; + import getTrad from '../../utils/getTrad'; export const CopyLinkButton = ({ url }) => { diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/DialogHeader.js b/packages/core/upload/admin/src/components/EditAssetDialog/DialogHeader.js index fee47c3ebe..1e7a2f5fd9 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/DialogHeader.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/DialogHeader.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { ModalHeader, Typography } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import { Typography, ModalHeader } from '@strapi/design-system'; export const DialogHeader = () => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.js b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.js index ef3c735f73..69d31f6671 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.js @@ -1,10 +1,12 @@ /* eslint-disable jsx-a11y/media-has-caption */ import React, { forwardRef } from 'react'; -import PropTypes from 'prop-types'; -import { File, FilePdf } from '@strapi/icons'; + import { Flex } from '@strapi/design-system'; -import styled from 'styled-components'; import { usePersistentState } from '@strapi/helper-plugin'; +import { File, FilePdf } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; + import { AssetType } from '../../../constants'; const CardAsset = styled(Flex)` diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.js b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.js index 66428c62cc..3feca3edfd 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.js @@ -1,9 +1,12 @@ import React from 'react'; + +import { Flex, FocusTrap, IconButton, MenuItem, SimpleMenu } from '@strapi/design-system'; +import { Check, Cross } from '@strapi/icons'; import PropTypes from 'prop-types'; -import { IconButton, FocusTrap, SimpleMenu, MenuItem, Flex } from '@strapi/design-system'; -import { Cross, Check } from '@strapi/icons'; import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; + import { CroppingActionRow } from './components'; export const CroppingActions = ({ onCancel, onValidate, onDuplicate }) => { diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.js b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.js index 6b33bdb1a1..562d0af7e3 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/components.js @@ -1,5 +1,5 @@ +import { Badge, Box, Flex } from '@strapi/design-system'; import styled from 'styled-components'; -import { Box, Flex, Badge } from '@strapi/design-system'; export const RelativeBox = styled(Box)` position: relative; diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/index.js b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/index.js index 35f103c122..5a554018eb 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/index.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/PreviewBox/index.js @@ -1,28 +1,31 @@ -import React, { useState, useRef, useEffect } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; + +import { Flex, IconButton } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; +import { Crop as Resize, Download as DownloadIcon, Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Flex, IconButton } from '@strapi/design-system'; -import { Trash, Download as DownloadIcon, Crop as Resize } from '@strapi/icons'; -import { useTracking } from '@strapi/helper-plugin'; -import getTrad from '../../../utils/getTrad'; -import { downloadFile } from '../../../utils/downloadFile'; -import { RemoveAssetDialog } from '../RemoveAssetDialog'; + +import { AssetDefinition, AssetType } from '../../../constants'; import { useCropImg } from '../../../hooks/useCropImg'; import { useEditAsset } from '../../../hooks/useEditAsset'; import { useUpload } from '../../../hooks/useUpload'; -import { - RelativeBox, - ActionRow, - Wrapper, - BadgeOverride, - UploadProgressWrapper, -} from './components'; -import { CroppingActions } from './CroppingActions'; +import { createAssetUrl } from '../../../utils'; +import { downloadFile } from '../../../utils/downloadFile'; +import getTrad from '../../../utils/getTrad'; import { CopyLinkButton } from '../../CopyLinkButton'; import { UploadProgress } from '../../UploadProgress'; -import { AssetType, AssetDefinition } from '../../../constants'; +import { RemoveAssetDialog } from '../RemoveAssetDialog'; + import { AssetPreview } from './AssetPreview'; -import { createAssetUrl } from '../../../utils'; +import { + ActionRow, + BadgeOverride, + RelativeBox, + UploadProgressWrapper, + Wrapper, +} from './components'; +import { CroppingActions } from './CroppingActions'; import 'cropperjs/dist/cropper.css'; diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.js b/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.js index 7d8bb9eab6..d262cc36ad 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/RemoveAssetDialog.js @@ -1,6 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { ConfirmDialog } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; + import { useRemoveAsset } from '../../hooks/useRemoveAsset'; export const RemoveAssetDialog = ({ onClose, asset }) => { diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/ReplaceMediaButton.js b/packages/core/upload/admin/src/components/EditAssetDialog/ReplaceMediaButton.js index 0ea79a7bc9..b425dfd7a5 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/ReplaceMediaButton.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/ReplaceMediaButton.js @@ -1,8 +1,10 @@ -import PropTypes from 'prop-types'; import React, { useRef } from 'react'; -import { useIntl } from 'react-intl'; -import { useTracking } from '@strapi/helper-plugin'; + import { Button, VisuallyHidden } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../utils'; export const ReplaceMediaButton = ({ onSelectMedia, acceptedMime, trackedLocation, ...props }) => { diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/index.js b/packages/core/upload/admin/src/components/EditAssetDialog/index.js index 79f2d1fe35..e134b42e8a 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/index.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/index.js @@ -4,38 +4,40 @@ * */ -import PropTypes from 'prop-types'; import React, { useRef, useState } from 'react'; -import { useIntl } from 'react-intl'; -import isEqual from 'lodash/isEqual'; -import styled from 'styled-components'; + import { - ModalLayout, - ModalBody, - ModalFooter, - Flex, - Loader, - Grid, - GridItem, Button, FieldLabel, + Flex, + Grid, + GridItem, + Loader, + ModalBody, + ModalFooter, + ModalLayout, TextInput, VisuallyHidden, } from '@strapi/design-system'; -import { getFileExtension, Form, pxToRem, useTracking } from '@strapi/helper-plugin'; +import { Form, getFileExtension, pxToRem, useTracking } from '@strapi/helper-plugin'; import { Formik } from 'formik'; +import isEqual from 'lodash/isEqual'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import * as yup from 'yup'; +import { AssetDefinition } from '../../constants'; +import { useEditAsset } from '../../hooks/useEditAsset'; +import { useFolderStructure } from '../../hooks/useFolderStructure'; +import { findRecursiveFolderByValue, getTrad } from '../../utils'; +import formatBytes from '../../utils/formatBytes'; +import { ContextInfo } from '../ContextInfo'; +import SelectTree from '../SelectTree'; + import { DialogHeader } from './DialogHeader'; import { PreviewBox } from './PreviewBox'; -import { ContextInfo } from '../ContextInfo'; -import { AssetDefinition } from '../../constants'; -import { getTrad, findRecursiveFolderByValue } from '../../utils'; -import formatBytes from '../../utils/formatBytes'; -import { useEditAsset } from '../../hooks/useEditAsset'; -import { useFolderStructure } from '../../hooks/useFolderStructure'; import { ReplaceMediaButton } from './ReplaceMediaButton'; -import SelectTree from '../SelectTree'; const LoadingBody = styled(Flex)` /* 80px are coming from the Tabs component that is not included in the ModalBody */ diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js index a34025ddd0..5ca8d78147 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js @@ -1,12 +1,14 @@ import React from 'react'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { NotificationsProvider } from '@strapi/helper-plugin'; -import { EditAssetDialog } from '../index'; + import en from '../../../translations/en.json'; import { downloadFile } from '../../../utils/downloadFile'; +import { EditAssetDialog } from '../index'; jest.mock('../../../hooks/useFolderStructure'); jest.mock('../../../utils/downloadFile'); diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/RemoveAssetDialog.test.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/RemoveAssetDialog.test.js index 9d10c84bc3..55e7b8298d 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/RemoveAssetDialog.test.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/RemoveAssetDialog.test.js @@ -1,11 +1,14 @@ import React from 'react'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { NotificationsProvider } from '@strapi/helper-plugin'; -import { RemoveAssetDialog } from '../RemoveAssetDialog'; + import en from '../../../translations/en.json'; +import { RemoveAssetDialog } from '../RemoveAssetDialog'; + import server from './server'; jest.mock('../../../utils/deleteRequest', () => ({ diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js index 1b80e2edce..9b1556fd34 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js @@ -5,14 +5,16 @@ */ import React from 'react'; -import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, TrackingProvider } from '@strapi/helper-plugin'; +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { NotificationsProvider, TrackingProvider } from '@strapi/helper-plugin'; -import { EditAssetDialog } from '../index'; + import en from '../../../translations/en.json'; import { downloadFile } from '../../../utils/downloadFile'; +import { EditAssetDialog } from '../index'; jest.mock('../../../utils/downloadFile'); jest.mock('../../../hooks/useFolderStructure'); diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/server.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/server.js index 60ba45dfc9..a91057f1cf 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/server.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.delete('*/upload/files/8', (req, res, ctx) => { diff --git a/packages/core/upload/admin/src/components/EditFolderDialog/EditFolderDialog.js b/packages/core/upload/admin/src/components/EditFolderDialog/EditFolderDialog.js index 64d2f60b8c..bfe9624c7a 100644 --- a/packages/core/upload/admin/src/components/EditFolderDialog/EditFolderDialog.js +++ b/packages/core/upload/admin/src/components/EditFolderDialog/EditFolderDialog.js @@ -1,32 +1,34 @@ -import * as yup from 'yup'; -import { Formik } from 'formik'; import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import isEmpty from 'lodash/isEmpty'; -import { useIntl } from 'react-intl'; + import { Button, - Grid, - GridItem, - ModalLayout, - ModalBody, - ModalFooter, FieldLabel, Flex, + Grid, + GridItem, Loader, + ModalBody, + ModalFooter, + ModalLayout, TextInput, Typography, } from '@strapi/design-system'; -import { Form, useNotification, getAPIInnerErrors, useTracking } from '@strapi/helper-plugin'; +import { Form, getAPIInnerErrors, useNotification, useTracking } from '@strapi/helper-plugin'; +import { Formik } from 'formik'; +import isEmpty from 'lodash/isEmpty'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import * as yup from 'yup'; -import { getTrad, findRecursiveFolderByValue } from '../../utils'; import { FolderDefinition } from '../../constants'; -import { useEditFolder } from '../../hooks/useEditFolder'; import { useBulkRemove } from '../../hooks/useBulkRemove'; +import { useEditFolder } from '../../hooks/useEditFolder'; import { useFolderStructure } from '../../hooks/useFolderStructure'; import { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions'; +import { findRecursiveFolderByValue, getTrad } from '../../utils'; import { ContextInfo } from '../ContextInfo'; import SelectTree from '../SelectTree'; + import { EditFolderModalHeader } from './ModalHeader'; import RemoveFolderDialog from './RemoveFolderDialog'; diff --git a/packages/core/upload/admin/src/components/EditFolderDialog/ModalHeader/ModalHeader.js b/packages/core/upload/admin/src/components/EditFolderDialog/ModalHeader/ModalHeader.js index 92f757e254..9fb445cba1 100644 --- a/packages/core/upload/admin/src/components/EditFolderDialog/ModalHeader/ModalHeader.js +++ b/packages/core/upload/admin/src/components/EditFolderDialog/ModalHeader/ModalHeader.js @@ -1,7 +1,8 @@ -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; import React from 'react'; + import { ModalHeader, Typography } from '@strapi/design-system'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { getTrad } from '../../../utils'; diff --git a/packages/core/upload/admin/src/components/EditFolderDialog/RemoveFolderDialog.js b/packages/core/upload/admin/src/components/EditFolderDialog/RemoveFolderDialog.js index 2bd1108311..70d243836a 100644 --- a/packages/core/upload/admin/src/components/EditFolderDialog/RemoveFolderDialog.js +++ b/packages/core/upload/admin/src/components/EditFolderDialog/RemoveFolderDialog.js @@ -1,6 +1,7 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { ConfirmDialog } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; export const RemoveFolderDialog = ({ onClose, onConfirm }) => { return ( diff --git a/packages/core/upload/admin/src/components/EditFolderDialog/tests/EditFolderDialog.test.js b/packages/core/upload/admin/src/components/EditFolderDialog/tests/EditFolderDialog.test.js index e45e60f38d..8f52ff0761 100644 --- a/packages/core/upload/admin/src/components/EditFolderDialog/tests/EditFolderDialog.test.js +++ b/packages/core/upload/admin/src/components/EditFolderDialog/tests/EditFolderDialog.test.js @@ -1,14 +1,15 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { IntlProvider } from 'react-intl'; -import { render, fireEvent, act, waitFor, screen } from '@testing-library/react'; -import { within } from '@testing-library/dom'; -import { NotificationsProvider } from '@strapi/helper-plugin'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { EditFolderDialog } from '../EditFolderDialog'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; +import { within } from '@testing-library/dom'; +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import { useEditFolder } from '../../../hooks/useEditFolder'; import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions'; +import { EditFolderDialog } from '../EditFolderDialog'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/upload/admin/src/components/EmptyAssets/EmptyAssetGrid.js b/packages/core/upload/admin/src/components/EmptyAssets/EmptyAssetGrid.js index 0fb59101c9..89ebd61003 100644 --- a/packages/core/upload/admin/src/components/EmptyAssets/EmptyAssetGrid.js +++ b/packages/core/upload/admin/src/components/EmptyAssets/EmptyAssetGrid.js @@ -1,7 +1,8 @@ import React from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; const EmptyAssetCard = styled(Box)` background: linear-gradient( diff --git a/packages/core/upload/admin/src/components/EmptyAssets/index.js b/packages/core/upload/admin/src/components/EmptyAssets/index.js index 9747f8c636..00ebcd1cd4 100644 --- a/packages/core/upload/admin/src/components/EmptyAssets/index.js +++ b/packages/core/upload/admin/src/components/EmptyAssets/index.js @@ -1,7 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { Typography, Flex, Box, Icon } from '@strapi/design-system'; + +import { Box, Flex, Icon, Typography } from '@strapi/design-system'; import { EmptyDocuments } from '@strapi/icons'; +import PropTypes from 'prop-types'; + import { EmptyAssetGrid } from './EmptyAssetGrid'; export const EmptyAssets = ({ icon, content, action, size, count }) => { diff --git a/packages/core/upload/admin/src/components/FilterList/FilterTag.js b/packages/core/upload/admin/src/components/FilterList/FilterTag.js index 8189833000..8b4e24c2fd 100644 --- a/packages/core/upload/admin/src/components/FilterList/FilterTag.js +++ b/packages/core/upload/admin/src/components/FilterList/FilterTag.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Tag } from '@strapi/design-system'; import { Cross } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; const FilterTag = ({ attribute, filter, onClick, operator, value }) => { diff --git a/packages/core/upload/admin/src/components/FilterList/index.js b/packages/core/upload/admin/src/components/FilterList/index.js index f342144d63..1cc48b1f42 100644 --- a/packages/core/upload/admin/src/components/FilterList/index.js +++ b/packages/core/upload/admin/src/components/FilterList/index.js @@ -5,7 +5,9 @@ */ import React from 'react'; + import PropTypes from 'prop-types'; + import FilterTag from './FilterTag'; const FilterList = ({ appliedFilters, filtersSchema, onRemoveFilter }) => { diff --git a/packages/core/upload/admin/src/components/FilterList/tests/index.test.js b/packages/core/upload/admin/src/components/FilterList/tests/index.test.js index 3590bb73fd..bd297da73b 100644 --- a/packages/core/upload/admin/src/components/FilterList/tests/index.test.js +++ b/packages/core/upload/admin/src/components/FilterList/tests/index.test.js @@ -5,9 +5,11 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; + import FilterList from '../index'; const messages = { diff --git a/packages/core/upload/admin/src/components/FilterPopover/FilterValueInput.js b/packages/core/upload/admin/src/components/FilterPopover/FilterValueInput.js index e1549c56c3..25b78e01e5 100644 --- a/packages/core/upload/admin/src/components/FilterPopover/FilterValueInput.js +++ b/packages/core/upload/admin/src/components/FilterPopover/FilterValueInput.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { DateTimePicker, Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { DateTimePicker, Select, Option } from '@strapi/design-system'; import { useIntl } from 'react-intl'; const FilterValueInput = ({ label, onChange, options, type, value }) => { diff --git a/packages/core/upload/admin/src/components/FilterPopover/index.js b/packages/core/upload/admin/src/components/FilterPopover/index.js index 81cf2a1f70..017c562f01 100644 --- a/packages/core/upload/admin/src/components/FilterPopover/index.js +++ b/packages/core/upload/admin/src/components/FilterPopover/index.js @@ -5,10 +5,12 @@ */ import React, { useState } from 'react'; -import { useIntl } from 'react-intl'; -import PropTypes from 'prop-types'; -import { Button, Box, Popover, Flex, Select, Option } from '@strapi/design-system'; + +import { Box, Button, Flex, Option, Popover, Select } from '@strapi/design-system'; import { Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import FilterValueInput from './FilterValueInput'; import getFilterList from './utils/getFilterList'; diff --git a/packages/core/upload/admin/src/components/FolderCard/FolderCard/FolderCard.js b/packages/core/upload/admin/src/components/FolderCard/FolderCard/FolderCard.js index 4d3e12f02d..846f0f3b9a 100644 --- a/packages/core/upload/admin/src/components/FolderCard/FolderCard/FolderCard.js +++ b/packages/core/upload/admin/src/components/FolderCard/FolderCard/FolderCard.js @@ -1,11 +1,11 @@ import React, { forwardRef, useMemo } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { NavLink } from 'react-router-dom'; -import { pxToRem } from '@strapi/helper-plugin'; import { Box, CardAction, Flex } from '@strapi/design-system'; +import { pxToRem } from '@strapi/helper-plugin'; import { Folder } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { NavLink } from 'react-router-dom'; +import styled from 'styled-components'; import { FolderCardContext } from '../contexts/FolderCard'; import useId from '../hooks/useId'; diff --git a/packages/core/upload/admin/src/components/FolderCard/FolderCardBody/FolderCardBody.js b/packages/core/upload/admin/src/components/FolderCard/FolderCardBody/FolderCardBody.js index 73cf40e291..c63289872d 100644 --- a/packages/core/upload/admin/src/components/FolderCard/FolderCardBody/FolderCardBody.js +++ b/packages/core/upload/admin/src/components/FolderCard/FolderCardBody/FolderCardBody.js @@ -1,7 +1,7 @@ import React from 'react'; -import styled from 'styled-components'; import { Flex } from '@strapi/design-system'; +import styled from 'styled-components'; import { useFolderCard } from '../contexts/FolderCard'; diff --git a/packages/core/upload/admin/src/components/FolderCard/FolderCardBodyAction/index.js b/packages/core/upload/admin/src/components/FolderCard/FolderCardBodyAction/index.js index 5c1c7dd5df..e72fd1f910 100644 --- a/packages/core/upload/admin/src/components/FolderCard/FolderCardBodyAction/index.js +++ b/packages/core/upload/admin/src/components/FolderCard/FolderCardBodyAction/index.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { Box } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { NavLink } from 'react-router-dom'; import styled from 'styled-components'; -import { Box } from '@strapi/design-system'; const BoxOutline = styled(Box)` &:focus { diff --git a/packages/core/upload/admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js b/packages/core/upload/admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js index cde2e30f9a..2265c7ade2 100644 --- a/packages/core/upload/admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js +++ b/packages/core/upload/admin/src/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js @@ -1,5 +1,7 @@ import React from 'react'; -import { Box, BaseCheckbox } from '@strapi/design-system'; + +import { BaseCheckbox, Box } from '@strapi/design-system'; + import { useFolderCard } from '../contexts/FolderCard'; export const FolderCardCheckbox = (props) => { diff --git a/packages/core/upload/admin/src/components/FolderCard/index.js b/packages/core/upload/admin/src/components/FolderCard/index.js index 0037bbcfc1..e445605e33 100644 --- a/packages/core/upload/admin/src/components/FolderCard/index.js +++ b/packages/core/upload/admin/src/components/FolderCard/index.js @@ -1,4 +1,4 @@ export { FolderCard } from './FolderCard'; export { FolderCardBody } from './FolderCardBody'; -export { FolderCardCheckbox } from './FolderCardCheckbox'; export { FolderCardBodyAction } from './FolderCardBodyAction'; +export { FolderCardCheckbox } from './FolderCardCheckbox'; diff --git a/packages/core/upload/admin/src/components/FolderCard/tests/FolderCard.test.js b/packages/core/upload/admin/src/components/FolderCard/tests/FolderCard.test.js index d069b2f2be..6044d48392 100644 --- a/packages/core/upload/admin/src/components/FolderCard/tests/FolderCard.test.js +++ b/packages/core/upload/admin/src/components/FolderCard/tests/FolderCard.test.js @@ -1,12 +1,13 @@ import React from 'react'; + +import { Flex, lightTheme, ThemeProvider, Typography } from '@strapi/design-system'; +import { act, fireEvent, render } from '@testing-library/react'; import { MemoryRouter } from 'react-router-dom'; -import { Flex, ThemeProvider, lightTheme, Typography } from '@strapi/design-system'; -import { render, fireEvent, act } from '@testing-library/react'; import { FolderCard } from '../FolderCard'; import { FolderCardBody } from '../FolderCardBody'; -import { FolderCardCheckbox } from '../FolderCardCheckbox'; import { FolderCardBodyAction } from '../FolderCardBodyAction'; +import { FolderCardCheckbox } from '../FolderCardCheckbox'; const ID_FIXTURE = 'folder'; diff --git a/packages/core/upload/admin/src/components/FolderGridList/FolderGridList.js b/packages/core/upload/admin/src/components/FolderGridList/FolderGridList.js index 8c3eb689ae..f2bfbb4ba9 100644 --- a/packages/core/upload/admin/src/components/FolderGridList/FolderGridList.js +++ b/packages/core/upload/admin/src/components/FolderGridList/FolderGridList.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { Box, Grid, KeyboardNavigable, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Box, KeyboardNavigable, Grid, Typography } from '@strapi/design-system'; export const FolderGridList = ({ title, children }) => { return ( diff --git a/packages/core/upload/admin/src/components/FolderGridList/tests/FolderGridList.test.js b/packages/core/upload/admin/src/components/FolderGridList/tests/FolderGridList.test.js index 00ad258f23..8b24c6513e 100644 --- a/packages/core/upload/admin/src/components/FolderGridList/tests/FolderGridList.test.js +++ b/packages/core/upload/admin/src/components/FolderGridList/tests/FolderGridList.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; import { MemoryRouter } from 'react-router-dom'; import { FolderGridList } from '../FolderGridList'; diff --git a/packages/core/upload/admin/src/components/MediaLibraryDialog/index.js b/packages/core/upload/admin/src/components/MediaLibraryDialog/index.js index 736634cd0b..2cb8ede954 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryDialog/index.js +++ b/packages/core/upload/admin/src/components/MediaLibraryDialog/index.js @@ -1,4 +1,5 @@ import React, { useState } from 'react'; + import PropTypes from 'prop-types'; import { AssetDialog } from '../AssetDialog'; diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.js b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.js index c3705953aa..21436ca02e 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.js @@ -1,11 +1,13 @@ import React from 'react'; -import styled from 'styled-components'; -import { File, FilePdf } from '@strapi/icons'; + import { Box, Flex } from '@strapi/design-system'; -import { AssetType, AssetDefinition } from '../../../constants'; -import { VideoPreview } from '../../AssetCard/VideoPreview'; -import { AudioPreview } from '../../AssetCard/AudioPreview'; +import { File, FilePdf } from '@strapi/icons'; +import styled from 'styled-components'; + +import { AssetDefinition, AssetType } from '../../../constants'; import { createAssetUrl } from '../../../utils'; +import { AudioPreview } from '../../AssetCard/AudioPreview'; +import { VideoPreview } from '../../AssetCard/VideoPreview'; const DocAsset = styled(Flex)` background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%); diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.js b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.js index caa9f860fd..134c633981 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssetActions.js @@ -1,12 +1,14 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { CarouselActions, IconButton } from '@strapi/design-system'; import { prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin'; +import { Pencil, Plus, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Plus, Trash, Pencil } from '@strapi/icons'; + +import { AssetDefinition } from '../../../constants'; import getTrad from '../../../utils/getTrad'; import { CopyLinkButton } from '../../CopyLinkButton'; -import { AssetDefinition } from '../../../constants'; export const CarouselAssetActions = ({ asset, onDeleteAsset, onAddAsset, onEditAsset }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.js b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.js index 9218097fd3..c5777c3ee0 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/CarouselAssets.js @@ -1,14 +1,17 @@ import React, { useState } from 'react'; + +import { CarouselInput, CarouselSlide } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { CarouselInput, CarouselSlide } from '@strapi/design-system'; -import getTrad from '../../../utils/getTrad'; + import { AssetDefinition } from '../../../constants'; -import { CarouselAssetActions } from './CarouselAssetActions'; -import { CarouselAsset } from './CarouselAsset'; -import { EmptyStateAsset } from './EmptyStateAsset'; +import getTrad from '../../../utils/getTrad'; import { EditAssetDialog } from '../../EditAssetDialog'; +import { CarouselAsset } from './CarouselAsset'; +import { CarouselAssetActions } from './CarouselAssetActions'; +import { EmptyStateAsset } from './EmptyStateAsset'; + export const CarouselAssets = ({ assets, disabled, diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.js b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.js index 3a7e3b1281..f897b0a03b 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/EmptyStateAsset.js @@ -1,12 +1,14 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { useIntl } from 'react-intl'; -import { Icon, Flex, Typography } from '@strapi/design-system'; + +import { Flex, Icon, Typography } from '@strapi/design-system'; import { PicturePlus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + +import { AssetSource } from '../../../constants'; import getTrad from '../../../utils/getTrad'; import { rawFileToAsset } from '../../../utils/rawFileToAsset'; -import { AssetSource } from '../../../constants'; const TextAlignTypography = styled(Typography)` align-items: center; diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/tests/CarouselAssets.test.js b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/tests/CarouselAssets.test.js index 7aa8ed4fa2..2d5cda7fcd 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/tests/CarouselAssets.test.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/Carousel/tests/CarouselAssets.test.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { CarouselAssets } from '../CarouselAssets'; diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/index.js b/packages/core/upload/admin/src/components/MediaLibraryInput/index.js index 280c59554c..7e91e6c85e 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/index.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/index.js @@ -1,15 +1,17 @@ import React, { useEffect, useState } from 'react'; + +import { useNotification } from '@strapi/helper-plugin'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useNotification } from '@strapi/helper-plugin'; -import { AssetDialog } from '../AssetDialog'; import { AssetDefinition } from '../../constants'; -import { CarouselAssets } from './Carousel/CarouselAssets'; -import { EditFolderDialog } from '../EditFolderDialog'; -import { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog'; import getAllowedFiles from '../../utils/getAllowedFiles'; import getTrad from '../../utils/getTrad'; +import { AssetDialog } from '../AssetDialog'; +import { EditFolderDialog } from '../EditFolderDialog'; +import { UploadAssetDialog } from '../UploadAssetDialog/UploadAssetDialog'; + +import { CarouselAssets } from './Carousel/CarouselAssets'; const STEPS = { AssetSelect: 'SelectAsset', diff --git a/packages/core/upload/admin/src/components/MediaLibraryInput/tests/MediaLibraryInput.test.js b/packages/core/upload/admin/src/components/MediaLibraryInput/tests/MediaLibraryInput.test.js index f3277c6d81..7029a71a21 100644 --- a/packages/core/upload/admin/src/components/MediaLibraryInput/tests/MediaLibraryInput.test.js +++ b/packages/core/upload/admin/src/components/MediaLibraryInput/tests/MediaLibraryInput.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClient, QueryClientProvider } from 'react-query'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { NotificationsProvider } from '@strapi/helper-plugin'; +import { render } from '@testing-library/react'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import { MediaLibraryInput } from '..'; import en from '../../../translations/en.json'; diff --git a/packages/core/upload/admin/src/components/PaginationFooter/index.js b/packages/core/upload/admin/src/components/PaginationFooter/index.js index 57d4a5f1a6..f99a5bf2c8 100644 --- a/packages/core/upload/admin/src/components/PaginationFooter/index.js +++ b/packages/core/upload/admin/src/components/PaginationFooter/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { Box, Flex } from '@strapi/design-system'; -import { PaginationURLQuery, PageSizeURLQuery } from '@strapi/helper-plugin'; +import { PageSizeURLQuery, PaginationURLQuery } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; export const PaginationFooter = ({ pagination }) => { return ( diff --git a/packages/core/upload/admin/src/components/PluginIcon/index.js b/packages/core/upload/admin/src/components/PluginIcon/index.js index 6291fda052..e0606fd781 100644 --- a/packages/core/upload/admin/src/components/PluginIcon/index.js +++ b/packages/core/upload/admin/src/components/PluginIcon/index.js @@ -5,6 +5,7 @@ */ import React from 'react'; + import { Landscape } from '@strapi/icons'; const PluginIcon = () => ; diff --git a/packages/core/upload/admin/src/components/SelectTree/Option.js b/packages/core/upload/admin/src/components/SelectTree/Option.js index 52a65e7d39..d1b7734663 100644 --- a/packages/core/upload/admin/src/components/SelectTree/Option.js +++ b/packages/core/upload/admin/src/components/SelectTree/Option.js @@ -1,12 +1,12 @@ -import PropTypes from 'prop-types'; import React from 'react'; -import { useIntl } from 'react-intl'; -import { components } from 'react-select'; -import styled from 'styled-components'; import { Flex, Icon, Typography } from '@strapi/design-system'; import { pxToRem } from '@strapi/helper-plugin'; -import { ChevronUp, ChevronDown } from '@strapi/icons'; +import { ChevronDown, ChevronUp } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { components } from 'react-select'; +import styled from 'styled-components'; const ToggleButton = styled(Flex)` align-self: flex-end; diff --git a/packages/core/upload/admin/src/components/SelectTree/SelectTree.js b/packages/core/upload/admin/src/components/SelectTree/SelectTree.js index d19fac309e..f8d8a31bd0 100644 --- a/packages/core/upload/admin/src/components/SelectTree/SelectTree.js +++ b/packages/core/upload/admin/src/components/SelectTree/SelectTree.js @@ -1,13 +1,13 @@ -import React, { useEffect, useState, useMemo } from 'react'; -import PropTypes from 'prop-types'; +import React, { useEffect, useMemo, useState } from 'react'; + /** * @note – This component is way too complex to convert to the DS version. */ // eslint-disable-next-line no-restricted-imports import { ReactSelect as Select } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import Option from './Option'; - import flattenTree from './utils/flattenTree'; import getOpenValues from './utils/getOpenValues'; import getValuesToClose from './utils/getValuesToClose'; diff --git a/packages/core/upload/admin/src/components/SelectTree/tests/SelectTree.test.js b/packages/core/upload/admin/src/components/SelectTree/tests/SelectTree.test.js index 9adf6ac1c9..324b3d5d2f 100644 --- a/packages/core/upload/admin/src/components/SelectTree/tests/SelectTree.test.js +++ b/packages/core/upload/admin/src/components/SelectTree/tests/SelectTree.test.js @@ -1,8 +1,8 @@ import React from 'react'; -import { render, act } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, render } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; import SelectTree from '../index'; diff --git a/packages/core/upload/admin/src/components/SortPicker/index.js b/packages/core/upload/admin/src/components/SortPicker/index.js index 46b7c77ec0..94fe930441 100644 --- a/packages/core/upload/admin/src/components/SortPicker/index.js +++ b/packages/core/upload/admin/src/components/SortPicker/index.js @@ -1,9 +1,11 @@ import React from 'react'; -import { useIntl } from 'react-intl'; + +import { MenuItem, SimpleMenu } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { SimpleMenu, MenuItem } from '@strapi/design-system'; -import { getTrad } from '../../utils'; +import { useIntl } from 'react-intl'; + import { sortOptions } from '../../constants'; +import { getTrad } from '../../utils'; const SortPicker = ({ onChangeSort }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/TableList/CellContent.js b/packages/core/upload/admin/src/components/TableList/CellContent.js index 7c85b29b5f..89e6b96f0d 100644 --- a/packages/core/upload/admin/src/components/TableList/CellContent.js +++ b/packages/core/upload/admin/src/components/TableList/CellContent.js @@ -1,12 +1,14 @@ import React from 'react'; + +import { Typography } from '@strapi/design-system'; +import { getFileExtension } from '@strapi/helper-plugin'; +import parseISO from 'date-fns/parseISO'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import parseISO from 'date-fns/parseISO'; -import { getFileExtension } from '@strapi/helper-plugin'; -import { Typography } from '@strapi/design-system'; + +import { formatBytes } from '../../utils'; import { PreviewCell } from './PreviewCell'; -import { formatBytes } from '../../utils'; export const CellContent = ({ cellType, contentType, content, name }) => { const { formatDate, formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/TableList/PreviewCell.js b/packages/core/upload/admin/src/components/TableList/PreviewCell.js index 88563cfb8e..73fd50e335 100644 --- a/packages/core/upload/admin/src/components/TableList/PreviewCell.js +++ b/packages/core/upload/admin/src/components/TableList/PreviewCell.js @@ -1,9 +1,10 @@ import React from 'react'; + +import { Avatar, Box, Icon, Initials } from '@strapi/design-system'; +import { getFileExtension, prefixFileUrlWithBackendUrl, pxToRem } from '@strapi/helper-plugin'; +import { Folder } from '@strapi/icons'; import PropTypes from 'prop-types'; import styled from 'styled-components'; -import { getFileExtension, prefixFileUrlWithBackendUrl, pxToRem } from '@strapi/helper-plugin'; -import { Avatar, Initials, Box, Icon } from '@strapi/design-system'; -import { Folder } from '@strapi/icons'; import { AssetType } from '../../constants'; import { createAssetUrl } from '../../utils'; diff --git a/packages/core/upload/admin/src/components/TableList/TableRows.js b/packages/core/upload/admin/src/components/TableList/TableRows.js index 15d1862810..6918be2adf 100644 --- a/packages/core/upload/admin/src/components/TableList/TableRows.js +++ b/packages/core/upload/admin/src/components/TableList/TableRows.js @@ -1,15 +1,17 @@ import React from 'react'; + +import { BaseCheckbox, Flex, IconButton, Tbody, Td, Tr } from '@strapi/design-system'; +import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; +import { Eye, Pencil } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { Link } from 'react-router-dom'; -import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; -import { BaseCheckbox, Flex, IconButton, Tbody, Td, Tr } from '@strapi/design-system'; -import { Pencil, Eye } from '@strapi/icons'; -import { CellContent } from './CellContent'; import { AssetDefinition, FolderDefinition, tableHeaders as cells } from '../../constants'; import { getTrad } from '../../utils'; +import { CellContent } from './CellContent'; + export const TableRows = ({ onChangeFolder, onEditAsset, diff --git a/packages/core/upload/admin/src/components/TableList/index.js b/packages/core/upload/admin/src/components/TableList/index.js index fefe7c93ac..b4c311da77 100644 --- a/packages/core/upload/admin/src/components/TableList/index.js +++ b/packages/core/upload/admin/src/components/TableList/index.js @@ -1,21 +1,23 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { BaseCheckbox, IconButton, Table, Th, Thead, - Tr, Tooltip, + Tr, Typography, VisuallyHidden, } from '@strapi/design-system'; import { CarretDown, CarretUp } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { AssetDefinition, FolderDefinition, tableHeaders } from '../../constants'; import { getTrad } from '../../utils'; -import { AssetDefinition, tableHeaders, FolderDefinition } from '../../constants'; + import { TableRows } from './TableRows'; export const TableList = ({ diff --git a/packages/core/upload/admin/src/components/TableList/tests/CellContent.test.js b/packages/core/upload/admin/src/components/TableList/tests/CellContent.test.js index 1f97a27860..2f11cb9bf7 100644 --- a/packages/core/upload/admin/src/components/TableList/tests/CellContent.test.js +++ b/packages/core/upload/admin/src/components/TableList/tests/CellContent.test.js @@ -1,7 +1,8 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { IntlProvider } from 'react-intl'; import { CellContent } from '../CellContent'; diff --git a/packages/core/upload/admin/src/components/TableList/tests/PreviewCell.test.js b/packages/core/upload/admin/src/components/TableList/tests/PreviewCell.test.js index b2b3186a04..96b3f662cd 100644 --- a/packages/core/upload/admin/src/components/TableList/tests/PreviewCell.test.js +++ b/packages/core/upload/admin/src/components/TableList/tests/PreviewCell.test.js @@ -1,6 +1,7 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { PreviewCell } from '../PreviewCell'; diff --git a/packages/core/upload/admin/src/components/TableList/tests/TableList.test.js b/packages/core/upload/admin/src/components/TableList/tests/TableList.test.js index 17a3ee5631..0b9f6a4810 100644 --- a/packages/core/upload/admin/src/components/TableList/tests/TableList.test.js +++ b/packages/core/upload/admin/src/components/TableList/tests/TableList.test.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { MemoryRouter } from 'react-router-dom'; -import { render, fireEvent } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { TableList } from '..'; diff --git a/packages/core/upload/admin/src/components/TableList/tests/TableRows.test.js b/packages/core/upload/admin/src/components/TableList/tests/TableRows.test.js index 05d7dc3f78..489bfabd9a 100644 --- a/packages/core/upload/admin/src/components/TableList/tests/TableRows.test.js +++ b/packages/core/upload/admin/src/components/TableList/tests/TableRows.test.js @@ -1,8 +1,9 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { MemoryRouter } from 'react-router-dom'; -import { render, fireEvent } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { TableRows } from '../TableRows'; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js index c417485701..07de8e114a 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js @@ -1,21 +1,24 @@ import React from 'react'; -import PropTypes from 'prop-types'; + import { - ModalHeader, - Typography, - Divider, Box, - Tabs, + Divider, + ModalHeader, Tab, TabGroup, - TabPanels, TabPanel, + TabPanels, + Tabs, + Typography, } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { FromUrlForm } from './FromUrlForm'; -import { FromComputerForm } from './FromComputerForm'; + import getTrad from '../../../utils/getTrad'; +import { FromComputerForm } from './FromComputerForm'; +import { FromUrlForm } from './FromUrlForm'; + export const AddAssetStep = ({ onClose, onAddAsset, trackedLocation }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js index 8b876c7d7a..9f5d93201e 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js @@ -1,14 +1,16 @@ /* eslint-disable jsx-a11y/label-has-associated-control */ import React, { useRef, useState } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; -import { Box, Flex, Typography, ModalFooter, Button } from '@strapi/design-system'; + +import { Box, Button, Flex, ModalFooter, Typography } from '@strapi/design-system'; import { useTracking } from '@strapi/helper-plugin'; import { PicturePlus } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; + +import { AssetSource } from '../../../constants'; import getTrad from '../../../utils/getTrad'; import { rawFileToAsset } from '../../../utils/rawFileToAsset'; -import { AssetSource } from '../../../constants'; const Wrapper = styled(Flex)` flex-direction: column; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js index c46e0150e9..7d5d9df1ec 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js @@ -1,12 +1,14 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { Box, ModalFooter, Textarea, Button } from '@strapi/design-system'; -import { useIntl } from 'react-intl'; + +import { Box, Button, ModalFooter, Textarea } from '@strapi/design-system'; import { Form, useTracking } from '@strapi/helper-plugin'; import { Formik } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import getTrad from '../../../utils/getTrad'; -import { urlSchema } from '../../../utils/urlYupSchema'; import { urlsToAssets } from '../../../utils/urlsToAssets'; +import { urlSchema } from '../../../utils/urlYupSchema'; export const FromUrlForm = ({ onClose, onAddAsset, trackedLocation }) => { const [loading, setLoading] = useState(false); diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/tests/FromComputerForm.test.js b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/tests/FromComputerForm.test.js index e4dd77ad14..35f8ce0f8b 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/tests/FromComputerForm.test.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/AddAssetStep/tests/FromComputerForm.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { render as renderTL } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { TrackingProvider } from '@strapi/helper-plugin'; +import { render as renderTL } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; + import { FromComputerForm } from '../FromComputerForm'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js index 429e1411d4..2c385fb819 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js @@ -1,23 +1,24 @@ -import React, { useState, useRef } from 'react'; -import PropTypes from 'prop-types'; -import { useTracking } from '@strapi/helper-plugin'; +import React, { useRef, useState } from 'react'; + import { - ModalHeader, - ModalBody, - ModalFooter, - Typography, Button, Flex, Grid, GridItem, KeyboardNavigable, + ModalBody, + ModalFooter, + ModalHeader, + Typography, } from '@strapi/design-system'; +import { useTracking } from '@strapi/helper-plugin'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { AssetDefinition } from '../../../constants'; +import getTrad from '../../../utils/getTrad'; import { AssetCard } from '../../AssetCard/AssetCard'; import { UploadingAssetCard } from '../../AssetCard/UploadingAssetCard'; -import getTrad from '../../../utils/getTrad'; -import { AssetDefinition } from '../../../constants'; const Status = { Idle: 'IDLE', diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/PendingAssetStep.test.js b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/PendingAssetStep.test.js index b8432873e3..a67fdde22a 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/PendingAssetStep.test.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/PendingAssetStep.test.js @@ -1,8 +1,10 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render as renderTL } from '@testing-library/react'; -import { QueryClientProvider, QueryClient } from 'react-query'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import { PendingAssetStep } from '../PendingAssetStep'; jest.mock('../../../../utils/getTrad', () => (x) => x); diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap index de1002f721..570720789b 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/PendingAssetStep/tests/__snapshots__/PendingAssetStep.test.js.snap @@ -633,14 +633,6 @@ exports[`PendingAssetStep snapshots the component with valid cards 1`] = ` opacity: 1; } -.c52 canvas, -.c52 video { - display: block; - pointer-events: none; - max-width: 100%; - max-height: 5.5rem; -} - .c51 svg { font-size: 3rem; } @@ -650,6 +642,14 @@ exports[`PendingAssetStep snapshots the component with valid cards 1`] = ` background: linear-gradient(180deg,#ffffff 0%,#f6f6f9 121.48%); } +.c52 canvas, +.c52 video { + display: block; + pointer-events: none; + max-width: 100%; + max-height: 5.5rem; +} + @media (max-width:68.75rem) { .c21 { grid-column: span; diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.js b/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.js index d316078dfe..030369e122 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/UploadAssetDialog.js @@ -1,12 +1,14 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; + import { ModalLayout } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import { AssetDefinition } from '../../constants'; +import { EditAssetDialog } from '../EditAssetDialog'; + import { AddAssetStep } from './AddAssetStep/AddAssetStep'; import { PendingAssetStep } from './PendingAssetStep/PendingAssetStep'; -import { EditAssetDialog } from '../EditAssetDialog'; -import { AssetDefinition } from '../../constants'; const Steps = { AddAsset: 'AddAsset', diff --git a/packages/core/upload/admin/src/components/UploadAssetDialog/tests/UploadAssetDialog.test.js b/packages/core/upload/admin/src/components/UploadAssetDialog/tests/UploadAssetDialog.test.js index d572f30318..5a743587af 100644 --- a/packages/core/upload/admin/src/components/UploadAssetDialog/tests/UploadAssetDialog.test.js +++ b/packages/core/upload/admin/src/components/UploadAssetDialog/tests/UploadAssetDialog.test.js @@ -1,10 +1,13 @@ import React from 'react'; -import { render as renderTL, fireEvent, screen, waitFor, within } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { TrackingProvider } from '@strapi/helper-plugin'; +import { fireEvent, render as renderTL, screen, waitFor, within } from '@testing-library/react'; +import { QueryClient, QueryClientProvider } from 'react-query'; + import en from '../../../translations/en.json'; import { UploadAssetDialog } from '../UploadAssetDialog'; + import { server } from './server'; jest.mock('../../../utils/getTrad', () => (x) => x); diff --git a/packages/core/upload/admin/src/components/UploadProgress/index.js b/packages/core/upload/admin/src/components/UploadProgress/index.js index 8dbd24ba4f..8817e7487a 100644 --- a/packages/core/upload/admin/src/components/UploadProgress/index.js +++ b/packages/core/upload/admin/src/components/UploadProgress/index.js @@ -1,9 +1,10 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; + +import { Flex, ProgressBar, Typography } from '@strapi/design-system'; import { Cross } from '@strapi/icons'; -import { Typography, Flex, ProgressBar } from '@strapi/design-system'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; +import styled from 'styled-components'; const BoxWrapper = styled(Flex)` border-radius: ${({ theme }) => `${theme.borderRadius} ${theme.borderRadius} 0 0`}; diff --git a/packages/core/upload/admin/src/components/UploadProgress/tests/index.test.js b/packages/core/upload/admin/src/components/UploadProgress/tests/index.test.js index 88706cc9c0..c7b402a482 100644 --- a/packages/core/upload/admin/src/components/UploadProgress/tests/index.test.js +++ b/packages/core/upload/admin/src/components/UploadProgress/tests/index.test.js @@ -5,10 +5,12 @@ */ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; + import { UploadProgress } from '..'; import en from '../../../translations/en.json'; diff --git a/packages/core/upload/admin/src/constants.js b/packages/core/upload/admin/src/constants.js index d751aedbb1..0143624087 100644 --- a/packages/core/upload/admin/src/constants.js +++ b/packages/core/upload/admin/src/constants.js @@ -1,4 +1,5 @@ import PropTypes from 'prop-types'; + import { getTrad } from './utils'; export const AssetType = { @@ -173,3 +174,43 @@ export const localStorageKeys = { modalView: `STRAPI_UPLOAD_MODAL_VIEW`, view: `STRAPI_UPLOAD_LIBRARY_VIEW`, }; + +export const PERMISSIONS = { + // This permission regards the main component (App) and is used to tell + // If the plugin link should be displayed in the menu + // And also if the plugin is accessible. This use case is found when a user types the url of the + // plugin directly in the browser + main: [ + { action: 'plugin::upload.read', subject: null }, + { + action: 'plugin::upload.assets.create', + subject: null, + }, + { + action: 'plugin::upload.assets.update', + subject: null, + }, + ], + copyLink: [ + { + action: 'plugin::upload.assets.copy-link', + subject: null, + }, + ], + create: [ + { + action: 'plugin::upload.assets.create', + subject: null, + }, + ], + download: [ + { + action: 'plugin::upload.assets.download', + subject: null, + }, + ], + read: [{ action: 'plugin::upload.read', subject: null }], + configureView: [{ action: 'plugin::upload.configure-view', subject: null }], + settings: [{ action: 'plugin::upload.settings.read', subject: null }], + update: [{ action: 'plugin::upload.assets.update', subject: null, fields: null }], +}; diff --git a/packages/core/upload/admin/src/hooks/tests/useAssets.test.js b/packages/core/upload/admin/src/hooks/tests/useAssets.test.js index c592a9017b..0096235e2f 100644 --- a/packages/core/upload/admin/src/hooks/tests/useAssets.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useAssets.test.js @@ -1,13 +1,13 @@ import React from 'react'; + +import { lightTheme, ThemeProvider, useNotifyAT } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { stringify } from 'qs'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme, useNotifyAT } from '@strapi/design-system'; - import { useAssets } from '../useAssets'; const notifyStatusMock = jest.fn(); diff --git a/packages/core/upload/admin/src/hooks/tests/useBulkMove.test.js b/packages/core/upload/admin/src/hooks/tests/useBulkMove.test.js index aaf3d1e1b5..9d5bbda8b0 100644 --- a/packages/core/upload/admin/src/hooks/tests/useBulkMove.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useBulkMove.test.js @@ -1,12 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient, useQueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider, useQueryClient } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { useBulkMove } from '../useBulkMove'; const FIXTURE_ASSETS = [ diff --git a/packages/core/upload/admin/src/hooks/tests/useBulkRemove.test.js b/packages/core/upload/admin/src/hooks/tests/useBulkRemove.test.js index 25011a6a64..cba73abe9f 100644 --- a/packages/core/upload/admin/src/hooks/tests/useBulkRemove.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useBulkRemove.test.js @@ -1,12 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient, useQueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider, useQueryClient } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { useBulkRemove } from '../useBulkRemove'; const FIXTURE_ASSETS = [ diff --git a/packages/core/upload/admin/src/hooks/tests/useConfig.test.js b/packages/core/upload/admin/src/hooks/tests/useConfig.test.js index 13fbef430e..feda81ee0c 100644 --- a/packages/core/upload/admin/src/hooks/tests/useConfig.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useConfig.test.js @@ -1,15 +1,15 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient, useQueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider, useQueryClient } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { sortOptions, pageSizes } from '../../constants'; -import { useConfig } from '../useConfig'; +import { pageSizes, sortOptions } from '../../constants'; import pluginId from '../../pluginId'; +import { useConfig } from '../useConfig'; const mockGetResponse = { data: { diff --git a/packages/core/upload/admin/src/hooks/tests/useEditFolder.test.js b/packages/core/upload/admin/src/hooks/tests/useEditFolder.test.js index 694dc7191e..d08514be85 100644 --- a/packages/core/upload/admin/src/hooks/tests/useEditFolder.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useEditFolder.test.js @@ -1,12 +1,12 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient, useQueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider, useQueryClient } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; - -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { useEditFolder } from '../useEditFolder'; const FOLDER_CREATE_FIXTURE = { diff --git a/packages/core/upload/admin/src/hooks/tests/useFolder.test.js b/packages/core/upload/admin/src/hooks/tests/useFolder.test.js index f31f0c305d..449a927656 100644 --- a/packages/core/upload/admin/src/hooks/tests/useFolder.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useFolder.test.js @@ -1,11 +1,11 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; -import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; -import { useNotifyAT, ThemeProvider, lightTheme } from '@strapi/design-system'; +import { lightTheme, ThemeProvider, useNotifyAT } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { BrowserRouter as Router, Route } from 'react-router-dom'; import { useFolder } from '../useFolder'; diff --git a/packages/core/upload/admin/src/hooks/tests/useFolderStructure.test.js b/packages/core/upload/admin/src/hooks/tests/useFolderStructure.test.js index a79882b632..2f540076b1 100644 --- a/packages/core/upload/admin/src/hooks/tests/useFolderStructure.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useFolderStructure.test.js @@ -1,9 +1,9 @@ import React from 'react'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; -import { IntlProvider } from 'react-intl'; import { useFetchClient } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { useFolderStructure } from '../useFolderStructure'; diff --git a/packages/core/upload/admin/src/hooks/tests/useFolders.test.js b/packages/core/upload/admin/src/hooks/tests/useFolders.test.js index c592e6dcc8..3cb4b1e8d1 100644 --- a/packages/core/upload/admin/src/hooks/tests/useFolders.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useFolders.test.js @@ -1,13 +1,13 @@ import React from 'react'; + +import { lightTheme, ThemeProvider, useNotifyAT } from '@strapi/design-system'; +import { NotificationsProvider, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { act, renderHook, waitFor } from '@testing-library/react'; import { stringify } from 'qs'; import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { QueryClient, QueryClientProvider } from 'react-query'; import { BrowserRouter as Router, Route } from 'react-router-dom'; -import { NotificationsProvider, useNotification, useFetchClient } from '@strapi/helper-plugin'; -import { useNotifyAT, ThemeProvider, lightTheme } from '@strapi/design-system'; - import { useFolders } from '../useFolders'; const notifyStatusMock = jest.fn(); diff --git a/packages/core/upload/admin/src/hooks/tests/useModalQueryParams.test.js b/packages/core/upload/admin/src/hooks/tests/useModalQueryParams.test.js index 79db1d308b..03dcc22b9b 100644 --- a/packages/core/upload/admin/src/hooks/tests/useModalQueryParams.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useModalQueryParams.test.js @@ -1,10 +1,11 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { renderHook, act } from '@testing-library/react'; -import { BrowserRouter as Router, Route } from 'react-router-dom'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { NotificationsProvider } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { act, renderHook } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { BrowserRouter as Router, Route } from 'react-router-dom'; import useModalQueryParams from '../useModalQueryParams'; diff --git a/packages/core/upload/admin/src/hooks/tests/useRemoveAsset.test.js b/packages/core/upload/admin/src/hooks/tests/useRemoveAsset.test.js index d0072540cb..f6661da686 100644 --- a/packages/core/upload/admin/src/hooks/tests/useRemoveAsset.test.js +++ b/packages/core/upload/admin/src/hooks/tests/useRemoveAsset.test.js @@ -1,12 +1,12 @@ import React from 'react'; -import { IntlProvider } from 'react-intl'; -import { QueryClientProvider, QueryClient, useQueryClient } from 'react-query'; -import { renderHook, act, waitFor } from '@testing-library/react'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { NotificationsProvider, useNotification } from '@strapi/helper-plugin'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { deleteRequest } from '../../utils/deleteRequest'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider, useQueryClient } from 'react-query'; +import { deleteRequest } from '../../utils/deleteRequest'; import { useRemoveAsset } from '../useRemoveAsset'; const ASSET_FIXTURE = { diff --git a/packages/core/upload/admin/src/hooks/useAssets.js b/packages/core/upload/admin/src/hooks/useAssets.js index a41feeeaa2..dd42149b54 100644 --- a/packages/core/upload/admin/src/hooks/useAssets.js +++ b/packages/core/upload/admin/src/hooks/useAssets.js @@ -1,8 +1,8 @@ -import { stringify } from 'qs'; -import { useQuery } from 'react-query'; import { useNotifyAT } from '@strapi/design-system'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { stringify } from 'qs'; import { useIntl } from 'react-intl'; +import { useQuery } from 'react-query'; import pluginId from '../pluginId'; import { getRequestUrl } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useBulkMove.js b/packages/core/upload/admin/src/hooks/useBulkMove.js index 6958bd27ff..228ec13c41 100644 --- a/packages/core/upload/admin/src/hooks/useBulkMove.js +++ b/packages/core/upload/admin/src/hooks/useBulkMove.js @@ -1,5 +1,5 @@ +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import { useMutation, useQueryClient } from 'react-query'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; import pluginId from '../pluginId'; import { getRequestUrl, getTrad } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useBulkRemove.js b/packages/core/upload/admin/src/hooks/useBulkRemove.js index 3f099223eb..ae2038dcf4 100644 --- a/packages/core/upload/admin/src/hooks/useBulkRemove.js +++ b/packages/core/upload/admin/src/hooks/useBulkRemove.js @@ -1,5 +1,5 @@ +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import { useMutation, useQueryClient } from 'react-query'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; import pluginId from '../pluginId'; import { getRequestUrl, getTrad } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useConfig.js b/packages/core/upload/admin/src/hooks/useConfig.js index b470917028..858e762b83 100644 --- a/packages/core/upload/admin/src/hooks/useConfig.js +++ b/packages/core/upload/admin/src/hooks/useConfig.js @@ -1,5 +1,5 @@ +import { useFetchClient, useNotification, useTracking } from '@strapi/helper-plugin'; import { useMutation, useQuery, useQueryClient } from 'react-query'; -import { useNotification, useTracking, useFetchClient } from '@strapi/helper-plugin'; import pluginId from '../pluginId'; diff --git a/packages/core/upload/admin/src/hooks/useCropImg.js b/packages/core/upload/admin/src/hooks/useCropImg.js index 1531830317..53613908de 100644 --- a/packages/core/upload/admin/src/hooks/useCropImg.js +++ b/packages/core/upload/admin/src/hooks/useCropImg.js @@ -1,5 +1,6 @@ +import { useEffect, useRef, useState } from 'react'; + import Cropper from 'cropperjs'; -import { useRef, useEffect, useState } from 'react'; const QUALITY = 1; diff --git a/packages/core/upload/admin/src/hooks/useEditAsset.js b/packages/core/upload/admin/src/hooks/useEditAsset.js index e1f3efc13e..ef36694975 100644 --- a/packages/core/upload/admin/src/hooks/useEditAsset.js +++ b/packages/core/upload/admin/src/hooks/useEditAsset.js @@ -1,11 +1,12 @@ -import axios from 'axios'; import { useRef, useState } from 'react'; -import { useMutation, useQueryClient } from 'react-query'; -import { useIntl } from 'react-intl'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; -import { getTrad } from '../utils'; +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; +import axios from 'axios'; +import { useIntl } from 'react-intl'; +import { useMutation, useQueryClient } from 'react-query'; + import pluginId from '../pluginId'; +import { getTrad } from '../utils'; const editAssetRequest = (asset, file, cancelToken, onProgress, post) => { const endpoint = `/${pluginId}?id=${asset.id}`; diff --git a/packages/core/upload/admin/src/hooks/useEditFolder.js b/packages/core/upload/admin/src/hooks/useEditFolder.js index 661496df9b..25c4ad40e7 100644 --- a/packages/core/upload/admin/src/hooks/useEditFolder.js +++ b/packages/core/upload/admin/src/hooks/useEditFolder.js @@ -1,5 +1,5 @@ -import { useMutation, useQueryClient } from 'react-query'; import { useFetchClient } from '@strapi/helper-plugin'; +import { useMutation, useQueryClient } from 'react-query'; import pluginId from '../pluginId'; import { getRequestUrl } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useFolder.js b/packages/core/upload/admin/src/hooks/useFolder.js index 916a3dc774..d522b4a4f3 100644 --- a/packages/core/upload/admin/src/hooks/useFolder.js +++ b/packages/core/upload/admin/src/hooks/useFolder.js @@ -1,5 +1,5 @@ +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import { useQuery } from 'react-query'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; import pluginId from '../pluginId'; import { getRequestUrl, getTrad } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useFolderStructure.js b/packages/core/upload/admin/src/hooks/useFolderStructure.js index 197fc7c101..2237a97a23 100644 --- a/packages/core/upload/admin/src/hooks/useFolderStructure.js +++ b/packages/core/upload/admin/src/hooks/useFolderStructure.js @@ -1,8 +1,10 @@ -import { useQuery } from 'react-query'; -import { useIntl } from 'react-intl'; import { useFetchClient } from '@strapi/helper-plugin'; +import { useIntl } from 'react-intl'; +import { useQuery } from 'react-query'; + import pluginId from '../pluginId'; import { getRequestUrl, getTrad } from '../utils'; + import { recursiveRenameKeys } from './utils/rename-keys'; const FIELD_MAPPING = { diff --git a/packages/core/upload/admin/src/hooks/useFolders.js b/packages/core/upload/admin/src/hooks/useFolders.js index db73a2021f..f3bc994b84 100644 --- a/packages/core/upload/admin/src/hooks/useFolders.js +++ b/packages/core/upload/admin/src/hooks/useFolders.js @@ -1,8 +1,8 @@ -import { stringify } from 'qs'; -import { useQuery } from 'react-query'; import { useNotifyAT } from '@strapi/design-system'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { stringify } from 'qs'; import { useIntl } from 'react-intl'; +import { useQuery } from 'react-query'; import pluginId from '../pluginId'; import { getRequestUrl } from '../utils'; diff --git a/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js b/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js index 6797416293..1b17e4205b 100644 --- a/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js +++ b/packages/core/upload/admin/src/hooks/useMediaLibraryPermissions.js @@ -1,10 +1,12 @@ import { useMemo } from 'react'; + import { useRBAC } from '@strapi/helper-plugin'; import omit from 'lodash/omit'; -import pluginPermissions from '../permissions'; + +import { PERMISSIONS } from '../constants'; export const useMediaLibraryPermissions = () => { - const permissions = useMemo(() => omit(pluginPermissions, 'main'), []); + const permissions = useMemo(() => omit(PERMISSIONS, 'main'), []); const { allowedActions, isLoading } = useRBAC(permissions); return { ...allowedActions, isLoading }; diff --git a/packages/core/upload/admin/src/hooks/useModalQueryParams.js b/packages/core/upload/admin/src/hooks/useModalQueryParams.js index fab8f84947..d7b7f03ab5 100644 --- a/packages/core/upload/admin/src/hooks/useModalQueryParams.js +++ b/packages/core/upload/admin/src/hooks/useModalQueryParams.js @@ -1,7 +1,8 @@ -import { useState, useEffect } from 'react'; -import { useTracking } from '@strapi/helper-plugin'; +import { useEffect, useState } from 'react'; +import { useTracking } from '@strapi/helper-plugin'; import { stringify } from 'qs'; + import { useConfig } from './useConfig'; const useModalQueryParams = (initialState) => { diff --git a/packages/core/upload/admin/src/hooks/useRemoveAsset.js b/packages/core/upload/admin/src/hooks/useRemoveAsset.js index cb8395784a..8b2041a2cf 100644 --- a/packages/core/upload/admin/src/hooks/useRemoveAsset.js +++ b/packages/core/upload/admin/src/hooks/useRemoveAsset.js @@ -1,8 +1,8 @@ -import { useMutation, useQueryClient } from 'react-query'; import { useNotification } from '@strapi/helper-plugin'; +import { useMutation, useQueryClient } from 'react-query'; -import { deleteRequest } from '../utils/deleteRequest'; import pluginId from '../pluginId'; +import { deleteRequest } from '../utils/deleteRequest'; export const useRemoveAsset = (onSuccess) => { const toggleNotification = useNotification(); diff --git a/packages/core/upload/admin/src/hooks/useUpload.js b/packages/core/upload/admin/src/hooks/useUpload.js index 8efd04ff17..65017251bc 100644 --- a/packages/core/upload/admin/src/hooks/useUpload.js +++ b/packages/core/upload/admin/src/hooks/useUpload.js @@ -1,11 +1,12 @@ -import axios from 'axios'; import { useRef, useState } from 'react'; -import { useMutation, useQueryClient } from 'react-query'; -import { useIntl } from 'react-intl'; -import { useFetchClient } from '@strapi/helper-plugin'; -import { getTrad } from '../utils'; +import { useFetchClient } from '@strapi/helper-plugin'; +import axios from 'axios'; +import { useIntl } from 'react-intl'; +import { useMutation, useQueryClient } from 'react-query'; + import pluginId from '../pluginId'; +import { getTrad } from '../utils'; const endpoint = `/${pluginId}`; diff --git a/packages/core/upload/admin/src/index.js b/packages/core/upload/admin/src/index.js index 768c3c49a9..5c54a2b8ff 100644 --- a/packages/core/upload/admin/src/index.js +++ b/packages/core/upload/admin/src/index.js @@ -5,11 +5,13 @@ // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED import { prefixPluginTranslations } from '@strapi/helper-plugin'; + import pluginPkg from '../../package.json'; -import PluginIcon from './components/PluginIcon'; -import pluginPermissions from './permissions'; -import { MediaLibraryInput } from './components/MediaLibraryInput'; + import { MediaLibraryDialog } from './components/MediaLibraryDialog'; +import { MediaLibraryInput } from './components/MediaLibraryInput'; +import PluginIcon from './components/PluginIcon'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import getTrad from './utils/getTrad'; @@ -24,7 +26,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Media Library', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import(/* webpackChunkName: "upload" */ './pages/App'); @@ -55,7 +57,7 @@ export default { return component; }, - permissions: pluginPermissions.settings, + permissions: PERMISSIONS.settings, }); }, async registerTrads({ locales }) { diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/Settings.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/Settings.js index edee743356..12cefe16c0 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/Settings.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/Settings.js @@ -1,9 +1,11 @@ import React from 'react'; + +import { Box, Grid, GridItem, Option, Select } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Grid, GridItem, Box, Select, Option } from '@strapi/design-system'; -import getTrad from '../../../../utils/getTrad'; + import { pageSizes, sortOptions } from '../../../../constants'; +import getTrad from '../../../../utils/getTrad'; const Settings = ({ sort = '', pageSize = 10, onChange }) => { const { formatMessage } = useIntl(); diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/tests/Settings.test.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/tests/Settings.test.js index 4a7b989284..84a5d48ee4 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/tests/Settings.test.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/components/tests/Settings.test.js @@ -1,13 +1,14 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider } from '@strapi/helper-plugin'; import { render as renderRTL } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { TrackingProvider } from '@strapi/helper-plugin'; -import { MemoryRouter } from 'react-router-dom'; import { IntlProvider } from 'react-intl'; +import { MemoryRouter } from 'react-router-dom'; -import { Settings } from '../Settings'; import { pageSizes, sortOptions } from '../../../../../constants'; +import { Settings } from '../Settings'; const testPageSize = pageSizes[0]; const testSort = sortOptions[0].value; diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.js index 071640c1b8..b204b44d07 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/index.js @@ -1,26 +1,26 @@ -import React, { useState, useReducer } from 'react'; -import { useIntl } from 'react-intl'; -import isEqual from 'lodash/isEqual'; -import PropTypes from 'prop-types'; +import React, { useReducer, useState } from 'react'; -import { Layout, HeaderLayout, ContentLayout, Button, Main } from '@strapi/design-system'; +import { Button, ContentLayout, HeaderLayout, Layout, Main } from '@strapi/design-system'; import { - useNotification, ConfirmDialog, Link, - useTracking, useFocusWhenNavigate, + useNotification, + useTracking, } from '@strapi/helper-plugin'; -import { Check, ArrowLeft } from '@strapi/icons'; -import { Settings } from './components/Settings'; - -import reducer from './state/reducer'; -import { init, initialState } from './state/init'; -import { onChange, setLoaded } from './state/actions'; +import { ArrowLeft, Check } from '@strapi/icons'; +import isEqual from 'lodash/isEqual'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { useConfig } from '../../../hooks/useConfig'; import pluginID from '../../../pluginId'; import getTrad from '../../../utils/getTrad'; -import { useConfig } from '../../../hooks/useConfig'; + +import { Settings } from './components/Settings'; +import { onChange, setLoaded } from './state/actions'; +import { init, initialState } from './state/init'; +import reducer from './state/reducer'; const ConfigureTheView = ({ config }) => { const { trackUsage } = useTracking(); diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/actions.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/actions.js index a3f008a649..bb85d9f24b 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/actions.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/actions.js @@ -1,4 +1,4 @@ -import { SET_LOADED, ON_CHANGE } from './actionTypes'; +import { ON_CHANGE, SET_LOADED } from './actionTypes'; export const onChange = ({ name, value }) => ({ type: ON_CHANGE, diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/reducer.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/reducer.js index 2de14d76b1..33758f14af 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/reducer.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/reducer.js @@ -1,6 +1,7 @@ import produce from 'immer'; // current -import set from 'lodash/set'; import get from 'lodash/get'; +import set from 'lodash/set'; + import { ON_CHANGE, SET_LOADED } from './actionTypes'; import { init, initialState } from './init'; diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/tests/reducer.test.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/tests/reducer.test.js index ff98a83bbd..abb6bb191d 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/tests/reducer.test.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/state/tests/reducer.test.js @@ -1,5 +1,5 @@ -import reducer from '../reducer'; import { ON_CHANGE, SET_LOADED } from '../actionTypes'; +import reducer from '../reducer'; describe('Upload | ConfigureTheView | reducer', () => { let state; diff --git a/packages/core/upload/admin/src/pages/App/ConfigureTheView/tests/ConfigureTheView.test.js b/packages/core/upload/admin/src/pages/App/ConfigureTheView/tests/ConfigureTheView.test.js index a8a816a847..1f134003f6 100644 --- a/packages/core/upload/admin/src/pages/App/ConfigureTheView/tests/ConfigureTheView.test.js +++ b/packages/core/upload/admin/src/pages/App/ConfigureTheView/tests/ConfigureTheView.test.js @@ -1,12 +1,14 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { render as renderRTL, waitFor, fireEvent } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { TrackingProvider } from '@strapi/helper-plugin'; -import { MemoryRouter } from 'react-router-dom'; +import { fireEvent, render as renderRTL, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import { IntlProvider } from 'react-intl'; +import { MemoryRouter } from 'react-router-dom'; + import ConfigureTheView from '..'; -import { sortOptions, pageSizes } from '../../../../constants'; +import { pageSizes, sortOptions } from '../../../../constants'; const mutateAsync = jest.fn(); jest.mock('../../../../hooks/useConfig', () => ({ diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkActions.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkActions.js index cb3f441a0f..58ebb7a94a 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkActions.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkActions.js @@ -1,10 +1,12 @@ import React from 'react'; + +import { Flex, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Flex, Typography } from '@strapi/design-system'; import { AssetDefinition, FolderDefinition } from '../../../../constants'; import getTrad from '../../../../utils/getTrad'; + import { BulkDeleteButton } from './BulkDeleteButton'; import { BulkMoveButton } from './BulkMoveButton'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.js index 43555811de..2a793ebd5d 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkDeleteButton.js @@ -1,9 +1,10 @@ import React, { useState } from 'react'; + +import { Button } from '@strapi/design-system'; +import { ConfirmDialog } from '@strapi/helper-plugin'; +import { Trash } from '@strapi/icons'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { Button } from '@strapi/design-system'; -import { Trash } from '@strapi/icons'; -import { ConfirmDialog } from '@strapi/helper-plugin'; import { AssetDefinition, FolderDefinition } from '../../../../constants'; import { useBulkRemove } from '../../../../hooks/useBulkRemove'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkMoveButton.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkMoveButton.js index 05f5d2561b..1acf538b87 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkMoveButton.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/BulkMoveButton.js @@ -1,8 +1,9 @@ import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { Button } from '@strapi/design-system'; import { Folder } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { BulkMoveDialog } from '../../../../components/BulkMoveDialog'; import { AssetDefinition, FolderDefinition } from '../../../../constants'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js index 8841974bde..1a7dac251d 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/EmptyOrNoPermissions.js @@ -1,9 +1,9 @@ -import PropTypes from 'prop-types'; import React from 'react'; -import { useIntl } from 'react-intl'; import { Button } from '@strapi/design-system'; import { EmptyPermissions, Plus } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; import { EmptyAssets } from '../../../../components/EmptyAssets'; import { getTrad } from '../../../../utils'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Filters.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Filters.js index 010ba079f5..9bcb87f9f5 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Filters.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Filters.js @@ -1,8 +1,10 @@ -import React, { useState, useRef } from 'react'; +import React, { useRef, useState } from 'react'; + import { Button } from '@strapi/design-system'; import { useQueryParams, useTracking } from '@strapi/helper-plugin'; import { Filter } from '@strapi/icons'; import { useIntl } from 'react-intl'; + import FilterList from '../../../../components/FilterList'; import FilterPopover from '../../../../components/FilterPopover'; import displayedFilters from '../../../../utils/displayedFilters'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.js index 7e82815b09..e54b1f920d 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/Header.js @@ -1,14 +1,16 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { stringify } from 'qs'; -import { useLocation } from 'react-router-dom'; + +import { Button, Flex, HeaderLayout, Link } from '@strapi/design-system'; import { useQueryParams } from '@strapi/helper-plugin'; -import { HeaderLayout, Button, Flex, Link } from '@strapi/design-system'; import { ArrowLeft, Plus } from '@strapi/icons'; -import { getTrad } from '../../../../utils'; -import { FolderDefinition, BreadcrumbsDefinition } from '../../../../constants'; +import PropTypes from 'prop-types'; +import { stringify } from 'qs'; +import { useIntl } from 'react-intl'; +import { useLocation } from 'react-router-dom'; + import { Breadcrumbs } from '../../../../components/Breadcrumbs'; +import { BreadcrumbsDefinition, FolderDefinition } from '../../../../constants'; +import { getTrad } from '../../../../utils'; export const Header = ({ breadcrumbs, diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkActions.test.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkActions.test.js index 6e0ac2d54b..caf4ed931e 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkActions.test.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkActions.test.js @@ -1,9 +1,10 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; import { BulkActions } from '../BulkActions'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkDeleteButton.test.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkDeleteButton.test.js index 08c70b0da4..b3e4d1ab3e 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkDeleteButton.test.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkDeleteButton.test.js @@ -1,12 +1,13 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { render, fireEvent, waitFor, act } from '@testing-library/react'; -import { MemoryRouter } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { BulkDeleteButton } from '../BulkDeleteButton'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { act, fireEvent, render, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; + import { useBulkRemove } from '../../../../../hooks/useBulkRemove'; +import { BulkDeleteButton } from '../BulkDeleteButton'; jest.mock('../../../../../hooks/useBulkRemove'); diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkMoveButton.test.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkMoveButton.test.js index dcf82171fd..c2ef3c260c 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkMoveButton.test.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/BulkMoveButton.test.js @@ -1,13 +1,14 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { render, fireEvent, waitFor, act, screen } from '@testing-library/react'; -import { within } from '@testing-library/dom'; -import { MemoryRouter } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { BulkMoveButton } from '../BulkMoveButton'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { within } from '@testing-library/dom'; +import { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; + import { useBulkMove } from '../../../../../hooks/useBulkMove'; +import { BulkMoveButton } from '../BulkMoveButton'; jest.mock('../../../../../hooks/useBulkMove'); jest.mock('../../../../../hooks/useFolderStructure'); diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/EmptyOrNoPermissions.test.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/EmptyOrNoPermissions.test.js index 90f98bd53f..4f3fc6e9e7 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/EmptyOrNoPermissions.test.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/EmptyOrNoPermissions.test.js @@ -1,5 +1,6 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/Header.test.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/Header.test.js index 87982ee971..1ed1291caf 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/Header.test.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/components/tests/Header.test.js @@ -1,10 +1,11 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { render } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { useQueryParams } from '@strapi/helper-plugin'; -import { MemoryRouter } from 'react-router-dom'; +import { render } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; import { Header } from '../Header'; diff --git a/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js b/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js index 2abdefac16..001b937efe 100644 --- a/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js +++ b/packages/core/upload/admin/src/pages/App/MediaLibrary/index.js @@ -1,61 +1,61 @@ -import React, { useState, useRef } from 'react'; -import { useIntl } from 'react-intl'; -import styled from 'styled-components'; -import { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom'; -import { stringify } from 'qs'; +import React, { useRef, useState } from 'react'; + import { - LoadingIndicatorPage, - useFocusWhenNavigate, - AnErrorOccurred, - SearchURLQuery, - useSelectionState, - useQueryParams, - useTracking, - CheckPermissions, - usePersistentState, -} from '@strapi/helper-plugin'; -import { - Layout, - ContentLayout, ActionLayout, - Main, - Box, - Divider, BaseCheckbox, - IconButton, - Typography, - GridItem, + Box, + ContentLayout, + Divider, Flex, + GridItem, + IconButton, + Layout, + Main, + Typography, VisuallyHidden, } from '@strapi/design-system'; -import { Pencil, Cog, Grid, List } from '@strapi/icons'; +import { + AnErrorOccurred, + CheckPermissions, + LoadingIndicatorPage, + SearchURLQuery, + useFocusWhenNavigate, + usePersistentState, + useQueryParams, + useSelectionState, + useTracking, +} from '@strapi/helper-plugin'; +import { Cog, Grid, List, Pencil } from '@strapi/icons'; +import { stringify } from 'qs'; +import { useIntl } from 'react-intl'; +import { Link as ReactRouterLink, useHistory, useLocation } from 'react-router-dom'; +import styled from 'styled-components'; -import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog'; -import { EditFolderDialog } from '../../../components/EditFolderDialog'; -import { EditAssetDialog } from '../../../components/EditAssetDialog'; import { AssetGridList } from '../../../components/AssetGridList'; -import { FolderGridList } from '../../../components/FolderGridList'; -import { TableList } from '../../../components/TableList'; -import SortPicker from '../../../components/SortPicker'; -import { PaginationFooter } from '../../../components/PaginationFooter'; -import { BulkActions } from './components/BulkActions'; -import { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions'; +import { EditAssetDialog } from '../../../components/EditAssetDialog'; +import { EditFolderDialog } from '../../../components/EditFolderDialog'; import { FolderCard, FolderCardBody, - FolderCardCheckbox, FolderCardBodyAction, + FolderCardCheckbox, } from '../../../components/FolderCard'; -import { Filters } from './components/Filters'; -import { Header } from './components/Header'; - +import { FolderGridList } from '../../../components/FolderGridList'; +import { PaginationFooter } from '../../../components/PaginationFooter'; +import SortPicker from '../../../components/SortPicker'; +import { TableList } from '../../../components/TableList'; +import { UploadAssetDialog } from '../../../components/UploadAssetDialog/UploadAssetDialog'; +import { localStorageKeys, PERMISSIONS, viewOptions } from '../../../constants'; import { useAssets } from '../../../hooks/useAssets'; +import { useFolder } from '../../../hooks/useFolder'; import { useFolders } from '../../../hooks/useFolders'; import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions'; -import { useFolder } from '../../../hooks/useFolder'; -import { getTrad, containsAssetFilter, getBreadcrumbDataML, getFolderURL } from '../../../utils'; -import pluginPermissions from '../../../permissions'; -import { localStorageKeys, viewOptions } from '../../../constants'; +import { containsAssetFilter, getBreadcrumbDataML, getFolderURL, getTrad } from '../../../utils'; + +import { BulkActions } from './components/BulkActions'; +import { EmptyOrNoPermissions } from './components/EmptyOrNoPermissions'; +import { Filters } from './components/Filters'; +import { Header } from './components/Header'; const BoxWithHeight = styled(Box)` height: ${32 / 16}rem; @@ -256,7 +256,7 @@ export const MediaLibrary = () => { } endActions={ <> - + import(/* webpackChunkName: "Upload_ConfigureTheView" */ './ConfigureTheView') diff --git a/packages/core/upload/admin/src/pages/App/tests/Upload.test.js b/packages/core/upload/admin/src/pages/App/tests/Upload.test.js index 2dc9f6da7f..0f3111d1a0 100644 --- a/packages/core/upload/admin/src/pages/App/tests/Upload.test.js +++ b/packages/core/upload/admin/src/pages/App/tests/Upload.test.js @@ -1,13 +1,14 @@ import React from 'react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { QueryClientProvider, QueryClient } from 'react-query'; -import { render as renderTL, screen } from '@testing-library/react'; -import { TrackingProvider } from '@strapi/helper-plugin'; -import { MemoryRouter } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { useConfig } from '../../../hooks/useConfig'; +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { TrackingProvider } from '@strapi/helper-plugin'; +import { render as renderTL, screen } from '@testing-library/react'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter } from 'react-router-dom'; + import Upload from '..'; +import { useConfig } from '../../../hooks/useConfig'; jest.mock('../../../hooks/useConfig'); jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/upload/admin/src/pages/SettingsPage/index.js b/packages/core/upload/admin/src/pages/SettingsPage/index.js index ba2cc5b627..2d04c51279 100644 --- a/packages/core/upload/admin/src/pages/SettingsPage/index.js +++ b/packages/core/upload/admin/src/pages/SettingsPage/index.js @@ -1,34 +1,37 @@ import React, { useEffect, useReducer, useRef } from 'react'; -import { Helmet } from 'react-helmet'; -import { useIntl } from 'react-intl'; + +import { + Box, + Button, + ContentLayout, + Flex, + Grid, + GridItem, + HeaderLayout, + Layout, + Main, + ToggleInput, + Typography, +} from '@strapi/design-system'; import { CheckPagePermissions, LoadingIndicatorPage, + useFetchClient, useFocusWhenNavigate, useNotification, useOverlayBlocker, - useFetchClient, } from '@strapi/helper-plugin'; import { Check } from '@strapi/icons'; -import { - Box, - Flex, - ToggleInput, - Typography, - Button, - Main, - Grid, - GridItem, - ContentLayout, - HeaderLayout, - Layout, -} from '@strapi/design-system'; import axios from 'axios'; import isEqual from 'lodash/isEqual'; +import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; + +import { PERMISSIONS } from '../../constants'; import { getRequestUrl, getTrad } from '../../utils'; + import init from './init'; import reducer, { initialState } from './reducer'; -import pluginPermissions from '../../permissions'; export const SettingsPage = () => { const { formatMessage } = useIntl(); @@ -272,7 +275,7 @@ export const SettingsPage = () => { }; const ProtectedSettingsPage = () => ( - + ); diff --git a/packages/core/upload/admin/src/pages/SettingsPage/tests/index.test.js b/packages/core/upload/admin/src/pages/SettingsPage/tests/index.test.js index 81c1432439..a3b479f158 100644 --- a/packages/core/upload/admin/src/pages/SettingsPage/tests/index.test.js +++ b/packages/core/upload/admin/src/pages/SettingsPage/tests/index.test.js @@ -5,10 +5,13 @@ */ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; import { render, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; + import { SettingsPage } from '../index'; + import server from './utils/server'; jest.mock('@strapi/helper-plugin', () => ({ diff --git a/packages/core/upload/admin/src/pages/SettingsPage/tests/utils/server.js b/packages/core/upload/admin/src/pages/SettingsPage/tests/utils/server.js index 9e231a74f3..6f8a2dd190 100644 --- a/packages/core/upload/admin/src/pages/SettingsPage/tests/utils/server.js +++ b/packages/core/upload/admin/src/pages/SettingsPage/tests/utils/server.js @@ -1,5 +1,5 @@ -import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { setupServer } from 'msw/node'; const handlers = [ rest.get('*/settings', (req, res, ctx) => { diff --git a/packages/core/upload/admin/src/permissions.js b/packages/core/upload/admin/src/permissions.js deleted file mode 100644 index 535a032e1d..0000000000 --- a/packages/core/upload/admin/src/permissions.js +++ /dev/null @@ -1,41 +0,0 @@ -const pluginPermissions = { - // This permission regards the main component (App) and is used to tell - // If the plugin link should be displayed in the menu - // And also if the plugin is accessible. This use case is found when a user types the url of the - // plugin directly in the browser - main: [ - { action: 'plugin::upload.read', subject: null }, - { - action: 'plugin::upload.assets.create', - subject: null, - }, - { - action: 'plugin::upload.assets.update', - subject: null, - }, - ], - copyLink: [ - { - action: 'plugin::upload.assets.copy-link', - subject: null, - }, - ], - create: [ - { - action: 'plugin::upload.assets.create', - subject: null, - }, - ], - download: [ - { - action: 'plugin::upload.assets.download', - subject: null, - }, - ], - read: [{ action: 'plugin::upload.read', subject: null }], - configureView: [{ action: 'plugin::upload.configure-view', subject: null }], - settings: [{ action: 'plugin::upload.settings.read', subject: null }], - update: [{ action: 'plugin::upload.assets.update', subject: null, fields: null }], -}; - -export default pluginPermissions; diff --git a/packages/core/upload/admin/src/utils/deleteRequest.js b/packages/core/upload/admin/src/utils/deleteRequest.js index 80ef952fc4..6ea6e6c03d 100644 --- a/packages/core/upload/admin/src/utils/deleteRequest.js +++ b/packages/core/upload/admin/src/utils/deleteRequest.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import getRequestUrl from './getRequestUrl'; export const deleteRequest = (type, id) => { diff --git a/packages/core/upload/admin/src/utils/getBreadcrumbDataML.js b/packages/core/upload/admin/src/utils/getBreadcrumbDataML.js index 8de6e755a9..f5f8b47fd0 100644 --- a/packages/core/upload/admin/src/utils/getBreadcrumbDataML.js +++ b/packages/core/upload/admin/src/utils/getBreadcrumbDataML.js @@ -1,5 +1,5 @@ -import getTrad from './getTrad'; import getFolderURL from './getFolderURL'; +import getTrad from './getTrad'; const getBreadcrumbDataML = (folder, { pathname, query }) => { let data = [ diff --git a/packages/core/upload/admin/src/utils/index.js b/packages/core/upload/admin/src/utils/index.js index c83cc51fe5..93ceb98258 100644 --- a/packages/core/upload/admin/src/utils/index.js +++ b/packages/core/upload/admin/src/utils/index.js @@ -1,13 +1,13 @@ +export { default as containsAssetFilter } from './containsAssetFilter'; export { default as createAssetUrl } from './createAssetUrl'; -export { default as formatBytes } from './formatBytes'; -export { default as getRequestUrl } from './getRequestUrl'; -export { default as getTrad } from './getTrad'; export { default as findRecursiveFolderByValue } from './findRecursiveFolderByValue'; export { default as findRecursiveFolderMetadatas } from './findRecursiveFolderMetadatas'; -export { default as containsAssetFilter } from './containsAssetFilter'; -export { default as getBreadcrumbDataML } from './getBreadcrumbDataML'; -export { default as getBreadcrumbDataCM } from './getBreadcrumbDataCM'; -export { default as getFolderURL } from './getFolderURL'; -export { default as getFolderParents } from './getFolderParents'; -export { default as toSingularTypes } from './toSingularTypes'; +export { default as formatBytes } from './formatBytes'; export * from './formatDuration'; +export { default as getBreadcrumbDataCM } from './getBreadcrumbDataCM'; +export { default as getBreadcrumbDataML } from './getBreadcrumbDataML'; +export { default as getFolderParents } from './getFolderParents'; +export { default as getFolderURL } from './getFolderURL'; +export { default as getRequestUrl } from './getRequestUrl'; +export { default as getTrad } from './getTrad'; +export { default as toSingularTypes } from './toSingularTypes'; diff --git a/packages/core/upload/admin/src/utils/urlYupSchema.js b/packages/core/upload/admin/src/utils/urlYupSchema.js index 5ba49dc90c..ddfb5bee98 100644 --- a/packages/core/upload/admin/src/utils/urlYupSchema.js +++ b/packages/core/upload/admin/src/utils/urlYupSchema.js @@ -1,5 +1,6 @@ -import * as yup from 'yup'; import { translatedErrors as errorsTrads } from '@strapi/helper-plugin'; +import * as yup from 'yup'; + import getTrad from './getTrad'; export const urlSchema = yup.object().shape({ diff --git a/packages/core/upload/admin/src/utils/urlsToAssets.js b/packages/core/upload/admin/src/utils/urlsToAssets.js index f5461d0c4d..5f1d5b785b 100644 --- a/packages/core/upload/admin/src/utils/urlsToAssets.js +++ b/packages/core/upload/admin/src/utils/urlsToAssets.js @@ -1,5 +1,7 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { AssetSource } from '../constants'; + import { typeFromMime } from './typeFromMime'; function getFilenameFromURL(url) { diff --git a/packages/core/upload/package.json b/packages/core/upload/package.json index 7484eb34ef..507e3bda2a 100644 --- a/packages/core/upload/package.json +++ b/packages/core/upload/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-upload", - "version": "4.11.0", + "version": "4.11.1", "description": "Makes it easy to upload images and files to your Strapi Application.", "license": "SEE LICENSE IN LICENSE", "author": { @@ -26,10 +26,10 @@ }, "dependencies": { "@strapi/design-system": "1.8.0", - "@strapi/helper-plugin": "4.11.0", + "@strapi/helper-plugin": "4.11.1", "@strapi/icons": "1.8.0", - "@strapi/provider-upload-local": "4.11.0", - "@strapi/utils": "4.11.0", + "@strapi/provider-upload-local": "4.11.1", + "@strapi/utils": "4.11.1", "axios": "1.4.0", "byte-size": "7.0.1", "cropperjs": "1.5.12", diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index c3fa7d4c88..dc20acc008 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/utils", - "version": "4.11.0", + "version": "4.11.1", "description": "Shared utilities for the Strapi packages", "keywords": [ "strapi", diff --git a/packages/generators/app/package.json b/packages/generators/app/package.json index b7091d22e3..bcd23aeaea 100644 --- a/packages/generators/app/package.json +++ b/packages/generators/app/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/generate-new", - "version": "4.11.0", + "version": "4.11.1", "description": "Generate a new Strapi application.", "keywords": [ "generate", diff --git a/packages/generators/app/src/create-project.ts b/packages/generators/app/src/create-project.ts index dfd1c0638a..bd0e3f35c7 100644 --- a/packages/generators/app/src/create-project.ts +++ b/packages/generators/app/src/create-project.ts @@ -91,6 +91,18 @@ export default async function createProject( const json = require(srcPath).default(); + await fse.writeJSON(destPath, json, { spaces: 2 }); + } + } else { + const jsJSONDir = join(__dirname, 'resources/json/js'); + const filesMap = { 'jsconfig.json.js': '.' }; + + for (const [fileName, path] of Object.entries(filesMap)) { + const srcPath = join(jsJSONDir, fileName); + const destPath = join(rootPath, path, 'jsconfig.json'); + + const json = require(srcPath).default(); + await fse.writeJSON(destPath, json, { spaces: 2 }); } } diff --git a/packages/generators/app/src/resources/json/js/.gitkeep b/packages/generators/app/src/resources/json/js/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/generators/app/src/resources/json/js/jsconfig.json.ts b/packages/generators/app/src/resources/json/js/jsconfig.json.ts new file mode 100644 index 0000000000..bf3e9eeebc --- /dev/null +++ b/packages/generators/app/src/resources/json/js/jsconfig.json.ts @@ -0,0 +1,5 @@ +export default () => ({ + compilerOptions: { + checkJs: true, + }, +}); diff --git a/packages/generators/app/src/utils/usage.ts b/packages/generators/app/src/utils/usage.ts index 753ddf83c3..dccc1bd751 100644 --- a/packages/generators/app/src/utils/usage.ts +++ b/packages/generators/app/src/utils/usage.ts @@ -92,7 +92,10 @@ function trackEvent(event: string, payload: Record) { ...payload, }), timeout: 1000, - headers: { 'Content-Type': 'application/json' }, + headers: { + 'Content-Type': 'application/json', + 'X-Strapi-Event': event, + }, }).catch(() => {}); } catch (err) { /** ignore errors */ diff --git a/packages/generators/generators/package.json b/packages/generators/generators/package.json index 43cc79a43a..69e36ec109 100644 --- a/packages/generators/generators/package.json +++ b/packages/generators/generators/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/generators", - "version": "4.11.0", + "version": "4.11.1", "description": "Interactive API generator.", "keywords": [ "strapi", @@ -45,8 +45,8 @@ }, "dependencies": { "@sindresorhus/slugify": "1.1.0", - "@strapi/typescript-utils": "4.11.0", - "@strapi/utils": "4.11.0", + "@strapi/typescript-utils": "4.11.1", + "@strapi/utils": "4.11.1", "chalk": "4.1.2", "copyfiles": "2.4.1", "fs-extra": "10.0.0", @@ -55,8 +55,8 @@ "pluralize": "8.0.0" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerIcon/index.js b/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerIcon/index.js index 6ab84ffcb7..7a4dfa6725 100644 --- a/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerIcon/index.js +++ b/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerIcon/index.js @@ -1,7 +1,8 @@ import React from 'react'; -import styled from 'styled-components'; -import { Icon, Flex } from '@strapi/design-system'; + +import { Flex, Icon } from '@strapi/design-system'; import { Paint } from '@strapi/icons'; +import styled from 'styled-components'; const IconBox = styled(Flex)` /* Hard code color values */ diff --git a/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerInput/index.js b/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerInput/index.js index f80460628c..333d4ecebd 100644 --- a/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerInput/index.js +++ b/packages/plugins/color-picker/admin/src/components/ColorPicker/ColorPickerInput/index.js @@ -1,22 +1,23 @@ -import React, { useState, useRef } from 'react'; -import PropTypes from 'prop-types'; -import styled from 'styled-components'; +import React, { useRef, useState } from 'react'; + import { - Typography, - Flex, - Box, BaseButton, - FocusTrap, + Box, Field, - FieldHint, FieldError, - FieldLabel, + FieldHint, FieldInput, + FieldLabel, + Flex, + FocusTrap, Popover, + Typography, } from '@strapi/design-system'; import { CarretDown } from '@strapi/icons'; -import { useIntl } from 'react-intl'; +import PropTypes from 'prop-types'; import { HexColorPicker } from 'react-colorful'; +import { useIntl } from 'react-intl'; +import styled from 'styled-components'; import getTrad from '../../../utils/getTrad'; diff --git a/packages/plugins/color-picker/admin/src/components/tests/color-picker-input.test.js b/packages/plugins/color-picker/admin/src/components/tests/color-picker-input.test.js index e5db282406..b104028c05 100644 --- a/packages/plugins/color-picker/admin/src/components/tests/color-picker-input.test.js +++ b/packages/plugins/color-picker/admin/src/components/tests/color-picker-input.test.js @@ -1,7 +1,9 @@ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; + import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { fireEvent, render, screen } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; + import ColorPickerInput from '../ColorPicker/ColorPickerInput'; const mockAttribute = { diff --git a/packages/plugins/color-picker/admin/src/index.js b/packages/plugins/color-picker/admin/src/index.js index e09d9d9a61..19e118fd73 100644 --- a/packages/plugins/color-picker/admin/src/index.js +++ b/packages/plugins/color-picker/admin/src/index.js @@ -1,6 +1,7 @@ import { prefixPluginTranslations } from '@strapi/helper-plugin'; -import pluginId from './pluginId'; + import ColorPickerIcon from './components/ColorPicker/ColorPickerIcon'; +import pluginId from './pluginId'; import getTrad from './utils/getTrad'; export default { diff --git a/packages/plugins/color-picker/package.json b/packages/plugins/color-picker/package.json index eae049f8b0..82007d1958 100644 --- a/packages/plugins/color-picker/package.json +++ b/packages/plugins/color-picker/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-color-picker", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi maintained Custom Fields", "strapi": { "name": "color-picker", @@ -10,7 +10,7 @@ }, "dependencies": { "@strapi/design-system": "1.8.0", - "@strapi/helper-plugin": "4.11.0", + "@strapi/helper-plugin": "4.11.1", "@strapi/icons": "1.8.0", "prop-types": "^15.8.1", "react-colorful": "5.6.1", diff --git a/packages/plugins/documentation/admin/src/components/FieldActionWrapper/index.js b/packages/plugins/documentation/admin/src/components/FieldActionWrapper/index.js index f3f6623524..ccaccf4080 100644 --- a/packages/plugins/documentation/admin/src/components/FieldActionWrapper/index.js +++ b/packages/plugins/documentation/admin/src/components/FieldActionWrapper/index.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; import { FieldAction } from '@strapi/design-system'; +import styled from 'styled-components'; const FieldActionWrapper = styled(FieldAction)` svg { diff --git a/packages/plugins/documentation/admin/src/components/PluginIcon/index.js b/packages/plugins/documentation/admin/src/components/PluginIcon/index.js index b0a04a26f9..23c5b1c3ce 100644 --- a/packages/plugins/documentation/admin/src/components/PluginIcon/index.js +++ b/packages/plugins/documentation/admin/src/components/PluginIcon/index.js @@ -5,6 +5,7 @@ */ import React from 'react'; + import { Information } from '@strapi/icons'; const PluginIcon = () => ; diff --git a/packages/plugins/documentation/admin/src/permissions.js b/packages/plugins/documentation/admin/src/constants.js similarity index 92% rename from packages/plugins/documentation/admin/src/permissions.js rename to packages/plugins/documentation/admin/src/constants.js index ee866d8503..fb07ff7067 100644 --- a/packages/plugins/documentation/admin/src/permissions.js +++ b/packages/plugins/documentation/admin/src/constants.js @@ -1,4 +1,4 @@ -const pluginPermissions = { +export const PERMISSIONS = { // This permission regards the main component (App) and is used to tell // If the plugin link should be displayed in the menu // And also if the plugin is accessible. This use case is found when a user types the url of the @@ -15,5 +15,3 @@ const pluginPermissions = { regenerate: [{ action: 'plugin::documentation.settings.regenerate', subject: null }], update: [{ action: 'plugin::documentation.settings.update', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/plugins/documentation/admin/src/index.js b/packages/plugins/documentation/admin/src/index.js index b28338eeb7..3219922a1a 100644 --- a/packages/plugins/documentation/admin/src/index.js +++ b/packages/plugins/documentation/admin/src/index.js @@ -5,9 +5,11 @@ // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED import { prefixPluginTranslations } from '@strapi/helper-plugin'; + import pluginPkg from '../../package.json'; + import PluginIcon from './components/PluginIcon'; -import pluginPermissions from './permissions'; +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; const name = pluginPkg.strapi.name; @@ -21,7 +23,7 @@ export default { id: `${pluginId}.plugin.name`, defaultMessage: 'Documentation', }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, async Component() { const component = await import( /* webpackChunkName: "documentation-page" */ './pages/PluginPage' @@ -51,7 +53,7 @@ export default { return component; }, - permissions: pluginPermissions.main, + permissions: PERMISSIONS.main, }); }, async registerTrads({ locales }) { diff --git a/packages/plugins/documentation/admin/src/pages/PluginPage/index.js b/packages/plugins/documentation/admin/src/pages/PluginPage/index.js index 5ccd7da270..4c1068af48 100755 --- a/packages/plugins/documentation/admin/src/pages/PluginPage/index.js +++ b/packages/plugins/documentation/admin/src/pages/PluginPage/index.js @@ -6,38 +6,38 @@ */ import React, { useState } from 'react'; -import { useIntl } from 'react-intl'; -import { - CheckPermissions, - ConfirmDialog, - LoadingIndicatorPage, - stopPropagation, - EmptyStateLayout, - useFocusWhenNavigate, - AnErrorOccurred, -} from '@strapi/helper-plugin'; -import { Helmet } from 'react-helmet'; + import { + Box, Button, - Layout, - HeaderLayout, ContentLayout, - Main, - IconButton, - Typography, Flex, + HeaderLayout, + IconButton, + Layout, + Main, Table, - Tr, - Thead, - Th, Tbody, Td, - Box, + Th, + Thead, + Tr, + Typography, } from '@strapi/design-system'; +import { + AnErrorOccurred, + CheckPermissions, + ConfirmDialog, + EmptyStateLayout, + LoadingIndicatorPage, + stopPropagation, + useFocusWhenNavigate, +} from '@strapi/helper-plugin'; +import { Eye as Show, Refresh as Reload, Trash } from '@strapi/icons'; +import { Helmet } from 'react-helmet'; +import { useIntl } from 'react-intl'; -import { Trash, Eye as Show, Refresh as Reload } from '@strapi/icons'; - -import permissions from '../../permissions'; +import { PERMISSIONS } from '../../constants'; import { getTrad } from '../../utils'; import openWithNewTab from '../../utils/openWithNewTab'; import useReactQuery from '../utils/useReactQuery'; @@ -107,7 +107,7 @@ const PluginPage = () => { })} primaryAction={ // eslint-disable-next-line - + diff --git a/packages/plugins/users-permissions/admin/src/components/Permissions/PermissionRow/index.js b/packages/plugins/users-permissions/admin/src/components/Permissions/PermissionRow/index.js index 27814e1832..08ff3ffc3d 100644 --- a/packages/plugins/users-permissions/admin/src/components/Permissions/PermissionRow/index.js +++ b/packages/plugins/users-permissions/admin/src/components/Permissions/PermissionRow/index.js @@ -1,7 +1,9 @@ import React, { useMemo } from 'react'; -import PropTypes from 'prop-types'; -import sortBy from 'lodash/sortBy'; + import { Box } from '@strapi/design-system'; +import sortBy from 'lodash/sortBy'; +import PropTypes from 'prop-types'; + import SubCategory from './SubCategory'; const PermissionRow = ({ name, permissions }) => { diff --git a/packages/plugins/users-permissions/admin/src/components/Permissions/index.js b/packages/plugins/users-permissions/admin/src/components/Permissions/index.js index 65f24fca75..260ae00cfe 100644 --- a/packages/plugins/users-permissions/admin/src/components/Permissions/index.js +++ b/packages/plugins/users-permissions/admin/src/components/Permissions/index.js @@ -1,10 +1,13 @@ import React, { useReducer } from 'react'; -import { Accordion, AccordionToggle, AccordionContent, Box, Flex } from '@strapi/design-system'; + +import { Accordion, AccordionContent, AccordionToggle, Box, Flex } from '@strapi/design-system'; import { useIntl } from 'react-intl'; + import { useUsersPermissions } from '../../contexts/UsersPermissionsContext'; import formatPluginName from '../../utils/formatPluginName'; -import PermissionRow from './PermissionRow'; + import init from './init'; +import PermissionRow from './PermissionRow'; import { initialState, reducer } from './reducer'; const Permissions = () => { diff --git a/packages/plugins/users-permissions/admin/src/components/Permissions/tests/reducer.test.js b/packages/plugins/users-permissions/admin/src/components/Permissions/tests/reducer.test.js index 8640dfdcf8..5a6b8a0b4b 100644 --- a/packages/plugins/users-permissions/admin/src/components/Permissions/tests/reducer.test.js +++ b/packages/plugins/users-permissions/admin/src/components/Permissions/tests/reducer.test.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import { reducer } from '../reducer'; describe('USERS PERMISSIONS | COMPONENTS | Permissions | reducer', () => { diff --git a/packages/plugins/users-permissions/admin/src/components/Policies/index.js b/packages/plugins/users-permissions/admin/src/components/Policies/index.js index 4ab6111a4e..e9c53b3bd3 100644 --- a/packages/plugins/users-permissions/admin/src/components/Policies/index.js +++ b/packages/plugins/users-permissions/admin/src/components/Policies/index.js @@ -1,9 +1,10 @@ import React from 'react'; -import { useIntl } from 'react-intl'; -import { Typography, Flex, GridItem } from '@strapi/design-system'; + +import { Flex, GridItem, Typography } from '@strapi/design-system'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import without from 'lodash/without'; +import { useIntl } from 'react-intl'; import { useUsersPermissions } from '../../contexts/UsersPermissionsContext'; import BoundRoute from '../BoundRoute'; diff --git a/packages/plugins/users-permissions/admin/src/components/UsersPermissions/index.js b/packages/plugins/users-permissions/admin/src/components/UsersPermissions/index.js index 1944c6bae3..6f40fa3e5f 100644 --- a/packages/plugins/users-permissions/admin/src/components/UsersPermissions/index.js +++ b/packages/plugins/users-permissions/admin/src/components/UsersPermissions/index.js @@ -1,13 +1,16 @@ -import React, { memo, useReducer, forwardRef, useImperativeHandle } from 'react'; +import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react'; + +import { Flex, Grid, GridItem, Typography } from '@strapi/design-system'; import PropTypes from 'prop-types'; -import { Typography, Flex, Grid, GridItem } from '@strapi/design-system'; import { useIntl } from 'react-intl'; -import getTrad from '../../utils/getTrad'; -import Policies from '../Policies'; -import Permissions from '../Permissions'; -import reducer, { initialState } from './reducer'; + import { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext'; +import getTrad from '../../utils/getTrad'; +import Permissions from '../Permissions'; +import Policies from '../Policies'; + import init from './init'; +import reducer, { initialState } from './reducer'; const UsersPermissions = forwardRef(({ permissions, routes }, ref) => { const { formatMessage } = useIntl(); diff --git a/packages/plugins/users-permissions/admin/src/components/UsersPermissions/tests/reducer.test.js b/packages/plugins/users-permissions/admin/src/components/UsersPermissions/tests/reducer.test.js index 075c4c34be..963f164ce0 100644 --- a/packages/plugins/users-permissions/admin/src/components/UsersPermissions/tests/reducer.test.js +++ b/packages/plugins/users-permissions/admin/src/components/UsersPermissions/tests/reducer.test.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import reducer from '../reducer'; describe('USERS PERMISSIONS | COMPONENTS | UsersPermissions | reducer', () => { diff --git a/packages/plugins/users-permissions/admin/src/permissions.js b/packages/plugins/users-permissions/admin/src/constants.js similarity index 95% rename from packages/plugins/users-permissions/admin/src/permissions.js rename to packages/plugins/users-permissions/admin/src/constants.js index 4ab7e712c0..192b12c112 100644 --- a/packages/plugins/users-permissions/admin/src/permissions.js +++ b/packages/plugins/users-permissions/admin/src/constants.js @@ -1,4 +1,4 @@ -const pluginPermissions = { +export const PERMISSIONS = { // Roles accessRoles: [ { action: 'plugin::users-permissions.roles.create', subject: null }, @@ -27,5 +27,3 @@ const pluginPermissions = { readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }], updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }], }; - -export default pluginPermissions; diff --git a/packages/plugins/users-permissions/admin/src/contexts/UsersPermissionsContext/index.js b/packages/plugins/users-permissions/admin/src/contexts/UsersPermissionsContext/index.js index b015df27e9..ce66c347d4 100644 --- a/packages/plugins/users-permissions/admin/src/contexts/UsersPermissionsContext/index.js +++ b/packages/plugins/users-permissions/admin/src/contexts/UsersPermissionsContext/index.js @@ -1,4 +1,5 @@ import React, { createContext, useContext } from 'react'; + import PropTypes from 'prop-types'; const UsersPermissions = createContext({}); diff --git a/packages/plugins/users-permissions/admin/src/hooks/index.js b/packages/plugins/users-permissions/admin/src/hooks/index.js index a3059f6e83..9988733f3f 100644 --- a/packages/plugins/users-permissions/admin/src/hooks/index.js +++ b/packages/plugins/users-permissions/admin/src/hooks/index.js @@ -1,5 +1,5 @@ // eslint-disable-next-line import/prefer-default-export export { default as useForm } from './useForm'; export { default as useRolesList } from './useRolesList'; -export { default as usePlugins } from './usePlugins'; +export * from './usePlugins'; export { default as useFetchRole } from './useFetchRole'; diff --git a/packages/plugins/users-permissions/admin/src/hooks/useFetchRole/index.js b/packages/plugins/users-permissions/admin/src/hooks/useFetchRole/index.js index d633d1cb7e..629e00199b 100644 --- a/packages/plugins/users-permissions/admin/src/hooks/useFetchRole/index.js +++ b/packages/plugins/users-permissions/admin/src/hooks/useFetchRole/index.js @@ -1,8 +1,11 @@ -import { useCallback, useReducer, useEffect, useRef } from 'react'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; -import reducer, { initialState } from './reducer'; +import { useCallback, useEffect, useReducer, useRef } from 'react'; + +import { useFetchClient, useNotification } from '@strapi/helper-plugin'; + import pluginId from '../../pluginId'; +import reducer, { initialState } from './reducer'; + const useFetchRole = (id) => { const [state, dispatch] = useReducer(reducer, initialState); const toggleNotification = useNotification(); diff --git a/packages/plugins/users-permissions/admin/src/hooks/useForm/index.js b/packages/plugins/users-permissions/admin/src/hooks/useForm/index.js index 35000194a4..0cf0ef6652 100644 --- a/packages/plugins/users-permissions/admin/src/hooks/useForm/index.js +++ b/packages/plugins/users-permissions/admin/src/hooks/useForm/index.js @@ -1,6 +1,9 @@ import { useCallback, useEffect, useReducer, useRef } from 'react'; -import { useRBAC, useFetchClient, useNotification } from '@strapi/helper-plugin'; + +import { useFetchClient, useNotification, useRBAC } from '@strapi/helper-plugin'; + import { getRequestURL } from '../../utils'; + import reducer, { initialState } from './reducer'; const useUserForm = (endPoint, permissions) => { diff --git a/packages/plugins/users-permissions/admin/src/hooks/useForm/tests/reducer.test.js b/packages/plugins/users-permissions/admin/src/hooks/useForm/tests/reducer.test.js index 0684142db8..0182050457 100644 --- a/packages/plugins/users-permissions/admin/src/hooks/useForm/tests/reducer.test.js +++ b/packages/plugins/users-permissions/admin/src/hooks/useForm/tests/reducer.test.js @@ -1,4 +1,5 @@ import produce from 'immer'; + import reducer from '../reducer'; describe('USERS PERMISSIONS | HOOKS | useForm | reducer', () => { diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins.js new file mode 100644 index 0000000000..ce1f0e8d23 --- /dev/null +++ b/packages/plugins/users-permissions/admin/src/hooks/usePlugins.js @@ -0,0 +1,71 @@ +import { useEffect } from 'react'; + +import { useNotification, useFetchClient, useAPIErrorHandler } from '@strapi/helper-plugin'; +import { useQueries } from 'react-query'; + +import pluginId from '../pluginId'; +import { cleanPermissions, getTrad } from '../utils'; + +export const usePlugins = () => { + const toggleNotification = useNotification(); + const { get } = useFetchClient(); + const { formatAPIError } = useAPIErrorHandler(getTrad); + + const [ + { + data: permissions, + isLoading: isLoadingPermissions, + error: permissionsError, + refetch: refetchPermissions, + }, + { data: routes, isLoading: isLoadingRoutes, error: routesError, refetch: refetchRoutes }, + ] = useQueries([ + { + queryKey: [pluginId, 'permissions'], + async queryFn() { + const res = await get(`/${pluginId}/permissions`); + + return res.data.permissions; + }, + }, + { + queryKey: [pluginId, 'routes'], + async queryFn() { + const res = await get(`/${pluginId}/routes`); + + return res.data.routes; + }, + }, + ]); + + const refetchQueries = async () => { + await Promise.all([refetchPermissions(), refetchRoutes()]); + }; + + useEffect(() => { + if (permissionsError) { + toggleNotification({ + type: 'warning', + message: formatAPIError(permissionsError), + }); + } + }, [toggleNotification, permissionsError, formatAPIError]); + + useEffect(() => { + if (routesError) { + toggleNotification({ + type: 'warning', + message: formatAPIError(routesError), + }); + } + }, [toggleNotification, routesError, formatAPIError]); + + const isLoading = isLoadingPermissions || isLoadingRoutes; + + return { + permissions: permissions ? cleanPermissions(permissions) : {}, + routes: routes ?? {}, + getData: refetchQueries, + isLoading, + }; +}; diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/index.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins/index.js deleted file mode 100644 index efa0389cb6..0000000000 --- a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/index.js +++ /dev/null @@ -1,67 +0,0 @@ -import { useCallback, useEffect, useReducer } from 'react'; -import { useNotification, useFetchClient } from '@strapi/helper-plugin'; -import get from 'lodash/get'; -import init from './init'; -import pluginId from '../../pluginId'; -import { cleanPermissions } from '../../utils'; -import reducer, { initialState } from './reducer'; - -const usePlugins = (shouldFetchData = true) => { - const toggleNotification = useNotification(); - const [{ permissions, routes, isLoading }, dispatch] = useReducer(reducer, initialState, () => - init(initialState, shouldFetchData) - ); - const fetchClient = useFetchClient(); - - const fetchPlugins = useCallback(async () => { - try { - dispatch({ - type: 'GET_DATA', - }); - - const [{ permissions }, { routes }] = await Promise.all( - [`/${pluginId}/permissions`, `/${pluginId}/routes`].map(async (endpoint) => { - const res = await fetchClient.get(endpoint); - - return res.data; - }) - ); - - dispatch({ - type: 'GET_DATA_SUCCEEDED', - permissions: cleanPermissions(permissions), - routes, - }); - } catch (err) { - const message = get(err, ['response', 'payload', 'message'], 'An error occured'); - - dispatch({ - type: 'GET_DATA_ERROR', - }); - - if (message !== 'Forbidden') { - toggleNotification({ - type: 'warning', - message, - }); - } - } - - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [toggleNotification]); - - useEffect(() => { - if (shouldFetchData) { - fetchPlugins(); - } - }, [fetchPlugins, shouldFetchData]); - - return { - permissions, - routes, - getData: fetchPlugins, - isLoading, - }; -}; - -export default usePlugins; diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/init.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins/init.js deleted file mode 100644 index dfe71d9376..0000000000 --- a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/init.js +++ /dev/null @@ -1,5 +0,0 @@ -const init = (initialState, shouldFetchData) => { - return { ...initialState, isLoading: shouldFetchData }; -}; - -export default init; diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/reducer.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins/reducer.js deleted file mode 100644 index 8a19db2dd2..0000000000 --- a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/reducer.js +++ /dev/null @@ -1,34 +0,0 @@ -/* eslint-disable consistent-return */ -import produce from 'immer'; - -export const initialState = { - permissions: {}, - routes: {}, - isLoading: true, -}; - -const reducer = (state, action) => - produce(state, (draftState) => { - switch (action.type) { - case 'GET_DATA': { - draftState.isLoading = true; - draftState.permissions = {}; - draftState.routes = {}; - break; - } - case 'GET_DATA_SUCCEEDED': { - draftState.permissions = action.permissions; - draftState.routes = action.routes; - draftState.isLoading = false; - break; - } - case 'GET_DATA_ERROR': { - draftState.isLoading = false; - break; - } - default: - return draftState; - } - }); - -export default reducer; diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/init.test.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/init.test.js deleted file mode 100644 index 9900a6bcb3..0000000000 --- a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/init.test.js +++ /dev/null @@ -1,32 +0,0 @@ -import init from '../init'; - -describe('USERS PERMISSIONS | HOOKS | usePlugins | init', () => { - it('should return the initial state and set the isLoading key to true', () => { - const initialState = { - ok: true, - }; - - const expected = { - ok: true, - isLoading: true, - }; - - expect(init(initialState, true)).toEqual(expected); - }); - - it('should return the initial state and set the isLoading key to false', () => { - const initialState = { - permissions: {}, - routes: {}, - isLoading: null, - }; - - const expected = { - permissions: {}, - routes: {}, - isLoading: false, - }; - - expect(init(initialState, false)).toEqual(expected); - }); -}); diff --git a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/reducer.test.js b/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/reducer.test.js deleted file mode 100644 index c9e62e2942..0000000000 --- a/packages/plugins/users-permissions/admin/src/hooks/usePlugins/tests/reducer.test.js +++ /dev/null @@ -1,96 +0,0 @@ -import reducer from '../reducer'; - -describe('USERS PERMISSIONS | HOOKS | usePlugins | reducer', () => { - describe('DEFAULT_ACTION', () => { - it('should return the initialState', () => { - const state = { - test: true, - }; - - expect(reducer(state, {})).toEqual(state); - }); - }); - - describe('GET_DATA', () => { - it('should set the isLoading key to true', () => { - const state = { - permissions: { ok: true }, - routes: { ok: true }, - isLoading: false, - }; - - const action = { - type: 'GET_DATA', - }; - - const expected = { - permissions: {}, - routes: {}, - isLoading: true, - }; - - expect(reducer(state, action)).toEqual(expected); - }); - }); - - describe('GET_DATA_ERROR', () => { - it('should set isLoading to false is an error occured', () => { - const action = { - type: 'GET_DATA_ERROR', - }; - const initialState = { - permissions: {}, - routes: {}, - isLoading: true, - }; - const expected = { - permissions: {}, - routes: {}, - isLoading: false, - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); - - describe('GET_DATA_SUCCEEDED', () => { - it('should return the state with the permissions list', () => { - const action = { - type: 'GET_DATA_SUCCEEDED', - permissions: { - application: { - controllers: { - address: { - count: { enabled: false }, - }, - }, - }, - }, - routes: { - application: [{ method: 'GET', path: '/addresses' }], - }, - }; - const initialState = { - permissions: {}, - isLoading: true, - }; - const expected = { - permissions: { - application: { - controllers: { - address: { - count: { enabled: false }, - }, - }, - }, - }, - routes: { - application: [{ method: 'GET', path: '/addresses' }], - }, - isLoading: false, - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); -}); diff --git a/packages/plugins/users-permissions/admin/src/hooks/useRolesList/index.js b/packages/plugins/users-permissions/admin/src/hooks/useRolesList/index.js index 10e4d37ad9..aae9175751 100644 --- a/packages/plugins/users-permissions/admin/src/hooks/useRolesList/index.js +++ b/packages/plugins/users-permissions/admin/src/hooks/useRolesList/index.js @@ -1,8 +1,11 @@ import { useCallback, useEffect, useReducer, useRef } from 'react'; + import { useFetchClient, useNotification } from '@strapi/helper-plugin'; import get from 'lodash/get'; -import init from './init'; + import pluginId from '../../pluginId'; + +import init from './init'; import reducer, { initialState } from './reducer'; const useRolesList = (shouldFetchData = true) => { diff --git a/packages/plugins/users-permissions/admin/src/index.js b/packages/plugins/users-permissions/admin/src/index.js index ff6e470b84..951656c6d0 100644 --- a/packages/plugins/users-permissions/admin/src/index.js +++ b/packages/plugins/users-permissions/admin/src/index.js @@ -5,8 +5,10 @@ // Also the strapi-generate-plugins/files/admin/src/index.js needs to be updated // IF THE DOC IS NOT UPDATED THE PULL REQUEST WILL NOT BE MERGED import { prefixPluginTranslations } from '@strapi/helper-plugin'; + import pluginPkg from '../../package.json'; -import pluginPermissions from './permissions'; + +import { PERMISSIONS } from './constants'; import pluginId from './pluginId'; import getTrad from './utils/getTrad'; @@ -38,7 +40,7 @@ export default { return component; }, - permissions: pluginPermissions.accessRoles, + permissions: PERMISSIONS.accessRoles, }, { intlLabel: { @@ -54,7 +56,7 @@ export default { return component; }, - permissions: pluginPermissions.readProviders, + permissions: PERMISSIONS.readProviders, }, { intlLabel: { @@ -70,7 +72,7 @@ export default { return component; }, - permissions: pluginPermissions.readEmailTemplates, + permissions: PERMISSIONS.readEmailTemplates, }, { intlLabel: { @@ -86,7 +88,7 @@ export default { return component; }, - permissions: pluginPermissions.readAdvancedSettings, + permissions: PERMISSIONS.readAdvancedSettings, }, ] ); diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js index 75c198637f..e01f238ddd 100644 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/index.js @@ -1,7 +1,19 @@ import React, { useMemo } from 'react'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { useIntl } from 'react-intl'; -import { Formik } from 'formik'; + +import { + Box, + Button, + ContentLayout, + Flex, + Grid, + GridItem, + HeaderLayout, + Main, + Option, + Select, + Typography, + useNotifyAT, +} from '@strapi/design-system'; import { CheckPagePermissions, Form, @@ -13,29 +25,20 @@ import { useOverlayBlocker, useRBAC, } from '@strapi/helper-plugin'; -import { - useNotifyAT, - Main, - HeaderLayout, - ContentLayout, - Button, - Box, - Flex, - Select, - Option, - Typography, - Grid, - GridItem, -} from '@strapi/design-system'; import { Check } from '@strapi/icons'; -import pluginPermissions from '../../permissions'; +import { Formik } from 'formik'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; + +import { PERMISSIONS } from '../../constants'; import { getTrad } from '../../utils'; + +import { fetchData, putAdvancedSettings } from './utils/api'; import layout from './utils/layout'; import schema from './utils/schema'; -import { fetchData, putAdvancedSettings } from './utils/api'; const ProtectedAdvancedSettingsPage = () => ( - + ); @@ -48,10 +51,7 @@ const AdvancedSettingsPage = () => { const queryClient = useQueryClient(); useFocusWhenNavigate(); - const updatePermissions = useMemo( - () => ({ update: pluginPermissions.updateAdvancedSettings }), - [] - ); + const updatePermissions = useMemo(() => ({ update: PERMISSIONS.updateAdvancedSettings }), []); const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate }, diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/index.test.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/index.test.js index 66df6ed671..5b487fb47b 100644 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/index.test.js +++ b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/index.test.js @@ -1,11 +1,12 @@ import React from 'react'; -import { render, waitFor, screen } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useRBAC } from '@strapi/helper-plugin'; +import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useRBAC } from '@strapi/helper-plugin'; + import ProtectedAdvancedSettingsPage from '../index'; -import server from './utils/server'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), @@ -35,19 +36,12 @@ const App = ( ); describe('ADMIN | Pages | Settings | Advanced Settings', () => { - beforeAll(() => server.listen()); - beforeEach(() => { jest.clearAllMocks(); }); - afterEach(() => { - server.resetHandlers(); - }); - afterAll(() => { jest.resetAllMocks(); - server.close(); }); it('renders and matches the snapshot', async () => { diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/utils/server.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/utils/server.js deleted file mode 100644 index 6a54522be8..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/tests/utils/server.js +++ /dev/null @@ -1,26 +0,0 @@ -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; - -const handlers = [ - rest.get('*/advanced', (req, res, ctx) => { - return res( - ctx.delay(100), - ctx.status(200), - ctx.json({ - roles: [{ name: 'Authenticated', type: 'authenticated' }], - settings: { - allow_register: false, - default_role: 'authenticated', - email_confirmation: false, - email_confirmation_redirection: '', - email_reset_password: 'https://cat-bounce.com/', - unique_email: false, - }, - }) - ); - }), -]; - -const server = setupServer(...handlers); - -export default server; diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/api.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/api.js index 8b6f5b4c66..238862ae0a 100644 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/api.js +++ b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { getRequestURL } from '../../../utils'; const fetchData = async () => { diff --git a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/schema.js b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/schema.js index d0cd5af675..b8958a8d64 100644 --- a/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/schema.js +++ b/packages/plugins/users-permissions/admin/src/pages/AdvancedSettings/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; // eslint-disable-next-line prefer-regex-literals const URL_REGEX = new RegExp('(^$)|((.+:\\/\\/.*)(d*)\\/?(.*))'); diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailForm.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailForm.js index b997e762a1..5d981227d1 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailForm.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailForm.js @@ -1,19 +1,21 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; -import { Form, GenericInput } from '@strapi/helper-plugin'; -import { Formik } from 'formik'; + import { - ModalLayout, - ModalHeader, - ModalFooter, - ModalBody, + Button, Grid, GridItem, - Button, + ModalBody, + ModalFooter, + ModalHeader, + ModalLayout, Textarea, } from '@strapi/design-system'; import { Breadcrumbs, Crumb } from '@strapi/design-system/v2'; +import { Form, GenericInput } from '@strapi/helper-plugin'; +import { Formik } from 'formik'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../../utils'; import schema from '../utils/schema'; diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailTable.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailTable.js index f50ec41d28..6562324b93 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailTable.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/components/EmailTable.js @@ -1,20 +1,22 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { useIntl } from 'react-intl'; + import { + Icon, + IconButton, Table, - Thead, Tbody, - Tr, Td, Th, + Thead, + Tr, Typography, - IconButton, - Icon, VisuallyHidden, } from '@strapi/design-system'; -import { Pencil, Refresh, Check } from '@strapi/icons'; import { onRowClick, stopPropagation } from '@strapi/helper-plugin'; +import { Check, Pencil, Refresh } from '@strapi/icons'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; + import { getTrad } from '../../../utils'; const EmailTable = ({ canUpdate, onEditClick }) => { diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js index 0a40840f69..fd4faa15d7 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/index.js @@ -1,25 +1,28 @@ import React, { useMemo, useRef, useState } from 'react'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import { useIntl } from 'react-intl'; + +import { ContentLayout, HeaderLayout, Main, useNotifyAT } from '@strapi/design-system'; import { + CheckPagePermissions, + LoadingIndicatorPage, SettingsPageTitle, - useTracking, + useFocusWhenNavigate, useNotification, useOverlayBlocker, - CheckPagePermissions, useRBAC, - useFocusWhenNavigate, - LoadingIndicatorPage, + useTracking, } from '@strapi/helper-plugin'; -import { useNotifyAT, Main, ContentLayout, HeaderLayout } from '@strapi/design-system'; -import pluginPermissions from '../../permissions'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; + +import { PERMISSIONS } from '../../constants'; import { getTrad } from '../../utils'; -import { fetchData, putEmailTemplate } from './utils/api'; -import EmailTable from './components/EmailTable'; + import EmailForm from './components/EmailForm'; +import EmailTable from './components/EmailTable'; +import { fetchData, putEmailTemplate } from './utils/api'; const ProtectedEmailTemplatesPage = () => ( - + ); @@ -38,7 +41,7 @@ const EmailTemplatesPage = () => { const [templateToEdit, setTemplateToEdit] = useState(null); const updatePermissions = useMemo(() => { - return { update: pluginPermissions.updateEmailTemplates }; + return { update: PERMISSIONS.updateEmailTemplates }; }, []); const { diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/index.test.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/index.test.js index dd70cf0b46..49af90dcc3 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/index.test.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/index.test.js @@ -1,11 +1,12 @@ import React from 'react'; -import { render, waitFor, screen } from '@testing-library/react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useRBAC } from '@strapi/helper-plugin'; +import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { useRBAC } from '@strapi/helper-plugin'; + import ProtectedEmailTemplatesPage from '../index'; -import server from './utils/server'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), @@ -35,19 +36,12 @@ const App = ( ); describe('ADMIN | Pages | Settings | Email Templates', () => { - beforeAll(() => server.listen()); - beforeEach(() => { jest.clearAllMocks(); }); - afterEach(() => { - server.resetHandlers(); - }); - afterAll(() => { jest.resetAllMocks(); - server.close(); }); it('renders and matches the snapshot', async () => { diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/utils/server.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/utils/server.js deleted file mode 100644 index 1fb4317427..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/tests/utils/server.js +++ /dev/null @@ -1,41 +0,0 @@ -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; - -const handlers = [ - rest.get('*/email-templates', (req, res, ctx) => { - return res( - ctx.delay(100), - ctx.status(200), - ctx.json({ - email_confirmation: { - display: 'Email.template.email_confirmation', - options: { - from: { - email: 'mochoko@strapi.io', - name: 'Administration Panel', - }, - message: 'Thank you for registering. Please click on the link below.', - object: 'Account confirmation', - response_email: '', - }, - }, - reset_password: { - display: 'Email.template.reset_password', - options: { - from: { - email: 'mochoko@strapi.io', - name: 'Administration Panel', - }, - message: 'We heard that you lost your password. Sorry about that!', - object: 'Reset password', - response_email: '', - }, - }, - }) - ); - }), -]; - -const server = setupServer(...handlers); - -export default server; diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/api.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/api.js index 0afc1b75bf..46aef9f191 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/api.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { getRequestURL } from '../../../utils'; const fetchData = async () => { diff --git a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/schema.js b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/schema.js index e89c230616..33ca1216f4 100644 --- a/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/schema.js +++ b/packages/plugins/users-permissions/admin/src/pages/EmailTemplates/utils/schema.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; const schema = yup.object().shape({ options: yup diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/index.js b/packages/plugins/users-permissions/admin/src/pages/Providers/index.js index 7772354d64..62de3e9bfd 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Providers/index.js @@ -1,43 +1,46 @@ import React, { useMemo, useRef, useState } from 'react'; -import { useIntl } from 'react-intl'; + import { - SettingsPageTitle, - LoadingIndicatorPage, - useTracking, - useNotification, - useOverlayBlocker, - CheckPagePermissions, - useRBAC, - useFocusWhenNavigate, - onRowClick, - stopPropagation, -} from '@strapi/helper-plugin'; -import has from 'lodash/has'; -import upperFirst from 'lodash/upperFirst'; -import { - HeaderLayout, - Layout, ContentLayout, + HeaderLayout, + IconButton, + Layout, Main, - useNotifyAT, Table, - Thead, - Tr, - Th, Tbody, Td, + Th, + Thead, + Tr, Typography, - IconButton, + useNotifyAT, VisuallyHidden, } from '@strapi/design-system'; +import { + CheckPagePermissions, + LoadingIndicatorPage, + onRowClick, + SettingsPageTitle, + stopPropagation, + useFocusWhenNavigate, + useNotification, + useOverlayBlocker, + useRBAC, + useTracking, +} from '@strapi/helper-plugin'; import { Pencil } from '@strapi/icons'; -import { useQuery, useMutation, useQueryClient } from 'react-query'; -import forms from './utils/forms'; +import has from 'lodash/has'; +import upperFirst from 'lodash/upperFirst'; +import { useIntl } from 'react-intl'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; + +import FormModal from '../../components/FormModal'; +import { PERMISSIONS } from '../../constants'; +import { getTrad } from '../../utils'; + import { fetchData, putProvider } from './utils/api'; import createProvidersArray from './utils/createProvidersArray'; -import { getTrad } from '../../utils'; -import pluginPermissions from '../../permissions'; -import FormModal from '../../components/FormModal'; +import forms from './utils/forms'; export const ProvidersPage = () => { const { formatMessage } = useIntl(); @@ -53,7 +56,7 @@ export const ProvidersPage = () => { const { lockApp, unlockApp } = useOverlayBlocker(); const updatePermissions = useMemo(() => { - return { update: pluginPermissions.updateProviders }; + return { update: PERMISSIONS.updateProviders }; }, []); const { @@ -264,7 +267,7 @@ export const ProvidersPage = () => { }; const ProtectedProvidersPage = () => ( - + ); diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/tests/index.test.js b/packages/plugins/users-permissions/admin/src/pages/Providers/tests/index.test.js index 5423e29b9b..a63aee292d 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/tests/index.test.js +++ b/packages/plugins/users-permissions/admin/src/pages/Providers/tests/index.test.js @@ -1,10 +1,11 @@ import React from 'react'; + +import { lightTheme, ThemeProvider } from '@strapi/design-system'; +import { useRBAC } from '@strapi/helper-plugin'; import { render, screen, waitFor } from '@testing-library/react'; import { IntlProvider } from 'react-intl'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { useRBAC } from '@strapi/helper-plugin'; -import server from './server'; + import { ProvidersPage } from '../index'; jest.mock('@strapi/helper-plugin', () => ({ @@ -33,16 +34,10 @@ const App = ( ); describe('Admin | containers | ProvidersPage', () => { - beforeAll(() => server.listen()); - beforeEach(() => { jest.clearAllMocks(); }); - afterEach(() => server.resetHandlers()); - - afterAll(() => server.close()); - it('renders and matches the snapshot', () => { useRBAC.mockImplementation(() => ({ isLoading: true, diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/tests/server.js b/packages/plugins/users-permissions/admin/src/pages/Providers/tests/server.js deleted file mode 100644 index 8cd9ec1f18..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/tests/server.js +++ /dev/null @@ -1,26 +0,0 @@ -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; - -const handlers = [ - rest.get('*/providers', (req, res, ctx) => { - return res( - ctx.delay(1000), - ctx.status(200), - ctx.json({ - email: { enabled: true, icon: 'envelope' }, - discord: { - callback: '/auth/discord/callback', - enabled: false, - icon: 'discord', - key: '', - scope: ['identify', 'email'], - secret: '', - }, - }) - ); - }), -]; - -const server = setupServer(...handlers); - -export default server; diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/utils/api.js b/packages/plugins/users-permissions/admin/src/pages/Providers/utils/api.js index a66b302673..0401426a02 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/utils/api.js +++ b/packages/plugins/users-permissions/admin/src/pages/Providers/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { getRequestURL } from '../../../utils'; // eslint-disable-next-line import/prefer-default-export diff --git a/packages/plugins/users-permissions/admin/src/pages/Providers/utils/forms.js b/packages/plugins/users-permissions/admin/src/pages/Providers/utils/forms.js index 71fe4c5f18..08d285982c 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Providers/utils/forms.js +++ b/packages/plugins/users-permissions/admin/src/pages/Providers/utils/forms.js @@ -1,5 +1,5 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; import { getTrad } from '../../../utils'; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage.js similarity index 93% rename from packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/index.js rename to packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage.js index 4ae121d8f9..15888f7ffc 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage.js @@ -1,36 +1,39 @@ -import React, { useState, useRef } from 'react'; -import { useHistory } from 'react-router-dom'; +import React, { useRef, useState } from 'react'; + import { + Box, + Button, ContentLayout, + Flex, + Grid, + GridItem, HeaderLayout, Main, - Button, - Flex, - Box, - TextInput, Textarea, + TextInput, Typography, - GridItem, - Grid, } from '@strapi/design-system'; +import { + Form, + SettingsPageTitle, + useFetchClient, + useNotification, + useOverlayBlocker, + useTracking, +} from '@strapi/helper-plugin'; import { Check } from '@strapi/icons'; import { Formik } from 'formik'; import { useIntl } from 'react-intl'; -import { - useOverlayBlocker, - SettingsPageTitle, - useFetchClient, - useTracking, - Form, - useNotification, -} from '@strapi/helper-plugin'; -import UsersPermissions from '../../../components/UsersPermissions'; -import getTrad from '../../../utils/getTrad'; -import pluginId from '../../../pluginId'; -import { usePlugins } from '../../../hooks'; -import schema from './utils/schema'; +import { useHistory } from 'react-router-dom'; -const EditPage = () => { +import UsersPermissions from '../../components/UsersPermissions'; +import { usePlugins } from '../../hooks'; +import pluginId from '../../pluginId'; +import getTrad from '../../utils/getTrad'; + +import { createRoleSchema } from './constants'; + +const CreatePage = () => { const { formatMessage } = useIntl(); const [isSubmitting, setIsSubmitting] = useState(false); const toggleNotification = useNotification(); @@ -82,7 +85,7 @@ const EditPage = () => { enableReinitialize initialValues={{ name: '', description: '' }} onSubmit={handleCreateRoleSubmit} - validationSchema={schema} + validationSchema={createRoleSchema} > {({ handleSubmit, values, handleChange, errors }) => (

@@ -179,4 +182,4 @@ const EditPage = () => { ); }; -export default EditPage; +export default CreatePage; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/tests/index.test.js b/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/tests/index.test.js deleted file mode 100644 index f253f53930..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/tests/index.test.js +++ /dev/null @@ -1,1056 +0,0 @@ -import React from 'react'; -import { act, render, waitFor } from '@testing-library/react'; -import { ThemeProvider, lightTheme } from '@strapi/design-system'; -import { Router, Switch, Route } from 'react-router-dom'; -import { IntlProvider } from 'react-intl'; -import { createMemoryHistory } from 'history'; -import pluginId from '../../../../pluginId'; -import RolesCreatePage from '..'; -import server from './server'; - -jest.mock('@strapi/helper-plugin', () => { - // Make sure the references of the mock functions stay the same, otherwise we get an endless loop - const mockToggleNotification = jest.fn(); - const mockUseNotification = jest.fn(() => { - return mockToggleNotification; - }); - - return { - ...jest.requireActual('@strapi/helper-plugin'), - useNotification: mockUseNotification, - useOverlayBlocker: jest.fn(() => ({ lockApp: jest.fn(), unlockApp: jest.fn() })), - }; -}); - -function makeAndRenderApp() { - const history = createMemoryHistory(); - const app = ( - - - - - - - - - - ); - const renderResult = render(app); - act(() => history.push(`/settings/${pluginId}/roles/new`)); - - return renderResult; -} - -describe('Admin | containers | RoleCreatePage', () => { - beforeAll(() => server.listen()); - - beforeEach(() => jest.clearAllMocks()); - - afterEach(() => server.resetHandlers()); - - afterAll(() => server.close()); - - it('renders users-permissions create role and matches snapshot', async () => { - const { container, getByText, getByRole } = makeAndRenderApp(); - await waitFor(() => - expect(getByRole('heading', { name: /create a role/i })).toBeInTheDocument() - ); - await waitFor(() => { - expect( - getByText(/define all allowed actions for the api::address plugin/i) - ).toBeInTheDocument(); - }); - - expect(container.firstChild).toMatchInlineSnapshot(` - .c7 { - font-weight: 600; - font-size: 2rem; - line-height: 1.25; - color: #32324d; - } - - .c13 { - font-size: 1rem; - line-height: 1.5; - color: #666687; - } - - .c18 { - font-weight: 500; - font-size: 1rem; - line-height: 1.25; - color: #32324d; - } - - .c22 { - font-size: 0.75rem; - line-height: 1.33; - font-weight: 600; - color: #32324d; - } - - .c12 { - font-size: 0.75rem; - line-height: 1.33; - font-weight: 600; - line-height: 0; - color: #ffffff; - } - - .c36 { - font-size: 0.875rem; - line-height: 1.43; - color: #666687; - } - - .c46 { - font-size: 0.75rem; - line-height: 1.33; - color: #4945ff; - } - - .c47 { - font-weight: 500; - font-size: 1rem; - line-height: 1.25; - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - color: #4a4a6a; - } - - .c1 { - background: #f6f6f9; - padding-top: 40px; - padding-right: 56px; - padding-bottom: 40px; - padding-left: 56px; - } - - .c4 { - min-width: 0; - } - - .c14 { - padding-right: 56px; - padding-left: 56px; - } - - .c16 { - background: #ffffff; - padding-top: 24px; - padding-right: 32px; - padding-bottom: 24px; - padding-left: 32px; - border-radius: 4px; - box-shadow: 0px 1px 4px rgba(33,33,52,0.1); - } - - .c26 { - border-radius: 4px; - border-color: #dcdce4; - border: 1px solid #dcdce4; - } - - .c28 { - font-size: 0.875rem; - background: #ffffff; - color: #32324d; - padding: 16px; - border-radius: 4px; - width: 100%; - height: 6.5625rem; - line-height: 1.43; - } - - .c8 { - background: #4945ff; - padding: 8px; - padding-right: 16px; - padding-left: 16px; - border-radius: 4px; - border-color: #4945ff; - border: 1px solid #4945ff; - cursor: pointer; - } - - .c30 { - background: #ffffff; - border-radius: 4px; - box-shadow: 0px 1px 4px rgba(33,33,52,0.1); - } - - .c32 { - padding-top: 24px; - padding-right: 32px; - padding-bottom: 24px; - padding-left: 32px; - } - - .c37 { - border-radius: 4px; - } - - .c39 { - background: #f6f6f9; - padding-top: 24px; - padding-right: 24px; - padding-bottom: 24px; - padding-left: 24px; - } - - .c41 { - max-width: 100%; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - } - - .c43 { - background: transparent; - min-width: 0; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - } - - .c48 { - background: #dcdce4; - border-radius: 50%; - width: 2rem; - height: 2rem; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - cursor: pointer; - } - - .c50 { - color: #666687; - width: 0.6875rem; - } - - .c52 { - background: #eaeaef; - padding-top: 24px; - padding-right: 32px; - padding-bottom: 24px; - padding-left: 32px; - } - - .c3 { - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - } - - .c5 { - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - } - - .c15 { - -webkit-align-items: stretch; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - gap: 32px; - } - - .c17 { - -webkit-align-items: stretch; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - gap: 16px; - } - - .c21 { - -webkit-align-items: stretch; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - gap: 4px; - } - - .c9 { - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - gap: 8px; - } - - .c34 { - -webkit-align-items: stretch; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - gap: 24px; - } - - .c35 { - -webkit-align-items: stretch; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - gap: 8px; - } - - .c42 { - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - gap: 12px; - } - - .c49 { - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-flex-direction: row; - -ms-flex-direction: row; - flex-direction: row; - -webkit-flex-shrink: 0; - -ms-flex-negative: 0; - flex-shrink: 0; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } - - .c38 { - border: 1px solid #f6f6f9; - } - - .c38:hover:not([aria-disabled='true']) { - border: 1px solid #4945ff; - } - - .c38:hover:not([aria-disabled='true']) .c6 { - color: #4945ff; - } - - .c38:hover:not([aria-disabled='true']) > .c2 { - background: #f0f0ff; - } - - .c38:hover:not([aria-disabled='true']) [data-strapi-dropdown='true'] { - background: #d9d8ff; - } - - .c44 { - border: none; - position: relative; - outline: none; - } - - .c44[aria-disabled='true'] { - pointer-events: none; - } - - .c44[aria-disabled='true'] svg path { - fill: #666687; - } - - .c44 svg path { - fill: #4945ff; - } - - .c44:after { - -webkit-transition-property: all; - transition-property: all; - -webkit-transition-duration: 0.2s; - transition-duration: 0.2s; - border-radius: 8px; - content: ''; - position: absolute; - top: -4px; - bottom: -4px; - left: -4px; - right: -4px; - border: 2px solid transparent; - } - - .c44:focus-visible { - outline: none; - } - - .c44:focus-visible:after { - border-radius: 8px; - content: ''; - position: absolute; - top: -5px; - bottom: -5px; - left: -5px; - right: -5px; - border: 2px solid #4945ff; - } - - .c51 path { - fill: #666687; - } - - .c45 { - text-align: left; - } - - .c45 > span { - max-width: 100%; - } - - .c45 svg { - width: 0.875rem; - height: 0.875rem; - } - - .c45 svg path { - fill: #8e8ea9; - } - - .c40 { - min-height: 5.5rem; - border-radius: 4px; - } - - .c40:hover svg path { - fill: #4945ff; - } - - .c10 { - position: relative; - outline: none; - } - - .c10 > svg { - height: 12px; - width: 12px; - } - - .c10 > svg > g, - .c10 > svg path { - fill: #ffffff; - } - - .c10[aria-disabled='true'] { - pointer-events: none; - } - - .c10:after { - -webkit-transition-property: all; - transition-property: all; - -webkit-transition-duration: 0.2s; - transition-duration: 0.2s; - border-radius: 8px; - content: ''; - position: absolute; - top: -4px; - bottom: -4px; - left: -4px; - right: -4px; - border: 2px solid transparent; - } - - .c10:focus-visible { - outline: none; - } - - .c10:focus-visible:after { - border-radius: 8px; - content: ''; - position: absolute; - top: -5px; - bottom: -5px; - left: -5px; - right: -5px; - border: 2px solid #4945ff; - } - - .c11 { - height: 2rem; - } - - .c11 svg { - height: 0.75rem; - width: auto; - } - - .c11[aria-disabled='true'] { - border: 1px solid #dcdce4; - background: #eaeaef; - } - - .c11[aria-disabled='true'] .c6 { - color: #666687; - } - - .c11[aria-disabled='true'] svg > g,.c11[aria-disabled='true'] svg path { - fill: #666687; - } - - .c11[aria-disabled='true']:active { - border: 1px solid #dcdce4; - background: #eaeaef; - } - - .c11[aria-disabled='true']:active .c6 { - color: #666687; - } - - .c11[aria-disabled='true']:active svg > g,.c11[aria-disabled='true']:active svg path { - fill: #666687; - } - - .c11:hover { - border: 1px solid #7b79ff; - background: #7b79ff; - } - - .c11:active { - border: 1px solid #4945ff; - background: #4945ff; - } - - .c11 svg > g, - .c11 svg path { - fill: #ffffff; - } - - .c23 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - } - - .c25 { - border: none; - border-radius: 4px; - padding-bottom: 0.65625rem; - padding-left: 16px; - padding-right: 16px; - padding-top: 0.65625rem; - color: #32324d; - font-weight: 400; - font-size: 0.875rem; - display: block; - width: 100%; - background: inherit; - } - - .c25::-webkit-input-placeholder { - color: #8e8ea9; - opacity: 1; - } - - .c25::-moz-placeholder { - color: #8e8ea9; - opacity: 1; - } - - .c25:-ms-input-placeholder { - color: #8e8ea9; - opacity: 1; - } - - .c25::placeholder { - color: #8e8ea9; - opacity: 1; - } - - .c25[aria-disabled='true'] { - color: inherit; - } - - .c25:focus { - outline: none; - box-shadow: none; - } - - .c24 { - border: 1px solid #dcdce4; - border-radius: 4px; - background: #ffffff; - outline: none; - box-shadow: 0; - -webkit-transition-property: border-color,box-shadow,fill; - transition-property: border-color,box-shadow,fill; - -webkit-transition-duration: 0.2s; - transition-duration: 0.2s; - } - - .c24:focus-within { - border: 1px solid #4945ff; - box-shadow: #4945ff 0px 0px 0px 2px; - } - - .c19 { - display: grid; - grid-template-columns: repeat(12,1fr); - gap: 16px; - } - - .c31 { - display: grid; - grid-template-columns: repeat(12,1fr); - } - - .c20 { - grid-column: span 6; - max-width: 100%; - } - - .c33 { - grid-column: span 7; - max-width: 100%; - } - - .c53 { - grid-column: span 5; - max-width: 100%; - } - - .c0:focus-visible { - outline: none; - } - - .c27 { - outline: none; - box-shadow: 0; - -webkit-transition-property: border-color,box-shadow,fill; - transition-property: border-color,box-shadow,fill; - -webkit-transition-duration: 0.2s; - transition-duration: 0.2s; - } - - .c27:focus-within { - border: 1px solid #4945ff; - box-shadow: #4945ff 0px 0px 0px 2px; - } - - .c29 { - border: none; - resize: none; - } - - .c29::-webkit-input-placeholder { - color: #8e8ea9; - font-size: 0.875rem; - color: #8e8ea9; - opacity: 1; - } - - .c29::-moz-placeholder { - color: #8e8ea9; - font-size: 0.875rem; - color: #8e8ea9; - opacity: 1; - } - - .c29:-ms-input-placeholder { - color: #8e8ea9; - font-size: 0.875rem; - color: #8e8ea9; - opacity: 1; - } - - .c29::placeholder { - color: #8e8ea9; - font-size: 0.875rem; - color: #8e8ea9; - opacity: 1; - } - - .c29:focus-within { - outline: none; - } - - @media (max-width:68.75rem) { - .c20 { - grid-column: span; - } - } - - @media (max-width:34.375rem) { - .c20 { - grid-column: span; - } - } - - @media (max-width:68.75rem) { - .c33 { - grid-column: span; - } - } - - @media (max-width:34.375rem) { - .c33 { - grid-column: span; - } - } - - @media (max-width:68.75rem) { - .c53 { - grid-column: span; - } - } - - @media (max-width:34.375rem) { - .c53 { - grid-column: span; - } - } - -
- -
-
-
-
-

- Create a role -

-
- -
-

- Define the rights given to the role -

-
-
-
-
-
-
-

- Role details -

-
-
-
-
-
- -
- -
-
-
-
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
-

- Permissions -

-

- Only actions bound by a route are listed below. -

-
-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-

- Advanced settings -

-

- Select the application's actions or the plugin's actions and click on the cog icon to display the bound route -

-
-
-
-
-
- -
- `); - }); - - it("can edit a users-permissions role's name and description", async () => { - const { getByLabelText, getByRole, getByTestId, getAllByText } = makeAndRenderApp(); - const user = userEvent.setup(); - - // Check loading screen - const loader = getByTestId('loader'); - expect(loader).toBeInTheDocument(); - - // After loading, check other elements - await waitForElementToBeRemoved(loader); - const saveButton = getByRole('button', { name: /save/i }); - expect(saveButton).toBeInTheDocument(); - const nameField = getByLabelText(/name/i); - expect(nameField).toBeInTheDocument(); - const descriptionField = getByLabelText(/description/i); - expect(descriptionField).toBeInTheDocument(); - - // Shows error when name is missing - await user.clear(nameField); - expect(nameField).toHaveValue(''); - await user.clear(descriptionField); - expect(descriptionField).toHaveValue(''); - - // Show errors after form submit - await user.click(saveButton); - await waitFor(() => expect(saveButton).not.toBeDisabled()); - const errorMessages = await getAllByText(/invalid value/i); - errorMessages.forEach((errorMessage) => expect(errorMessage).toBeInTheDocument()); - }); - - it('can toggle the permissions accordions and actions', async () => { - const user = userEvent.setup(); - // Create app and wait for loading - const { getByLabelText, getByRole, queryByText, getByTestId, getByText, getAllByRole } = - makeAndRenderApp(); - const loader = getByTestId('loader'); - await waitForElementToBeRemoved(loader); - - // Open the collapse - const collapse = getByText(/define all allowed actions for the api::address plugin/i); - await user.click(collapse); - expect(getByLabelText(/select all/i)).toBeInTheDocument(); - - // Display the selected action's bound route - const actionCogButton = getByTestId('action-cog'); - await user.click(actionCogButton); - expect(getByText(/bound route to/i)).toBeInTheDocument(); - expect(getByText('POST')).toBeInTheDocument(); - expect(getByText('/addresses')).toBeInTheDocument(); - - expect(getByRole('checkbox', { name: 'Select all' }).checked).toBe(false); - - await user.click(getByRole('checkbox', { name: 'Select all' })); - - getAllByRole('checkbox') - .slice(1, -1) - .forEach((actionCheckbox) => { - console.log(actionCheckbox.checked); - expect(actionCheckbox.checked).toBe(true); - }); - - // Close the collapse - await user.click(collapse); - expect(queryByText(/select all/i)).not.toBeInTheDocument(); - }); -}); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/tests/server.js b/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/tests/server.js deleted file mode 100644 index 549ca69ae7..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/tests/server.js +++ /dev/null @@ -1,94 +0,0 @@ -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; -import pluginId from '../../../../pluginId'; - -const handlers = [ - // Mock get role route - rest.get(`*/${pluginId}/roles/:roleId`, (req, res, ctx) => { - return res( - ctx.delay(100), - ctx.status(200), - ctx.json({ - role: { - id: req.params.roleId, - name: 'Authenticated', - description: 'Default role given to authenticated user.', - type: 'authenticated', - createdAt: '2021-09-08T16:26:18.061Z', - updatedAt: '2021-09-08T16:26:18.061Z', - permissions: { - 'api::address': { - controllers: { - address: { - create: { - enabled: false, - policy: '', - }, - }, - }, - }, - }, - }, - }) - ); - }), - - // Mock edit role route - rest.put(`*/${pluginId}/roles/:roleId`, (req, res, ctx) => { - return res(ctx.delay(500), ctx.status(200), ctx.json({ ok: true })); - }), - - // Mock get all routes route - rest.get(`*/${pluginId}/routes`, (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ - routes: { - 'api::address': [ - { - method: 'POST', - path: '/addresses', - handler: 'address.create', - config: { - policies: [], - auth: { - scope: 'api::address.address.create', - }, - }, - info: { - apiName: 'address', - type: 'content-api', - }, - }, - ], - }, - }) - ); - }), - - // Mock permissions route - rest.get(`*/${pluginId}/permissions`, (req, res, ctx) => { - return res( - ctx.delay(100), - ctx.status(200), - ctx.json({ - permissions: { - 'api::address': { - controllers: { - address: { - create: { - enabled: false, - policy: '', - }, - }, - }, - }, - }, - }) - ); - }), -]; - -const server = setupServer(...handlers); - -export default server; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/utils/schema.js b/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/utils/schema.js deleted file mode 100644 index 5e2ac5c5af..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/EditPage/utils/schema.js +++ /dev/null @@ -1,9 +0,0 @@ -import * as yup from 'yup'; -import { translatedErrors } from '@strapi/helper-plugin'; - -const schema = yup.object().shape({ - name: yup.string().required(translatedErrors.required), - description: yup.string().required(translatedErrors.required), -}); - -export default schema; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/components/TableBody.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/components/TableBody.js index 680d18f9f1..a27b8923e7 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/components/TableBody.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/components/TableBody.js @@ -1,8 +1,9 @@ import React from 'react'; -import PropTypes from 'prop-types'; -import { IconButton, Typography, Flex, Tbody, Tr, Td } from '@strapi/design-system'; -import { Pencil, Trash } from '@strapi/icons'; + +import { Flex, IconButton, Tbody, Td, Tr, Typography } from '@strapi/design-system'; import { CheckPermissions, onRowClick, stopPropagation } from '@strapi/helper-plugin'; +import { Pencil, Trash } from '@strapi/icons'; +import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { useHistory } from 'react-router-dom'; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/index.js index ac607e9697..6b36a58f83 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/index.js @@ -1,45 +1,47 @@ import React, { useMemo, useState } from 'react'; + import { + ActionLayout, Button, + ContentLayout, HeaderLayout, Layout, - ContentLayout, - ActionLayout, Main, Table, - Tr, - Thead, Th, + Thead, + Tr, Typography, useNotifyAT, VisuallyHidden, } from '@strapi/design-system'; -import { Plus } from '@strapi/icons'; import { - useTracking, - SettingsPageTitle, CheckPermissions, - useNotification, - useRBAC, - NoPermissions, - LoadingIndicatorPage, - SearchURLQuery, - useFocusWhenNavigate, - useQueryParams, - EmptyStateLayout, ConfirmDialog, - useFilter, + EmptyStateLayout, + LoadingIndicatorPage, + NoPermissions, + SearchURLQuery, + SettingsPageTitle, useCollator, + useFilter, + useFocusWhenNavigate, + useNotification, + useQueryParams, + useRBAC, + useTracking, } from '@strapi/helper-plugin'; +import { Plus } from '@strapi/icons'; import { useIntl } from 'react-intl'; -import { useHistory } from 'react-router-dom'; import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { useHistory } from 'react-router-dom'; -import { fetchData, deleteData } from './utils/api'; -import { getTrad } from '../../../utils'; +import { PERMISSIONS } from '../../../constants'; import pluginId from '../../../pluginId'; -import permissions from '../../../permissions'; +import { getTrad } from '../../../utils'; + import TableBody from './components/TableBody'; +import { deleteData, fetchData } from './utils/api'; const RoleListPage = () => { const { trackUsage } = useTracking(); @@ -58,10 +60,10 @@ const RoleListPage = () => { const updatePermissions = useMemo(() => { return { - create: permissions.createRole, - read: permissions.readRoles, - update: permissions.updateRole, - delete: permissions.deleteRole, + create: PERMISSIONS.createRole, + read: PERMISSIONS.readRoles, + update: PERMISSIONS.updateRole, + delete: PERMISSIONS.deleteRole, }; }, []); @@ -155,7 +157,7 @@ const RoleListPage = () => { defaultMessage: 'List of roles', })} primaryAction={ - + - -

- List of roles -

- - -
-
- - - -
-
-
-
-
-
-
- Loading content. -
- -
-
-
- -
-

- You don't have any roles yet. -

-
-
-
- -
- - `); + expect(getByRole('grid')).toBeInTheDocument(); + expect(getByRole('gridcell', { name: 'Authenticated' })).toBeInTheDocument(); + expect(getByRole('gridcell', { name: 'Public' })).toBeInTheDocument(); }); - it('should show a loader when fetching data', () => { - const history = createMemoryHistory(); - const App = makeApp(history); - render(App); + it('should direct me to the new user page when I press the add a new role button', async () => { + const { getByRole } = render(); - expect(screen.getByTestId('loader')).toBeInTheDocument(); + await userEvent.click(getByRole('button', { name: 'Add new role' })); + + expect(testLocation.pathname).toBe('/settings/users-permissions/roles/new'); }); - it('should show a list of roles', async () => { - const history = createMemoryHistory(); - const App = makeApp(history); - render(App); + it('should direct me to the edit view of a selected role if I click the edit role button', async () => { + const { getByRole, queryByText } = render(); - await waitFor(() => { - expect(screen.getByText('Authenticated')).toBeInTheDocument(); - expect(screen.getByText('Public')).toBeInTheDocument(); - }); + await waitForElementToBeRemoved(() => queryByText('Loading content.')); + + await userEvent.click(getByRole('button', { name: 'Edit Authenticated', hidden: true })); + + expect(testLocation.pathname).toBe('/settings/users-permissions/roles/1'); }); }); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/tests/server.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/tests/server.js deleted file mode 100644 index 4fc68e8050..0000000000 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/tests/server.js +++ /dev/null @@ -1,33 +0,0 @@ -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; - -const handlers = [ - rest.get('*/roles', (req, res, ctx) => { - return res( - ctx.delay(1000), - ctx.status(200), - ctx.json({ - roles: [ - { - id: 1, - name: 'Authenticated', - description: 'Default role given to authenticated user.', - type: 'authenticated', - nb_users: 0, - }, - { - id: 2, - name: 'Public', - description: 'Default role given to unauthenticated user.', - type: 'public', - nb_users: 0, - }, - ], - }) - ); - }), -]; - -const server = setupServer(...handlers); - -export default server; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/utils/api.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/utils/api.js index e66552f599..67fb5e706e 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/utils/api.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ListPage/utils/api.js @@ -1,4 +1,5 @@ import { getFetchClient } from '@strapi/helper-plugin'; + import { getRequestURL } from '../../../../utils'; export const fetchData = async (toggleNotification, notifyStatus) => { @@ -14,7 +15,7 @@ export const fetchData = async (toggleNotification, notifyStatus) => { message: { id: 'notification.error' }, }); - throw new Error('error'); + throw new Error(err); } }; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage.js similarity index 57% rename from packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage/index.js rename to packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage.js index b1f8ebf5ea..854151186a 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedCreatePage.js @@ -1,10 +1,13 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; -import pluginPermissions from '../../../permissions'; -import RolesCreatePage from '../CreatePage'; + +import { PERMISSIONS } from '../../constants'; + +import RolesCreatePage from './CreatePage'; const ProtectedRolesCreatePage = () => ( - + ); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage.js similarity index 57% rename from packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage/index.js rename to packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage.js index 728ede03b5..f811902aa5 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedEditPage.js @@ -1,10 +1,13 @@ import React from 'react'; + import { CheckPagePermissions } from '@strapi/helper-plugin'; -import pluginPermissions from '../../../permissions'; -import RolesEditPage from '../EditPage'; + +import { PERMISSIONS } from '../../constants'; + +import RolesEditPage from './EditPage'; const ProtectedRolesEditPage = () => ( - + ); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage.js similarity index 59% rename from packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage/index.js rename to packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage.js index d9f2415bf1..a6b84e1e87 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/ProtectedListPage.js @@ -1,12 +1,14 @@ import React from 'react'; -import { CheckPagePermissions } from '@strapi/helper-plugin'; -import pluginPermissions from '../../../permissions'; -import RolesListPage from '../ListPage'; +import { CheckPagePermissions } from '@strapi/helper-plugin'; + +import { PERMISSIONS } from '../../constants'; + +import RolesListPage from './ListPage'; const ProtectedRolesListPage = () => { return ( - + ); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/utils/schema.js b/packages/plugins/users-permissions/admin/src/pages/Roles/constants.js similarity index 78% rename from packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/utils/schema.js rename to packages/plugins/users-permissions/admin/src/pages/Roles/constants.js index 5e2ac5c5af..51bd2c31b3 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/CreatePage/utils/schema.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/constants.js @@ -1,9 +1,7 @@ -import * as yup from 'yup'; import { translatedErrors } from '@strapi/helper-plugin'; +import * as yup from 'yup'; -const schema = yup.object().shape({ +export const createRoleSchema = yup.object().shape({ name: yup.string().required(translatedErrors.required), description: yup.string().required(translatedErrors.required), }); - -export default schema; diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/index.js b/packages/plugins/users-permissions/admin/src/pages/Roles/index.js index 371f14b301..69d483f9fa 100644 --- a/packages/plugins/users-permissions/admin/src/pages/Roles/index.js +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/index.js @@ -1,15 +1,18 @@ import React from 'react'; -import { Switch, Route } from 'react-router-dom'; -import { CheckPagePermissions, AnErrorOccurred } from '@strapi/helper-plugin'; + +import { AnErrorOccurred, CheckPagePermissions } from '@strapi/helper-plugin'; +import { Route, Switch } from 'react-router-dom'; + +import { PERMISSIONS } from '../../constants'; import pluginId from '../../pluginId'; -import pluginPermissions from '../../permissions'; -import ProtectedRolesListPage from './ProtectedListPage'; -import ProtectedRolesEditPage from './ProtectedEditPage'; + import ProtectedRolesCreatePage from './ProtectedCreatePage'; +import ProtectedRolesEditPage from './ProtectedEditPage'; +import ProtectedRolesListPage from './ProtectedListPage'; const Roles = () => { return ( - + ({ + ...jest.requireActual('@strapi/helper-plugin'), + useOverlayBlocker: jest.fn(() => ({ lockApp: jest.fn(), unlockApp: jest.fn() })), +})); + +const render = () => ({ + ...renderRTL(, { + wrapper({ children }) { + const client = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + }); + + return ( + + + + + + {children} + + + + + + ); + }, + }), + user: userEvent.setup(), +}); + +describe('Roles – CreatePage', () => { + beforeEach(() => jest.clearAllMocks()); + + it('renders correctly', async () => { + const { getByRole, user } = render(); + + expect(getByRole('heading', { name: 'Create a role' })).toBeInTheDocument(); + expect(getByRole('heading', { name: 'Role details' })).toBeInTheDocument(); + + /** + * This means the `usePlugins` hook has finished fetching + */ + await waitFor(() => expect(getByRole('heading', { name: 'Permissions' })).toBeInTheDocument()); + + expect(getByRole('heading', { name: 'Advanced settings' })).toBeInTheDocument(); + + expect(getByRole('button', { name: 'Save' })).toBeInTheDocument(); + + expect(getByRole('textbox', { name: 'Name' })).toBeInTheDocument(); + expect(getByRole('textbox', { name: 'Description' })).toBeInTheDocument(); + + await user.click(getByRole('button', { name: 'Address' })); + + expect(getByRole('region', { name: 'Address' })).toBeInTheDocument(); + + expect(getByRole('checkbox', { name: 'Select all' })).toBeInTheDocument(); + expect(getByRole('checkbox', { name: 'create' })).toBeInTheDocument(); + }); + + it('will show an error if the user does not fill the name or description field', async () => { + const { getByRole, getAllByText } = render(); + + await waitFor(() => expect(getByRole('heading', { name: 'Permissions' })).toBeInTheDocument()); + + fireEvent.click(getByRole('button', { name: 'Save' })); + + await waitFor(() => + expect(getByRole('textbox', { name: 'Name' })).toHaveAttribute('aria-invalid', 'true') + ); + + expect(getByRole('textbox', { name: 'Description' })).toHaveAttribute('aria-invalid', 'true'); + + expect(getAllByText('Invalid value')).toHaveLength(2); + }); + + it('can create a new role and show a notification', async () => { + const { getByRole, getByText, user } = render(); + + await waitFor(() => expect(getByRole('heading', { name: 'Permissions' })).toBeInTheDocument()); + + await user.type(getByRole('textbox', { name: 'Name' }), 'Test role'); + await user.type(getByRole('textbox', { name: 'Description' }), 'This is a test role'); + + await user.click(getByRole('button', { name: 'Address' })); + await user.click(getByRole('checkbox', { name: 'create' })); + + fireEvent.click(getByRole('button', { name: 'Save' })); + + await waitFor(() => expect(getByText('Role created')).toBeInTheDocument()); + }); +}); diff --git a/packages/plugins/users-permissions/admin/src/pages/Roles/tests/EditPage.test.js b/packages/plugins/users-permissions/admin/src/pages/Roles/tests/EditPage.test.js new file mode 100644 index 0000000000..a0d2cf6846 --- /dev/null +++ b/packages/plugins/users-permissions/admin/src/pages/Roles/tests/EditPage.test.js @@ -0,0 +1,155 @@ +import React from 'react'; + +import { ThemeProvider, lightTheme } from '@strapi/design-system'; +import { NotificationsProvider } from '@strapi/helper-plugin'; +import { + fireEvent, + render as renderRTL, + waitFor, + waitForElementToBeRemoved, +} from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { MemoryRouter, Switch, Route } from 'react-router-dom'; + +import pluginId from '../../../pluginId'; +import RolesEditPage from '../EditPage'; + +jest.mock('@strapi/helper-plugin', () => ({ + ...jest.requireActual('@strapi/helper-plugin'), + useOverlayBlocker: jest.fn(() => ({ lockApp: jest.fn(), unlockApp: jest.fn() })), +})); + +const render = () => ({ + ...renderRTL(, { + wrapper({ children }) { + const client = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + }); + + return ( + + + + + + {children} + + + + + + ); + }, + }), + user: userEvent.setup(), +}); + +describe('Roles – EditPage', () => { + beforeEach(() => jest.clearAllMocks()); + + it('renders correctly', async () => { + const { getByTestId, getByRole, user } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + expect(getByRole('link', { name: 'Back' })).toBeInTheDocument(); + + expect(getByRole('heading', { name: 'Authenticated' })).toBeInTheDocument(); + expect(getByRole('heading', { name: 'Role details' })).toBeInTheDocument(); + expect(getByRole('heading', { name: 'Permissions' })).toBeInTheDocument(); + expect(getByRole('heading', { name: 'Advanced settings' })).toBeInTheDocument(); + + expect(getByRole('button', { name: 'Save' })).toBeInTheDocument(); + + expect(getByRole('textbox', { name: 'Name' })).toBeInTheDocument(); + expect(getByRole('textbox', { name: 'Description' })).toBeInTheDocument(); + + await user.click(getByRole('button', { name: 'Address' })); + + expect(getByRole('region', { name: 'Address' })).toBeInTheDocument(); + + expect(getByRole('checkbox', { name: 'Select all' })).toBeInTheDocument(); + expect(getByRole('checkbox', { name: 'create' })).toBeInTheDocument(); + }); + + it('will show an error if the user does not fill the name field', async () => { + const { getByRole, user, getByTestId, getByText } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + await user.clear(getByRole('textbox', { name: 'Name' })); + + await user.click(getByRole('button', { name: 'Save' })); + + expect(getByRole('textbox', { name: 'Name' })).toHaveAttribute('aria-invalid', 'true'); + expect(getByText('Invalid value')).toBeInTheDocument(); + }); + + it('will show an error if the user does not fill out the description field', async () => { + const { getByRole, user, getByTestId, getByText } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + await user.clear(getByRole('textbox', { name: 'Description' })); + + await user.click(getByRole('button', { name: 'Save' })); + + expect(getByRole('textbox', { name: 'Description' })).toHaveAttribute('aria-invalid', 'true'); + expect(getByText('Invalid value')).toBeInTheDocument(); + }); + + it("can update a role's name and description", async () => { + const { getByRole, user, getByTestId, getByText } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + await user.type(getByRole('textbox', { name: 'Name' }), 'test'); + await user.type(getByRole('textbox', { name: 'Description' }), 'testing'); + + /** + * @note user.click will not trigger the form. + */ + fireEvent.click(getByRole('button', { name: 'Save' })); + + await waitFor(() => expect(getByText('Role edited')).toBeInTheDocument()); + }); + + it("can update a role's permissions", async () => { + const { getByRole, user, getByText, getByTestId } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + await user.click(getByRole('button', { name: 'Address' })); + + await user.click(getByRole('checkbox', { name: 'create' })); + + /** + * @note user.click will not trigger the form. + */ + fireEvent.click(getByRole('button', { name: 'Save' })); + + await waitFor(() => expect(getByText('Role edited')).toBeInTheDocument()); + }); + + it('will update the Advanced Settings panel when you click on the cog icon of a specific permission', async () => { + const { getByRole, user, getByText, getByTestId } = render(); + + await waitForElementToBeRemoved(() => getByTestId('loader')); + + await user.click(getByRole('button', { name: 'Address' })); + + await user.hover(getByRole('checkbox', { name: 'create' })); + + await user.click(getByRole('button', { name: /Show bound route/i })); + + expect(getByRole('heading', { name: 'Bound route to address .create' })).toBeInTheDocument(); + expect(getByText('POST')).toBeInTheDocument(); + expect(getByText('/addresses')).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/users-permissions/admin/src/utils/index.js b/packages/plugins/users-permissions/admin/src/utils/index.js index d32b9cf74d..61137b9ca6 100644 --- a/packages/plugins/users-permissions/admin/src/utils/index.js +++ b/packages/plugins/users-permissions/admin/src/utils/index.js @@ -1,4 +1,4 @@ export { default as cleanPermissions } from './cleanPermissions'; +export { default as formatPolicies } from './formatPolicies'; export { default as getRequestURL } from './getRequestURL'; export { default as getTrad } from './getTrad'; -export { default as formatPolicies } from './formatPolicies'; diff --git a/packages/plugins/users-permissions/jest.config.front.js b/packages/plugins/users-permissions/jest.config.front.js index c4f1adbda6..3e8054a997 100644 --- a/packages/plugins/users-permissions/jest.config.front.js +++ b/packages/plugins/users-permissions/jest.config.front.js @@ -3,4 +3,5 @@ module.exports = { preset: '../../../jest-preset.front.js', displayName: 'Users & Permissions plugin', + setupFilesAfterEnv: ['./tests/setup.js'], }; diff --git a/packages/plugins/users-permissions/package.json b/packages/plugins/users-permissions/package.json index 25a3241f15..75f4d3d237 100644 --- a/packages/plugins/users-permissions/package.json +++ b/packages/plugins/users-permissions/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-users-permissions", - "version": "4.11.0", + "version": "4.11.1", "description": "Protect your API with a full-authentication process based on JWT", "repository": { "type": "git", @@ -30,9 +30,9 @@ }, "dependencies": { "@strapi/design-system": "1.8.0", - "@strapi/helper-plugin": "4.11.0", + "@strapi/helper-plugin": "4.11.1", "@strapi/icons": "1.8.0", - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "bcryptjs": "2.4.3", "formik": "2.4.0", "grant-koa": "5.4.8", @@ -54,7 +54,6 @@ "@testing-library/dom": "9.2.0", "@testing-library/react": "14.0.0", "@testing-library/user-event": "14.4.3", - "history": "^4.9.0", "msw": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/plugins/users-permissions/server/strategies/users-permissions.js b/packages/plugins/users-permissions/server/strategies/users-permissions.js index a303cc9a32..7ff3421c9a 100644 --- a/packages/plugins/users-permissions/server/strategies/users-permissions.js +++ b/packages/plugins/users-permissions/server/strategies/users-permissions.js @@ -1,6 +1,6 @@ 'use strict'; -const { castArray, map, every, pipe, isEmpty } = require('lodash/fp'); +const { castArray, map, every, pipe } = require('lodash/fp'); const { ForbiddenError, UnauthorizedError } = require('@strapi/utils').errors; const { getService } = require('../utils'); @@ -80,13 +80,6 @@ const authenticate = async (ctx) => { const verify = async (auth, config) => { const { credentials: user, ability } = auth; - strapi.telemetry.send('didReceiveAPIRequest', { - eventProperties: { - authenticationMethod: auth?.strategy?.name, - isAuthenticated: !isEmpty(user), - }, - }); - if (!config.scope) { if (!user) { // A non authenticated user cannot access routes that do not have a scope diff --git a/packages/plugins/users-permissions/tests/server.js b/packages/plugins/users-permissions/tests/server.js new file mode 100644 index 0000000000..bdc45ba202 --- /dev/null +++ b/packages/plugins/users-permissions/tests/server.js @@ -0,0 +1,191 @@ +'use strict'; + +const { setupServer } = require('msw/node'); +const { rest } = require('msw'); +const pluginId = require('../admin/src/pluginId').default; + +const handlers = [ + // Mock get role route + rest.get(`*/${pluginId}/roles/:roleId`, (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + role: { + id: req.params.roleId, + name: 'Authenticated', + description: 'Default role given to authenticated user.', + type: 'authenticated', + createdAt: '2021-09-08T16:26:18.061Z', + updatedAt: '2021-09-08T16:26:18.061Z', + permissions: { + 'api::address': { + controllers: { + address: { + create: { + enabled: false, + policy: '', + }, + }, + }, + }, + }, + }, + }) + ); + }), + + // Mock edit role route + rest.put(`*/${pluginId}/roles/:roleId`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json({ ok: true })); + }), + + // Mock create role route + rest.post(`*/${pluginId}/roles`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json({ ok: true })); + }), + + // Mock get all routes route + rest.get(`*/${pluginId}/routes`, (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + routes: { + 'api::address': [ + { + method: 'POST', + path: '/addresses', + handler: 'address.create', + config: { + policies: [], + auth: { + scope: 'api::address.address.create', + }, + }, + info: { + apiName: 'address', + type: 'content-api', + }, + }, + ], + }, + }) + ); + }), + + // Mock permissions route + rest.get(`*/${pluginId}/permissions`, (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + permissions: { + 'api::address': { + controllers: { + address: { + create: { + enabled: false, + policy: '', + }, + }, + }, + }, + }, + }) + ); + }), + + rest.get('*/roles', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + roles: [ + { + id: 1, + name: 'Authenticated', + description: 'Default role given to authenticated user.', + type: 'authenticated', + nb_users: 0, + }, + { + id: 2, + name: 'Public', + description: 'Default role given to unauthenticated user.', + type: 'public', + nb_users: 0, + }, + ], + }) + ); + }), + + rest.get('*/providers', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + email: { enabled: true, icon: 'envelope' }, + discord: { + callback: '/auth/discord/callback', + enabled: false, + icon: 'discord', + key: '', + scope: ['identify', 'email'], + secret: '', + }, + }) + ); + }), + + rest.get('*/email-templates', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + email_confirmation: { + display: 'Email.template.email_confirmation', + options: { + from: { + email: 'mochoko@strapi.io', + name: 'Administration Panel', + }, + message: 'Thank you for registering. Please click on the link below.', + object: 'Account confirmation', + response_email: '', + }, + }, + reset_password: { + display: 'Email.template.reset_password', + options: { + from: { + email: 'mochoko@strapi.io', + name: 'Administration Panel', + }, + message: 'We heard that you lost your password. Sorry about that!', + object: 'Reset password', + response_email: '', + }, + }, + }) + ); + }), + + rest.get('*/advanced', (req, res, ctx) => { + return res( + ctx.status(200), + ctx.json({ + roles: [{ name: 'Authenticated', type: 'authenticated' }], + settings: { + allow_register: false, + default_role: 'authenticated', + email_confirmation: false, + email_confirmation_redirection: '', + email_reset_password: 'https://cat-bounce.com/', + unique_email: false, + }, + }) + ); + }), +]; + +const server = setupServer(...handlers); + +module.exports = { + server, +}; diff --git a/packages/plugins/users-permissions/tests/setup.js b/packages/plugins/users-permissions/tests/setup.js new file mode 100644 index 0000000000..2727d42e3a --- /dev/null +++ b/packages/plugins/users-permissions/tests/setup.js @@ -0,0 +1,15 @@ +'use strict'; + +const { server } = require('./server'); + +beforeAll(() => { + server.listen(); +}); + +afterEach(() => { + server.resetHandlers(); +}); + +afterAll(() => { + server.close(); +}); diff --git a/packages/providers/audit-logs-local/package.json b/packages/providers/audit-logs-local/package.json index aefeff3b2f..01a4b34c51 100644 --- a/packages/providers/audit-logs-local/package.json +++ b/packages/providers/audit-logs-local/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-audit-logs-local", - "version": "4.11.0", + "version": "4.11.1", "description": "Local provider for strapi audit logs", "keywords": [ "audit-logs", @@ -41,8 +41,8 @@ "lint": "run -T eslint ." }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "peerDependencies": { "@strapi/strapi": "^4.9.0" diff --git a/packages/providers/email-amazon-ses/package.json b/packages/providers/email-amazon-ses/package.json index 1534c792cb..081c6b9e5b 100644 --- a/packages/providers/email-amazon-ses/package.json +++ b/packages/providers/email-amazon-ses/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-amazon-ses", - "version": "4.11.0", + "version": "4.11.1", "description": "Amazon SES provider for strapi email", "keywords": [ "email", @@ -42,12 +42,12 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "node-ses": "^3.0.3" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-mailgun/package.json b/packages/providers/email-mailgun/package.json index ac1ea40fa2..10aaeea475 100644 --- a/packages/providers/email-mailgun/package.json +++ b/packages/providers/email-mailgun/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-mailgun", - "version": "4.11.0", + "version": "4.11.1", "description": "Mailgun provider for strapi email plugin", "keywords": [ "email", @@ -44,13 +44,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "form-data": "^4.0.0", "mailgun.js": "8.2.1" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-nodemailer/package.json b/packages/providers/email-nodemailer/package.json index 4e6b4b9470..5636058fc5 100644 --- a/packages/providers/email-nodemailer/package.json +++ b/packages/providers/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-nodemailer", - "version": "4.11.0", + "version": "4.11.1", "description": "Nodemailer provider for Strapi 3", "keywords": [ "strapi", @@ -60,8 +60,8 @@ }, "devDependencies": { "@types/nodemailer": "6.4.7", - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-sendgrid/package.json b/packages/providers/email-sendgrid/package.json index 9e8f50fb64..750ebd615a 100644 --- a/packages/providers/email-sendgrid/package.json +++ b/packages/providers/email-sendgrid/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-sendgrid", - "version": "4.11.0", + "version": "4.11.1", "description": "Sendgrid provider for strapi email", "keywords": [ "email", @@ -43,11 +43,11 @@ }, "dependencies": { "@sendgrid/mail": "7.7.0", - "@strapi/utils": "4.11.0" + "@strapi/utils": "4.11.1" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-sendmail/package.json b/packages/providers/email-sendmail/package.json index 6d06dd7823..470a33590a 100644 --- a/packages/providers/email-sendmail/package.json +++ b/packages/providers/email-sendmail/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-sendmail", - "version": "4.11.0", + "version": "4.11.1", "description": "Sendmail provider for strapi email", "keywords": [ "email", @@ -41,13 +41,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "sendmail": "^1.6.1" }, "devDependencies": { "@types/sendmail": "1.4.4", - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-aws-s3/package.json b/packages/providers/upload-aws-s3/package.json index 891d6db78e..705dab0951 100644 --- a/packages/providers/upload-aws-s3/package.json +++ b/packages/providers/upload-aws-s3/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-aws-s3", - "version": "4.11.0", + "version": "4.11.1", "description": "AWS S3 provider for strapi upload", "keywords": [ "upload", @@ -45,13 +45,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "aws-sdk": "2.1372.0", + "aws-sdk": "2.1399.0", "lodash": "4.17.21" }, "devDependencies": { "@types/jest": "29.2.0", - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-cloudinary/package.json b/packages/providers/upload-cloudinary/package.json index f54f47ed61..2cd1bee81c 100644 --- a/packages/providers/upload-cloudinary/package.json +++ b/packages/providers/upload-cloudinary/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-cloudinary", - "version": "4.11.0", + "version": "4.11.1", "description": "Cloudinary provider for strapi upload", "keywords": [ "upload", @@ -42,13 +42,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "cloudinary": "^1.37.0", "into-stream": "^5.1.0" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-local/package.json b/packages/providers/upload-local/package.json index 29e2059e2e..1c9f9eabfc 100644 --- a/packages/providers/upload-local/package.json +++ b/packages/providers/upload-local/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-local", - "version": "4.11.0", + "version": "4.11.1", "description": "Local provider for strapi upload", "keywords": [ "upload", @@ -43,13 +43,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.11.0", + "@strapi/utils": "4.11.1", "fs-extra": "10.0.0" }, "devDependencies": { "@types/jest": "29.2.0", - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/utils/api-tests/package.json b/packages/utils/api-tests/package.json index b2183db5e0..b34b468916 100644 --- a/packages/utils/api-tests/package.json +++ b/packages/utils/api-tests/package.json @@ -1,6 +1,6 @@ { "name": "api-tests", - "version": "4.11.0", + "version": "4.11.1", "private": true, "dependencies": { "dotenv": "14.2.0", diff --git a/packages/utils/api-tests/strapi.js b/packages/utils/api-tests/strapi.js index 5d39816312..65a6d43aca 100644 --- a/packages/utils/api-tests/strapi.js +++ b/packages/utils/api-tests/strapi.js @@ -21,6 +21,7 @@ const createStrapiInstance = async ({ ensureSuperAdmin = true, logLevel = 'error', bypassAuth = true, + bootstrap, } = {}) => { // read .env file as it could have been updated dotenv.config({ path: process.env.ENV_PATH }); @@ -39,6 +40,17 @@ const createStrapiInstance = async ({ verify() {}, }); } + + if (bootstrap) { + const modules = instance.container.get('modules'); + const originalBootstrap = modules.bootstrap; + // decorate modules bootstrap + modules.bootstrap = async () => { + await originalBootstrap(); + await bootstrap({ strapi: instance }); + }; + } + await instance.load(); instance.log.level = logLevel; diff --git a/packages/utils/babel-plugin-switch-ee-ce/package.json b/packages/utils/babel-plugin-switch-ee-ce/package.json index 011ba6cecd..e3c8a5e259 100644 --- a/packages/utils/babel-plugin-switch-ee-ce/package.json +++ b/packages/utils/babel-plugin-switch-ee-ce/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/babel-plugin-switch-ee-ce", - "version": "4.11.0", + "version": "4.11.1", "description": "Babel plugin to switch from CE to EE at runtime", "repository": "git://github.com/strapi/strapi.git", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/utils/eslint-config-custom/front.js b/packages/utils/eslint-config-custom/front.js index 283fe6df40..2ea444b12c 100644 --- a/packages/utils/eslint-config-custom/front.js +++ b/packages/utils/eslint-config-custom/front.js @@ -31,6 +31,22 @@ module.exports = { 'react/jsx-no-constructed-context-values': 'warn', 'react/jsx-no-useless-fragment': 'warn', 'react/no-unstable-nested-components': 'warn', + 'import/order': [ + 'error', + { + groups: [ + ['external', 'internal', 'builtin'], + 'parent', + ['sibling', 'index'], + 'object', + 'type', + ], + pathGroups: [{ pattern: 'react', group: 'external', position: 'before' }], + pathGroupsExcludedImportTypes: ['react'], + 'newlines-between': 'always', + alphabetize: { order: 'asc', caseInsensitive: true }, + }, + ], 'no-restricted-imports': [ 'error', { diff --git a/packages/utils/eslint-config-custom/package.json b/packages/utils/eslint-config-custom/package.json index 7b1d239770..9853acc6a4 100644 --- a/packages/utils/eslint-config-custom/package.json +++ b/packages/utils/eslint-config-custom/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-custom", "main": "index.js", - "version": "4.11.0", + "version": "4.11.1", "private": true } diff --git a/packages/utils/logger/package.json b/packages/utils/logger/package.json index 444010f3c2..b588c90074 100644 --- a/packages/utils/logger/package.json +++ b/packages/utils/logger/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/logger", - "version": "4.11.0", + "version": "4.11.1", "description": "Strapi's logger", "homepage": "https://strapi.io", "bugs": { @@ -41,8 +41,8 @@ "winston": "3.3.3" }, "devDependencies": { - "eslint-config-custom": "4.11.0", - "tsconfig": "4.11.0" + "eslint-config-custom": "4.11.1", + "tsconfig": "4.11.1" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/utils/tsconfig/package.json b/packages/utils/tsconfig/package.json index eace498e2c..75c925e4c8 100644 --- a/packages/utils/tsconfig/package.json +++ b/packages/utils/tsconfig/package.json @@ -1,5 +1,5 @@ { "name": "tsconfig", - "version": "4.11.0", + "version": "4.11.1", "private": true } diff --git a/packages/utils/typescript/lib/__tests__/generators/schemas/attributes.test.js b/packages/utils/typescript/lib/__tests__/generators/schemas/attributes.test.js index 3d9f372f07..9163457b11 100644 --- a/packages/utils/typescript/lib/__tests__/generators/schemas/attributes.test.js +++ b/packages/utils/typescript/lib/__tests__/generators/schemas/attributes.test.js @@ -1,17 +1,17 @@ 'use strict'; -jest.mock('../../../generators/schemas/imports', () => ({ addImport: jest.fn() })); +jest.mock('../../../generators/common/imports', () => ({ addImport: jest.fn() })); const consoleWarnMock = jest.spyOn(console, 'warn').mockImplementation(); const ts = require('typescript'); -const attributeToPropertySignature = require('../../../generators/schemas/attributes'); +const attributeToPropertySignature = require('../../../generators/common/models/attributes'); const { getAttributeType, getAttributeModifiers, -} = require('../../../generators/schemas/attributes'); -const { addImport } = require('../../../generators/schemas/imports'); +} = require('../../../generators/common/models/attributes'); +const { addImport } = require('../../../generators/common/imports'); // TODO: emit definition (to a string) & also check snapshots based on that. It would allow checking both the structure & the output. describe('Attributes', () => { @@ -48,7 +48,7 @@ describe('Attributes', () => { expect(prop.type.types).toHaveLength(1); expect(prop.type.types[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(prop.type.types[0].typeName.escapedText).toBe('StringAttribute'); + expect(prop.type.types[0].typeName.escapedText).toBe('Attribute.String'); expect(prop.type.types[0].typeArguments).toBeUndefined(); }); @@ -60,7 +60,7 @@ describe('Attributes', () => { expect(prop.type.types).toHaveLength(1); expect(prop.type.types[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(prop.type.types[0].typeName.escapedText).toBe('ComponentAttribute'); + expect(prop.type.types[0].typeName.escapedText).toBe('Attribute.Component'); expect(prop.type.types[0].typeArguments).toHaveLength(1); expect(prop.type.types[0].typeArguments[0].kind).toBe(ts.SyntaxKind.StringLiteral); expect(prop.type.types[0].typeArguments[0].text).toBe('default.comp'); @@ -82,14 +82,14 @@ describe('Attributes', () => { const [attributeType, requiredOptionType] = prop.type.types; expect(attributeType.kind).toBe(ts.SyntaxKind.TypeReference); - expect(attributeType.typeName.escapedText).toBe('EnumerationAttribute'); + expect(attributeType.typeName.escapedText).toBe('Attribute.Enumeration'); expect(attributeType.typeArguments).toHaveLength(1); expect(attributeType.typeArguments[0].kind).toBe(ts.SyntaxKind.TupleType); expect(attributeType.typeArguments[0].elements[0].text).toBe('a'); expect(attributeType.typeArguments[0].elements[1].text).toBe('b'); expect(requiredOptionType.kind).toBe(ts.SyntaxKind.TypeReference); - expect(requiredOptionType.typeName.escapedText).toBe('DefaultTo'); + expect(requiredOptionType.typeName.escapedText).toBe('Attribute.DefaultTo'); expect(requiredOptionType.typeArguments).toHaveLength(1); expect(requiredOptionType.typeArguments[0].kind).toBe(ts.SyntaxKind.StringLiteral); expect(requiredOptionType.typeArguments[0].text).toBe('b'); @@ -108,22 +108,22 @@ describe('Attributes', () => { }); test.each([ - ['string', 'StringAttribute'], - ['text', 'TextAttribute'], - ['richtext', 'RichTextAttribute'], - ['password', 'PasswordAttribute'], - ['email', 'EmailAttribute'], - ['date', 'DateAttribute'], - ['time', 'TimeAttribute'], - ['datetime', 'DateTimeAttribute'], - ['timestamp', 'TimestampAttribute'], - ['integer', 'IntegerAttribute'], - ['biginteger', 'BigIntegerAttribute'], - ['float', 'FloatAttribute'], - ['decimal', 'DecimalAttribute'], - ['boolean', 'BooleanAttribute'], - ['json', 'JSONAttribute'], - ['media', 'MediaAttribute'], + ['string', 'Attribute.String'], + ['text', 'Attribute.Text'], + ['richtext', 'Attribute.RichText'], + ['password', 'Attribute.Password'], + ['email', 'Attribute.Email'], + ['date', 'Attribute.Date'], + ['time', 'Attribute.Time'], + ['datetime', 'Attribute.DateTime'], + ['timestamp', 'Attribute.Timestamp'], + ['integer', 'Attribute.Integer'], + ['biginteger', 'Attribute.BigInteger'], + ['float', 'Attribute.Float'], + ['decimal', 'Attribute.Decimal'], + ['boolean', 'Attribute.Boolean'], + ['json', 'Attribute.JSON'], + ['media', 'Attribute.Media'], ])('Basic %p attribute should map to a %p type', (type, expectedType) => { const typeNode = getAttributeType('foo', { type }); @@ -134,7 +134,7 @@ describe('Attributes', () => { expect(typeNode.typeArguments).toBeUndefined(); expect(consoleWarnMock).not.toHaveBeenCalled(); - expect(addImport).toHaveBeenCalledWith(expectedType); + expect(addImport).toHaveBeenCalledWith('Attribute'); }); describe('Complex types (with generic type parameters)', () => { @@ -145,7 +145,7 @@ describe('Attributes', () => { expect(typeNode.typeName.escapedText).toBe(typeName); expect(consoleWarnMock).not.toHaveBeenCalled(); - expect(addImport).toHaveBeenCalledWith(typeName); + expect(addImport).toHaveBeenCalledWith('Attribute'); }; describe('Enumeration', () => { @@ -153,7 +153,7 @@ describe('Attributes', () => { const attribute = { type: 'enumeration', enum: ['a', 'b', 'c'] }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'EnumerationAttribute'); + defaultAssertions(typeNode, 'Attribute.Enumeration'); expect(typeNode.typeArguments).toHaveLength(1); expect(typeNode.typeArguments[0].kind).toBe(ts.SyntaxKind.TupleType); @@ -174,7 +174,7 @@ describe('Attributes', () => { const attribute = { type: 'uid' }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'UIDAttribute'); + defaultAssertions(typeNode, 'Attribute.UID'); expect(typeNode.typeArguments).toBeUndefined(); }); @@ -183,7 +183,7 @@ describe('Attributes', () => { const attribute = { type: 'uid', targetField: 'bar' }; const typeNode = getAttributeType('foo', attribute, 'api::bar.bar'); - defaultAssertions(typeNode, 'UIDAttribute'); + defaultAssertions(typeNode, 'Attribute.UID'); expect(typeNode.typeArguments).not.toBeUndefined(); expect(typeNode.typeArguments).toHaveLength(2); @@ -199,7 +199,7 @@ describe('Attributes', () => { const attribute = { type: 'uid', options: { separator: '_' } }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'UIDAttribute'); + defaultAssertions(typeNode, 'Attribute.UID'); expect(typeNode.typeArguments).toHaveLength(3); @@ -224,7 +224,7 @@ describe('Attributes', () => { const attribute = { type: 'uid', options: { separator: '_' }, targetField: 'bar' }; const typeNode = getAttributeType('foo', attribute, 'api::bar.bar'); - defaultAssertions(typeNode, 'UIDAttribute'); + defaultAssertions(typeNode, 'Attribute.UID'); expect(typeNode.typeArguments).toHaveLength(3); @@ -254,7 +254,7 @@ describe('Attributes', () => { const attribute = { type: 'relation', relation: 'oneToOne', target: 'api::bar.bar' }; const typeNode = getAttributeType('foo', attribute, 'api::foo.foo'); - defaultAssertions(typeNode, 'RelationAttribute'); + defaultAssertions(typeNode, 'Attribute.Relation'); expect(typeNode.typeArguments).toHaveLength(3); @@ -272,7 +272,7 @@ describe('Attributes', () => { const attribute = { type: 'relation', relation: 'morphMany' }; const typeNode = getAttributeType('foo', attribute, 'api::foo.foo'); - defaultAssertions(typeNode, 'RelationAttribute'); + defaultAssertions(typeNode, 'Attribute.Relation'); expect(typeNode.typeArguments).toHaveLength(2); @@ -289,7 +289,7 @@ describe('Attributes', () => { const attribute = { type: 'component', component: 'default.comp', repeatable: true }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'ComponentAttribute'); + defaultAssertions(typeNode, 'Attribute.Component'); expect(typeNode.typeArguments).toHaveLength(2); @@ -303,7 +303,7 @@ describe('Attributes', () => { const attribute = { type: 'component', component: 'default.comp' }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'ComponentAttribute'); + defaultAssertions(typeNode, 'Attribute.Component'); expect(typeNode.typeArguments).toHaveLength(1); @@ -317,7 +317,7 @@ describe('Attributes', () => { const attribute = { type: 'dynamiczone', components: ['default.comp1', 'default.comp2'] }; const typeNode = getAttributeType('foo', attribute); - defaultAssertions(typeNode, 'DynamicZoneAttribute'); + defaultAssertions(typeNode, 'Attribute.DynamicZone'); expect(typeNode.typeArguments).toHaveLength(1); @@ -359,7 +359,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('RequiredAttribute'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.Required'); }); }); @@ -384,7 +384,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('PrivateAttribute'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.Private'); }); }); @@ -409,7 +409,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('UniqueAttribute'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.Unique'); }); }); @@ -434,7 +434,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('ConfigurableAttribute'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.Configurable'); }); }); @@ -455,7 +455,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('CustomField'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.CustomField'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.StringLiteral); expect(modifiers[0].typeArguments[0].text).toBe('plugin::color-picker.color'); @@ -473,7 +473,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('CustomField'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.CustomField'); expect(modifiers[0].typeArguments).toHaveLength(2); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.StringLiteral); expect(modifiers[0].typeArguments[0].text).toBe('plugin::color-picker.color'); @@ -507,7 +507,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetPluginOptions'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetPluginOptions'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); expect(modifiers[0].typeArguments[0].members).toHaveLength(1); @@ -546,7 +546,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMax'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMax'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -570,7 +570,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMax'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMax'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -594,7 +594,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMax'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMax'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -636,7 +636,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMaxLength'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMaxLength'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -660,7 +660,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMaxLength'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMaxLength'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -684,7 +684,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('SetMinMaxLength'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.SetMinMaxLength'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); @@ -726,7 +726,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('DefaultTo'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.DefaultTo'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TrueKeyword); @@ -739,7 +739,7 @@ describe('Attributes', () => { expect(modifiers).toHaveLength(1); expect(modifiers[0].kind).toBe(ts.SyntaxKind.TypeReference); - expect(modifiers[0].typeName.escapedText).toBe('DefaultTo'); + expect(modifiers[0].typeName.escapedText).toBe('Attribute.DefaultTo'); expect(modifiers[0].typeArguments).toHaveLength(1); expect(modifiers[0].typeArguments[0].kind).toBe(ts.SyntaxKind.TypeLiteral); diff --git a/packages/utils/typescript/lib/__tests__/generators/schemas/global.test.js b/packages/utils/typescript/lib/__tests__/generators/schemas/global.test.js deleted file mode 100644 index e3b1dcc85a..0000000000 --- a/packages/utils/typescript/lib/__tests__/generators/schemas/global.test.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -jest.mock('../../../generators/schemas/utils', () => ({ - getSchemaInterfaceName: jest.fn(), -})); - -const ts = require('typescript'); -const { get } = require('lodash/fp'); - -const { generateGlobalDefinition } = require('../../../generators/schemas/global'); -const { getSchemaInterfaceName } = require('../../../generators/schemas/utils'); - -const getSchemasInterfaceNode = get('body.statements[0].body.statements[0]'); - -describe('Global', () => { - afterAll(() => { - jest.resetAllMocks(); - }); - - const assertGlobalNodeStructure = (node) => { - // "declare global" - expect(node.kind).toBe(ts.SyntaxKind.ModuleDeclaration); - expect(node.modifiers).toHaveLength(1); - expect(node.modifiers[0].kind).toBe(ts.SyntaxKind.DeclareKeyword); - expect(node.name.originalKeywordKind).toBe(ts.SyntaxKind.GlobalKeyword); - expect(node.name.escapedText).toBe('global'); - - // "namespace Strapi" - const [strapiNamespace] = node.body.statements; - - expect(strapiNamespace.kind).toBe(ts.SyntaxKind.ModuleDeclaration); - expect(strapiNamespace.name.kind).toBe(ts.SyntaxKind.Identifier); - expect(strapiNamespace.name.escapedText).toBe('Strapi'); - - // "interface Schemas" - const [schemasInterface] = strapiNamespace.body.statements; - - expect(schemasInterface.kind).toBe(ts.SyntaxKind.InterfaceDeclaration); - expect(schemasInterface.name.escapedText).toBe('Schemas'); - }; - - describe('Generate Global Definition', () => { - beforeEach(() => { - jest.resetAllMocks(); - }); - - test('With empty definition', () => { - const definitions = []; - - const globalNode = generateGlobalDefinition(definitions); - - assertGlobalNodeStructure(globalNode); - - expect(getSchemaInterfaceName).not.toHaveBeenCalled(); - - const schemasNode = getSchemasInterfaceNode(globalNode); - - expect(schemasNode.members).toHaveLength(0); - }); - - test('With no definition', () => { - const globalNode = generateGlobalDefinition(); - - assertGlobalNodeStructure(globalNode); - - expect(getSchemaInterfaceName).not.toHaveBeenCalled(); - - const schemasNode = getSchemasInterfaceNode(globalNode); - - expect(schemasNode.members).toHaveLength(0); - }); - - test('With multiple definitions', () => { - const definitions = [ - { schema: { uid: 'api::foo.foo' } }, - { schema: { uid: 'api::bar.bar' } }, - { schema: { uid: 'api::foobar.foobar' } }, - { schema: { uid: 'default.barfoo' } }, - ]; - - getSchemaInterfaceName.mockReturnValue('Placeholder'); - - const globalNode = generateGlobalDefinition(definitions); - - assertGlobalNodeStructure(globalNode); - - const schemasNode = getSchemasInterfaceNode(globalNode); - - expect(schemasNode.members).toHaveLength(definitions.length); - - definitions.forEach(({ schema }, index) => { - const { uid } = schema; - const node = schemasNode.members[index]; - - expect(node.kind).toBe(ts.SyntaxKind.PropertySignature); - - expect(getSchemaInterfaceName).toHaveBeenCalledWith(uid); - - expect(node.name.kind).toBe(ts.SyntaxKind.StringLiteral); - expect(node.name.text).toBe(uid); - expect(node.name.singleQuote).toBeTruthy(); - - expect(node.type.kind).toBe(ts.SyntaxKind.TypeReference); - expect(node.type.typeName.escapedText).toBe('Placeholder'); - }); - }); - }); -}); diff --git a/packages/utils/typescript/lib/__tests__/generators/schemas/imports.test.js b/packages/utils/typescript/lib/__tests__/generators/schemas/imports.test.js index 70d80fc6a9..e017bc04f8 100644 --- a/packages/utils/typescript/lib/__tests__/generators/schemas/imports.test.js +++ b/packages/utils/typescript/lib/__tests__/generators/schemas/imports.test.js @@ -6,7 +6,7 @@ const { addImport, generateImportDefinition, getImports, -} = require('../../../generators/schemas/imports'); +} = require('../../../generators/common/imports'); describe('Imports', () => { test('When first loaded, the list of imports should be empty', () => { @@ -27,28 +27,30 @@ describe('Imports', () => { }); test('Generate an import type definition containing the registered import', () => { - const def = generateImportDefinition(); + const defs = generateImportDefinition(); - expect(def.kind).toBe(ts.SyntaxKind.ImportDeclaration); + defs.forEach((def) => { + expect(def.kind).toBe(ts.SyntaxKind.ImportDeclaration); - // Module specifier - expect(def.moduleSpecifier.kind).toBe(ts.SyntaxKind.StringLiteral); - expect(def.moduleSpecifier.text).toBe('@strapi/strapi'); + // Module specifier + expect(def.moduleSpecifier.kind).toBe(ts.SyntaxKind.StringLiteral); + expect(def.moduleSpecifier.text).toBe('@strapi/strapi'); - // Import clause (should be named imports) - expect(def.importClause.kind).toBe(ts.SyntaxKind.ImportClause); + // Import clause (should be named imports) + expect(def.importClause.kind).toBe(ts.SyntaxKind.ImportClause); - const { elements } = def.importClause.namedBindings; + const { elements } = def.importClause.namedBindings; - expect(elements).toHaveLength(2); + expect(elements).toHaveLength(2); - // Import clauses - getImports().forEach((namedImport, index) => { - const element = elements[index]; + // Import clauses + getImports().forEach((namedImport, index) => { + const element = elements[index]; - expect(element.kind).toBe(ts.SyntaxKind.ImportSpecifier); - expect(element.name.kind).toBe(ts.SyntaxKind.Identifier); - expect(element.name.escapedText).toBe(namedImport); + expect(element.kind).toBe(ts.SyntaxKind.ImportSpecifier); + expect(element.name.kind).toBe(ts.SyntaxKind.Identifier); + expect(element.name.escapedText).toBe(namedImport); + }); }); }); }); diff --git a/packages/utils/typescript/lib/__tests__/generators/schemas/utils.test.js b/packages/utils/typescript/lib/__tests__/generators/schemas/utils.test.js index 5a448bc81a..a0b9444a7d 100644 --- a/packages/utils/typescript/lib/__tests__/generators/schemas/utils.test.js +++ b/packages/utils/typescript/lib/__tests__/generators/schemas/utils.test.js @@ -4,67 +4,15 @@ const ts = require('typescript'); const { factory } = require('typescript'); const { - getAllStrapiSchemas, getDefinitionAttributesCount, getSchemaExtendsTypeName, getSchemaInterfaceName, getSchemaModelType, getTypeNode, toTypeLiteral, -} = require('../../../generators/schemas/utils'); +} = require('../../../generators/common/models/utils'); describe('Utils', () => { - describe('Get All Strapi Schemas', () => { - test('Get both components and content types', () => { - const strapi = { - contentTypes: { - ctA: {}, - ctB: {}, - }, - components: { - comp1: {}, - comp2: {}, - comp3: {}, - }, - }; - - const schemas = getAllStrapiSchemas(strapi); - - expect(schemas).toMatchObject({ ctA: {}, ctB: {}, comp1: {}, comp2: {}, comp3: {} }); - }); - - test('Get only components if there is no content type', () => { - const strapi = { - contentTypes: {}, - - components: { - comp1: {}, - comp2: {}, - comp3: {}, - }, - }; - - const schemas = getAllStrapiSchemas(strapi); - - expect(schemas).toMatchObject({ comp1: {}, comp2: {}, comp3: {} }); - }); - - test('Get only content types if there is no component', () => { - const strapi = { - contentTypes: { - ctA: {}, - ctB: {}, - }, - - components: {}, - }; - - const schemas = getAllStrapiSchemas(strapi); - - expect(schemas).toMatchObject({ ctA: {}, ctB: {} }); - }); - }); - describe('Get Definition Attributes Count', () => { const createMainNode = (members = []) => { return factory.createInterfaceDeclaration( @@ -172,10 +120,10 @@ describe('Utils', () => { describe('Get Schema Extends Type Name', () => { test.each([ - [{ modelType: 'component', kind: null }, 'ComponentSchema'], - [{ modelType: 'contentType', kind: 'singleType' }, 'SingleTypeSchema'], - [{ modelType: 'contentType', kind: 'collectionType' }, 'CollectionTypeSchema'], - [{ modelType: 'invalidType', kind: 'foo' }, 'Schema'], + [{ modelType: 'component', kind: null }, 'Schema.Component'], + [{ modelType: 'contentType', kind: 'singleType' }, 'Schema.SingleType'], + [{ modelType: 'contentType', kind: 'collectionType' }, 'Schema.CollectionType'], + [{ modelType: 'invalidType', kind: 'foo' }, null], ])("Expect %p to generate %p as the base type for a schema's interface", (schema, expected) => { expect(getSchemaExtendsTypeName(schema)).toBe(expected); }); diff --git a/packages/utils/typescript/lib/generators/schemas/imports.js b/packages/utils/typescript/lib/generators/common/imports.js similarity index 63% rename from packages/utils/typescript/lib/generators/schemas/imports.js rename to packages/utils/typescript/lib/generators/common/imports.js index b5b31fcc33..9d1311ecf4 100644 --- a/packages/utils/typescript/lib/generators/schemas/imports.js +++ b/packages/utils/typescript/lib/generators/common/imports.js @@ -22,11 +22,13 @@ module.exports = { factory.createImportSpecifier(false, undefined, factory.createIdentifier(key)) ); - return factory.createImportDeclaration( - undefined, - factory.createImportClause(false, undefined, factory.createNamedImports(formattedImports)), - factory.createStringLiteral('@strapi/strapi'), - undefined - ); + return [ + factory.createImportDeclaration( + undefined, + factory.createImportClause(true, undefined, factory.createNamedImports(formattedImports)), + factory.createStringLiteral('@strapi/strapi'), + undefined + ), + ]; }, }; diff --git a/packages/utils/typescript/lib/generators/common/index.js b/packages/utils/typescript/lib/generators/common/index.js new file mode 100644 index 0000000000..80acf5673d --- /dev/null +++ b/packages/utils/typescript/lib/generators/common/index.js @@ -0,0 +1,9 @@ +'use strict'; + +const models = require('./models'); +const imports = require('./imports'); + +module.exports = { + models, + imports, +}; diff --git a/packages/utils/typescript/lib/generators/schemas/attributes.js b/packages/utils/typescript/lib/generators/common/models/attributes.js similarity index 69% rename from packages/utils/typescript/lib/generators/schemas/attributes.js rename to packages/utils/typescript/lib/generators/common/models/attributes.js index 30c5c756b3..1efdc45d1e 100644 --- a/packages/utils/typescript/lib/generators/schemas/attributes.js +++ b/packages/utils/typescript/lib/generators/common/models/attributes.js @@ -3,8 +3,8 @@ const { factory } = require('typescript'); const _ = require('lodash/fp'); -const { addImport } = require('./imports'); -const { getTypeNode, toTypeLiteral } = require('./utils'); +const { addImport } = require('../imports'); +const { getTypeNode, toTypeLiteral, withAttributeNamespace, NAMESPACES } = require('./utils'); const mappers = require('./mappers'); /** @@ -26,7 +26,8 @@ const getAttributeType = (attributeName, attribute, uid) => { const [attributeType, typeParams] = mappers[attribute.type]({ uid, attribute, attributeName }); - addImport(attributeType); + // Make sure the attribute namespace is imported + addImport(NAMESPACES.attribute); return getTypeNode(attributeType, typeParams); }; @@ -42,38 +43,36 @@ const getAttributeModifiers = (attribute) => { // Required if (attribute.required) { - addImport('RequiredAttribute'); - - modifiers.push(factory.createTypeReferenceNode(factory.createIdentifier('RequiredAttribute'))); + modifiers.push( + factory.createTypeReferenceNode(factory.createIdentifier(withAttributeNamespace('Required'))) + ); } // Private if (attribute.private) { - addImport('PrivateAttribute'); - - modifiers.push(factory.createTypeReferenceNode(factory.createIdentifier('PrivateAttribute'))); + modifiers.push( + factory.createTypeReferenceNode(factory.createIdentifier(withAttributeNamespace('Private'))) + ); } // Unique if (attribute.unique) { - addImport('UniqueAttribute'); - - modifiers.push(factory.createTypeReferenceNode(factory.createIdentifier('UniqueAttribute'))); + modifiers.push( + factory.createTypeReferenceNode(factory.createIdentifier(withAttributeNamespace('Unique'))) + ); } // Configurable if (attribute.configurable) { - addImport('ConfigurableAttribute'); - modifiers.push( - factory.createTypeReferenceNode(factory.createIdentifier('ConfigurableAttribute')) + factory.createTypeReferenceNode( + factory.createIdentifier(withAttributeNamespace('Configurable')) + ) ); } // Custom field if (attribute.customField) { - addImport('CustomField'); - const customFieldUid = factory.createStringLiteral(attribute.customField); const typeArguments = [customFieldUid]; @@ -82,17 +81,18 @@ const getAttributeModifiers = (attribute) => { } modifiers.push( - factory.createTypeReferenceNode(factory.createIdentifier('CustomField'), typeArguments) + factory.createTypeReferenceNode( + factory.createIdentifier(withAttributeNamespace('CustomField')), + typeArguments + ) ); } // Plugin Options if (!_.isEmpty(attribute.pluginOptions)) { - addImport('SetPluginOptions'); - modifiers.push( factory.createTypeReferenceNode( - factory.createIdentifier('SetPluginOptions'), + factory.createIdentifier(withAttributeNamespace('SetPluginOptions')), // Transform the pluginOptions object into an object literal expression [toTypeLiteral(attribute.pluginOptions)] ) @@ -102,38 +102,37 @@ const getAttributeModifiers = (attribute) => { // Min / Max // TODO: Always provide a second type argument for min/max (ie: resolve the attribute scalar type with a `GetAttributeType<${mappers[attribute][0]}>` (useful for biginter (string values))) if (!_.isNil(attribute.min) || !_.isNil(attribute.max)) { - addImport('SetMinMax'); - const minMaxProperties = _.pick(['min', 'max'], attribute); modifiers.push( - factory.createTypeReferenceNode(factory.createIdentifier('SetMinMax'), [ - toTypeLiteral(minMaxProperties), - ]) + factory.createTypeReferenceNode( + factory.createIdentifier(withAttributeNamespace('SetMinMax')), + [toTypeLiteral(minMaxProperties)] + ) ); } // Min length / Max length if (!_.isNil(attribute.minLength) || !_.isNil(attribute.maxLength)) { - addImport('SetMinMaxLength'); - const minMaxProperties = _.pick(['minLength', 'maxLength'], attribute); modifiers.push( - factory.createTypeReferenceNode(factory.createIdentifier('SetMinMaxLength'), [ - toTypeLiteral(minMaxProperties), - ]) + factory.createTypeReferenceNode( + factory.createIdentifier(withAttributeNamespace('SetMinMaxLength')), + [toTypeLiteral(minMaxProperties)] + ) ); } // Default if (!_.isNil(attribute.default)) { - addImport('DefaultTo'); - const defaultLiteral = toTypeLiteral(attribute.default); modifiers.push( - factory.createTypeReferenceNode(factory.createIdentifier('DefaultTo'), [defaultLiteral]) + factory.createTypeReferenceNode( + factory.createIdentifier(withAttributeNamespace('DefaultTo')), + [defaultLiteral] + ) ); } diff --git a/packages/utils/typescript/lib/generators/common/models/index.js b/packages/utils/typescript/lib/generators/common/models/index.js new file mode 100644 index 0000000000..32c632306b --- /dev/null +++ b/packages/utils/typescript/lib/generators/common/models/index.js @@ -0,0 +1,15 @@ +'use strict'; + +const schema = require('./schema'); +const attributes = require('./attributes'); +const mappers = require('./mappers'); +const utils = require('./utils'); +const imports = require('../imports'); + +module.exports = { + schema, + attributes, + mappers, + utils, + imports, +}; diff --git a/packages/utils/typescript/lib/generators/schemas/mappers.js b/packages/utils/typescript/lib/generators/common/models/mappers.js similarity index 65% rename from packages/utils/typescript/lib/generators/schemas/mappers.js rename to packages/utils/typescript/lib/generators/common/models/mappers.js index c991855189..68e988d94e 100644 --- a/packages/utils/typescript/lib/generators/schemas/mappers.js +++ b/packages/utils/typescript/lib/generators/common/models/mappers.js @@ -3,56 +3,56 @@ const ts = require('typescript'); const _ = require('lodash/fp'); -const { toTypeLiteral } = require('./utils'); +const { toTypeLiteral, withAttributeNamespace } = require('./utils'); const { factory } = ts; module.exports = { string() { - return ['StringAttribute']; + return [withAttributeNamespace('String')]; }, text() { - return ['TextAttribute']; + return [withAttributeNamespace('Text')]; }, richtext() { - return ['RichTextAttribute']; + return [withAttributeNamespace('RichText')]; }, password() { - return ['PasswordAttribute']; + return [withAttributeNamespace('Password')]; }, email() { - return ['EmailAttribute']; + return [withAttributeNamespace('Email')]; }, date() { - return ['DateAttribute']; + return [withAttributeNamespace('Date')]; }, time() { - return ['TimeAttribute']; + return [withAttributeNamespace('Time')]; }, datetime() { - return ['DateTimeAttribute']; + return [withAttributeNamespace('DateTime')]; }, timestamp() { - return ['TimestampAttribute']; + return [withAttributeNamespace('Timestamp')]; }, integer() { - return ['IntegerAttribute']; + return [withAttributeNamespace('Integer')]; }, biginteger() { - return ['BigIntegerAttribute']; + return [withAttributeNamespace('BigInteger')]; }, float() { - return ['FloatAttribute']; + return [withAttributeNamespace('Float')]; }, decimal() { - return ['DecimalAttribute']; + return [withAttributeNamespace('Decimal')]; }, uid({ attribute, uid }) { const { targetField, options } = attribute; // If there are no params to compute, then return the attribute type alone if (targetField === undefined && options === undefined) { - return ['UIDAttribute']; + return [withAttributeNamespace('UID')]; } const params = []; @@ -74,21 +74,21 @@ module.exports = { params.push(toTypeLiteral(options)); } - return ['UIDAttribute', params]; + return [withAttributeNamespace('UID'), params]; }, enumeration({ attribute }) { const { enum: enumValues } = attribute; - return ['EnumerationAttribute', [toTypeLiteral(enumValues)]]; + return [withAttributeNamespace('Enumeration'), [toTypeLiteral(enumValues)]]; }, boolean() { - return ['BooleanAttribute']; + return [withAttributeNamespace('Boolean')]; }, json() { - return ['JSONAttribute']; + return [withAttributeNamespace('JSON')]; }, media() { - return ['MediaAttribute']; + return [withAttributeNamespace('Media')]; }, relation({ uid, attribute }) { const { relation, target } = attribute; @@ -97,13 +97,13 @@ module.exports = { if (isMorphRelation) { return [ - 'RelationAttribute', + withAttributeNamespace('Relation'), [factory.createStringLiteral(uid, true), factory.createStringLiteral(relation, true)], ]; } return [ - 'RelationAttribute', + withAttributeNamespace('Relation'), [ factory.createStringLiteral(uid, true), factory.createStringLiteral(relation, true), @@ -119,13 +119,13 @@ module.exports = { params.push(factory.createTrue()); } - return ['ComponentAttribute', params]; + return [withAttributeNamespace('Component'), params]; }, dynamiczone({ attribute }) { const componentsParam = factory.createTupleTypeNode( attribute.components.map((component) => factory.createStringLiteral(component)) ); - return ['DynamicZoneAttribute', [componentsParam]]; + return [withAttributeNamespace('DynamicZone'), [componentsParam]]; }, }; diff --git a/packages/utils/typescript/lib/generators/schemas/schema.js b/packages/utils/typescript/lib/generators/common/models/schema.js similarity index 87% rename from packages/utils/typescript/lib/generators/schemas/schema.js rename to packages/utils/typescript/lib/generators/common/models/schema.js index 713ed1d59d..d4eef1b815 100644 --- a/packages/utils/typescript/lib/generators/schemas/schema.js +++ b/packages/utils/typescript/lib/generators/common/models/schema.js @@ -4,9 +4,14 @@ const ts = require('typescript'); const { factory } = require('typescript'); const { isEmpty } = require('lodash/fp'); -const { getSchemaExtendsTypeName, getSchemaInterfaceName, toTypeLiteral } = require('./utils'); +const { + getSchemaExtendsTypeName, + getSchemaInterfaceName, + toTypeLiteral, + NAMESPACES, +} = require('./utils'); const attributeToPropertySignature = require('./attributes'); -const { addImport } = require('./imports'); +const { addImport } = require('../imports'); /** * Generate a property signature for the schema's `attributes` field @@ -51,11 +56,11 @@ const generateSchemaDefinition = (schema) => { const interfaceName = getSchemaInterfaceName(uid); const parentType = getSchemaExtendsTypeName(schema); - // Make sure the extended interface are imported - addImport(parentType); + // Make sure the Schema namespace is imported + addImport(NAMESPACES.schema); // Properties whose values can be mapped to a literal type expression - const literalPropertiesDefinitions = ['info', 'options', 'pluginOptions'] + const literalPropertiesDefinitions = ['collectionName', 'info', 'options', 'pluginOptions'] // Ignore non-existent or empty declarations .filter((key) => !isEmpty(schema[key])) // Generate literal definition for each property diff --git a/packages/utils/typescript/lib/generators/schemas/utils.js b/packages/utils/typescript/lib/generators/common/models/utils.js similarity index 84% rename from packages/utils/typescript/lib/generators/schemas/utils.js rename to packages/utils/typescript/lib/generators/common/models/utils.js index df84117597..354ea5240f 100644 --- a/packages/utils/typescript/lib/generators/schemas/utils.js +++ b/packages/utils/typescript/lib/generators/common/models/utils.js @@ -17,13 +17,10 @@ const { propEq, } = require('lodash/fp'); -/** - * Get all components and content-types in a Strapi application - * - * @param {Strapi} strapi - * @returns {object} - */ -const getAllStrapiSchemas = (strapi) => ({ ...strapi.contentTypes, ...strapi.components }); +const NAMESPACES = { + schema: 'Schema', + attribute: 'Attribute', +}; /** * Extract a valid interface name from a schema uid @@ -58,7 +55,11 @@ const getSchemaModelType = (schema) => { const getSchemaExtendsTypeName = (schema) => { const base = getSchemaModelType(schema); - return `${upperFirst(base)}Schema`; + if (base === null) { + return null; + } + + return `${NAMESPACES.schema}.${upperFirst(base)}`; }; /** @@ -143,8 +144,26 @@ const getDefinitionAttributesCount = (definition) => { return attributesNode.type.members.length; }; +/** + * Add the attribute namespace before the typename + * + * @param {string} typeName + * @returns {string} + */ +const withAttributeNamespace = (typeName) => `${NAMESPACES.attribute}.${typeName}`; + +/** + * Add the schema namespace before the typename + * + * @param {string} typeName + * @returns {string} + */ +const withSchemaNamespace = (typeName) => `${NAMESPACES.schema}.${typeName}`; + module.exports = { - getAllStrapiSchemas, + NAMESPACES, + withAttributeNamespace, + withSchemaNamespace, getSchemaInterfaceName, getSchemaExtendsTypeName, getSchemaModelType, diff --git a/packages/utils/typescript/lib/generators/components/index.js b/packages/utils/typescript/lib/generators/components/index.js new file mode 100644 index 0000000000..d83698991a --- /dev/null +++ b/packages/utils/typescript/lib/generators/components/index.js @@ -0,0 +1,58 @@ +'use strict'; + +const { factory } = require('typescript'); + +const { models } = require('../common'); +const { emitDefinitions, format, generateSharedExtensionDefinition } = require('../utils'); + +/** + * Generate type definitions for Strapi Components + * + * @param {object} [options] + * @param {object} options.strapi + * @param {object} options.logger + * @param {string} options.pwd + */ +const generateComponentsDefinitions = async (options = {}) => { + const { strapi } = options; + + const { components } = strapi; + + const componentsDefinitions = Object.values(components).map((contentType) => ({ + uid: contentType.uid, + definition: models.schema.generateSchemaDefinition(contentType), + })); + + const formattedSchemasDefinitions = componentsDefinitions.reduce((acc, def) => { + acc.push( + // Definition + def.definition, + + // Add a newline between each interface declaration + factory.createIdentifier('\n') + ); + + return acc; + }, []); + + const allDefinitions = [ + // Imports + ...models.imports.generateImportDefinition(), + + // Add a newline after the import statement + factory.createIdentifier('\n'), + + // Schemas + ...formattedSchemasDefinitions, + + // Global + generateSharedExtensionDefinition('Components', componentsDefinitions), + ]; + + const output = emitDefinitions(allDefinitions); + const formattedOutput = await format(output); + + return { output: formattedOutput, stats: {} }; +}; + +module.exports = generateComponentsDefinitions; diff --git a/packages/utils/typescript/lib/generators/constants.js b/packages/utils/typescript/lib/generators/constants.js new file mode 100644 index 0000000000..3bdfa9ebd3 --- /dev/null +++ b/packages/utils/typescript/lib/generators/constants.js @@ -0,0 +1,6 @@ +'use strict'; + +const TYPES_ROOT_DIR = 'types'; +const GENERATED_OUT_DIR = 'generated'; + +module.exports = { GENERATED_OUT_DIR, TYPES_ROOT_DIR }; diff --git a/packages/utils/typescript/lib/generators/content-types/index.js b/packages/utils/typescript/lib/generators/content-types/index.js new file mode 100644 index 0000000000..9fb6e82302 --- /dev/null +++ b/packages/utils/typescript/lib/generators/content-types/index.js @@ -0,0 +1,58 @@ +'use strict'; + +const { factory } = require('typescript'); + +const { models } = require('../common'); +const { emitDefinitions, format, generateSharedExtensionDefinition } = require('../utils'); + +/** + * Generate type definitions for Strapi Content-Types + * + * @param {object} [options] + * @param {object} options.strapi + * @param {object} options.logger + * @param {string} options.pwd + */ +const generateContentTypesDefinitions = async (options = {}) => { + const { strapi } = options; + + const { contentTypes } = strapi; + + const contentTypesDefinitions = Object.values(contentTypes).map((contentType) => ({ + uid: contentType.uid, + definition: models.schema.generateSchemaDefinition(contentType), + })); + + const formattedSchemasDefinitions = contentTypesDefinitions.reduce((acc, def) => { + acc.push( + // Definition + def.definition, + + // Add a newline between each interface declaration + factory.createIdentifier('\n') + ); + + return acc; + }, []); + + const allDefinitions = [ + // Imports + ...models.imports.generateImportDefinition(), + + // Add a newline after the import statement + factory.createIdentifier('\n'), + + // Schemas + ...formattedSchemasDefinitions, + + // Global + generateSharedExtensionDefinition('ContentTypes', contentTypesDefinitions), + ]; + + const output = emitDefinitions(allDefinitions); + const formattedOutput = await format(output); + + return { output: formattedOutput, stats: {} }; +}; + +module.exports = generateContentTypesDefinitions; diff --git a/packages/utils/typescript/lib/generators/index.js b/packages/utils/typescript/lib/generators/index.js index f7fb9e53a7..ce9ed5de75 100644 --- a/packages/utils/typescript/lib/generators/index.js +++ b/packages/utils/typescript/lib/generators/index.js @@ -1,7 +1,122 @@ 'use strict'; -const generateSchemasDefinitions = require('./schemas'); +const path = require('path'); +const chalk = require('chalk'); -module.exports = { - generateSchemasDefinitions, +const { TYPES_ROOT_DIR, GENERATED_OUT_DIR } = require('./constants'); +const { saveDefinitionToFileSystem, createLogger, timer } = require('./utils'); +const generateContentTypesDefinitions = require('./content-types'); +const generateComponentsDefinitions = require('./components'); + +const GENERATORS = { + contentTypes: generateContentTypesDefinitions, + components: generateComponentsDefinitions, }; + +/** + * @typedef GenerateConfig + * + * @property {object} strapi + * @property {boolean} pwd + * @property {object} [artifacts] + * @property {boolean} [artifacts.contentTypes] + * @property {boolean} [artifacts.components] + * @property {boolean} [artifacts.services] + * @property {boolean} [artifacts.controllers] + * @property {boolean} [artifacts.policies] + * @property {boolean} [artifacts.middlewares] + * @property {object} [logger] + * @property {boolean} [logger.silent] + * @property {boolean} [logger.debug] + * @property {boolean} [logger.verbose] + */ + +/** + * Generate types definitions based on the given configuration + * + * @param {GenerateConfig} [config] + */ +const generate = async (config = {}) => { + const { pwd, rootDir = TYPES_ROOT_DIR, strapi, artifacts = {}, logger: loggerConfig } = config; + const reports = {}; + const logger = createLogger(loggerConfig); + const psTimer = timer().start(); + + const registryPwd = path.join(pwd, rootDir, GENERATED_OUT_DIR); + const generatorConfig = { strapi, pwd: registryPwd, logger }; + + const returnWithMessage = () => { + const nbWarnings = chalk.yellow(`${logger.warnings} warning(s)`); + const nbErrors = chalk.red(`${logger.errors} error(s)`); + + const status = logger.errors > 0 ? chalk.red('errored') : chalk.green('completed successfully'); + + psTimer.end(); + + logger.info(`The task ${status} with ${nbWarnings} and ${nbErrors} in ${psTimer.duration}s.`); + + return reports; + }; + + const enabledArtifacts = Object.keys(artifacts).filter((p) => artifacts[p] === true); + + logger.info('Starting the type generation process'); + logger.debug(`Enabled artifacts: ${enabledArtifacts.join(', ')}`); + + for (const artifact of enabledArtifacts) { + const boldArtifact = chalk.bold(artifact); // used for log messages + + logger.info(`Generating types for ${boldArtifact}`); + + if (artifact in GENERATORS) { + const generator = GENERATORS[artifact]; + + try { + const artifactGenTimer = timer().start(); + + reports[artifact] = await generator(generatorConfig); + + artifactGenTimer.end(); + + logger.debug(`Generated ${boldArtifact} in ${artifactGenTimer.duration}s`); + } catch (e) { + logger.error( + `Failed to generate types for ${boldArtifact}: ${e.message ?? e.toString()}. Exiting` + ); + return returnWithMessage(); + } + } else { + logger.warn(`The types generator for ${boldArtifact} is not implemented, skipping`); + } + } + + for (const artifact of Object.keys(reports)) { + const boldArtifact = chalk.bold(artifact); // used for log messages + + const artifactFsTimer = timer().start(); + + const report = reports[artifact]; + const filename = `${artifact}.d.ts`; + + try { + const outPath = await saveDefinitionToFileSystem(registryPwd, filename, report.output); + const relativeOutPath = path.relative(__dirname, outPath); + + artifactFsTimer.end(); + + logger.info(`Saved ${boldArtifact} types in ${chalk.bold(relativeOutPath)}`); + logger.debug(`Saved ${boldArtifact} in ${artifactFsTimer.duration}s`); + } catch (e) { + logger.error( + `An error occurred while saving ${boldArtifact} types to the filesystem: ${ + e.message ?? e.toString() + }. Exiting` + ); + return returnWithMessage(); + } + } + + return returnWithMessage(); +}; + +module.exports = { generate }; diff --git a/packages/utils/typescript/lib/generators/schemas/global.js b/packages/utils/typescript/lib/generators/schemas/global.js deleted file mode 100644 index 64fd4d06f5..0000000000 --- a/packages/utils/typescript/lib/generators/schemas/global.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -/* eslint-disable no-bitwise */ - -const ts = require('typescript'); -const { factory } = require('typescript'); - -const { getSchemaInterfaceName } = require('./utils'); - -/** - * - * @param {object} schemaDefinition - * @param {ts.InterfaceDeclaration} schemaDefinition.definition - * @param {object} schemaDefinition.schema - */ -const schemaDefinitionToPropertySignature = ({ schema }) => { - const { uid } = schema; - - const interfaceTypeName = getSchemaInterfaceName(uid); - - return factory.createPropertySignature( - undefined, - factory.createStringLiteral(uid, true), - undefined, - factory.createTypeReferenceNode(factory.createIdentifier(interfaceTypeName)) - ); -}; - -/** - * Generate the global module augmentation block - * - * @param {Array<{ schema: object; definition: ts.TypeNode }>} schemasDefinitions - * @returns {ts.ModuleDeclaration} - */ -const generateGlobalDefinition = (schemasDefinitions = []) => { - const properties = schemasDefinitions.map(schemaDefinitionToPropertySignature); - - return factory.createModuleDeclaration( - [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], - factory.createIdentifier('global'), - factory.createModuleBlock([ - factory.createModuleDeclaration( - undefined, - factory.createIdentifier('Strapi'), - factory.createModuleBlock([ - factory.createInterfaceDeclaration( - undefined, - factory.createIdentifier('Schemas'), - undefined, - undefined, - properties - ), - ]), - ts.NodeFlags.Namespace | - ts.NodeFlags.ExportContext | - ts.NodeFlags.Ambient | - ts.NodeFlags.ContextFlags - ), - ]), - ts.NodeFlags.ExportContext | - ts.NodeFlags.GlobalAugmentation | - ts.NodeFlags.Ambient | - ts.NodeFlags.ContextFlags - ); -}; - -module.exports = { generateGlobalDefinition }; diff --git a/packages/utils/typescript/lib/generators/schemas/index.js b/packages/utils/typescript/lib/generators/schemas/index.js deleted file mode 100644 index 31086881e2..0000000000 --- a/packages/utils/typescript/lib/generators/schemas/index.js +++ /dev/null @@ -1,185 +0,0 @@ -'use strict'; - -const path = require('path'); - -const ts = require('typescript'); -const { factory } = require('typescript'); - -const fp = require('lodash/fp'); -const fse = require('fs-extra'); -const prettier = require('prettier'); -const chalk = require('chalk'); -const CLITable = require('cli-table3'); - -const { generateImportDefinition } = require('./imports'); -const { generateSchemaDefinition } = require('./schema'); -const { generateGlobalDefinition } = require('./global'); -const { - getAllStrapiSchemas, - getSchemaInterfaceName, - getSchemaModelType, - getDefinitionAttributesCount, -} = require('./utils'); - -const DEFAULT_OUT_FILENAME = 'schemas.d.ts'; - -const emitDefinitions = (definitions) => { - const nodeArray = factory.createNodeArray(definitions); - - const sourceFile = ts.createSourceFile( - 'placeholder.ts', - '', - ts.ScriptTarget.ESNext, - true, - ts.ScriptKind.TS - ); - - const printer = ts.createPrinter({ omitTrailingSemicolon: true }); - - return printer.printList(ts.ListFormat.MultiLine, nodeArray, sourceFile); -}; - -const saveDefinitionToFileSystem = async (dir, file, content) => { - const filepath = path.join(dir, file); - - await fse.writeFile(filepath, content); - - return filepath; -}; - -/** - * Format the given definitions. - * Uses the existing config if one is defined in the project. - * - * @param {string} content - * @returns {Promise} - */ -const format = async (content) => { - const configFile = await prettier.resolveConfigFile(); - const config = configFile - ? await prettier.resolveConfig(configFile) - : // Default config - { - singleQuote: true, - useTabs: false, - tabWidth: 2, - }; - - Object.assign(config, { parser: 'typescript' }); - - return prettier.format(content, config); -}; - -const logDebugInformation = (definitions, options = {}) => { - const { filepath, verbose, silent } = options; - - if (verbose) { - const table = new CLITable({ - head: [ - chalk.bold(chalk.green('Model Type')), - chalk.bold(chalk.blue('UID')), - chalk.bold(chalk.blue('Type')), - chalk.bold(chalk.gray('Attributes Count')), - ], - colAligns: ['center', 'left', 'left', 'center'], - }); - - const sortedDefinitions = definitions.map((def) => ({ - ...def, - attributesCount: getDefinitionAttributesCount(def.definition), - })); - - for (const { schema, attributesCount } of sortedDefinitions) { - const modelType = fp.upperFirst(getSchemaModelType(schema)); - const interfaceType = getSchemaInterfaceName(schema.uid); - - table.push([ - chalk.greenBright(modelType), - chalk.blue(schema.uid), - chalk.blue(interfaceType), - chalk.grey(fp.isNil(attributesCount) ? 'N/A' : attributesCount), - ]); - } - - // Table - console.log(table.toString()); - } - - if (!silent) { - // Metrics - console.log( - chalk.greenBright( - `Generated ${definitions.length} type definition for your Strapi application's schemas.` - ) - ); - - // Filepath - const relativePath = path.relative(process.cwd(), filepath); - - console.log( - chalk.grey(`The definitions file has been generated here: ${chalk.bold(relativePath)}`) - ); - } -}; - -/** - * Generate type definitions for Strapi schemas - * - * @param {object} options - * @param {Strapi} options.strapi - * @param {{ distDir: string; appDir: string; }} options.dirs - * @param {string} [options.outDir] - * @param {string} [options.file] - * @param {boolean} [options.verbose] - */ -const generateSchemasDefinitions = async (options = {}) => { - const { - strapi, - outDir = process.cwd(), - file = DEFAULT_OUT_FILENAME, - verbose = false, - silent = false, - } = options; - - const schemas = getAllStrapiSchemas(strapi); - - const schemasDefinitions = Object.values(schemas).map((schema) => ({ - schema, - definition: generateSchemaDefinition(schema), - })); - - const formattedSchemasDefinitions = schemasDefinitions.reduce((acc, def) => { - acc.push( - // Definition - def.definition, - - // Add a newline between each interface declaration - factory.createIdentifier('\n') - ); - - return acc; - }, []); - - const allDefinitions = [ - // Imports - generateImportDefinition(), - - // Add a newline after the import statement - factory.createIdentifier('\n'), - - // Schemas - ...formattedSchemasDefinitions, - - // Global - generateGlobalDefinition(schemasDefinitions), - ]; - - const output = emitDefinitions(allDefinitions); - const formattedOutput = await format(output); - - const definitionFilepath = await saveDefinitionToFileSystem(outDir, file, formattedOutput); - - logDebugInformation(schemasDefinitions, { filepath: definitionFilepath, verbose, silent }); -}; - -module.exports = generateSchemasDefinitions; diff --git a/packages/utils/typescript/lib/generators/utils.js b/packages/utils/typescript/lib/generators/utils.js new file mode 100644 index 0000000000..33383efc0e --- /dev/null +++ b/packages/utils/typescript/lib/generators/utils.js @@ -0,0 +1,211 @@ +'use strict'; + +const ts = require('typescript'); +const prettier = require('prettier'); +const fse = require('fs-extra'); +const path = require('path'); +const chalk = require('chalk'); +const assert = require('assert'); + +const { factory } = ts; + +/** + * Aggregate the given TypeScript nodes into a single string + * + * @param {ts.Node[]} definitions + * @return {string} + */ +const emitDefinitions = (definitions) => { + const nodeArray = factory.createNodeArray(definitions); + + const sourceFile = ts.createSourceFile( + 'placeholder.ts', + '', + ts.ScriptTarget.ESNext, + true, + ts.ScriptKind.TS + ); + + const printer = ts.createPrinter({ omitTrailingSemicolon: true }); + + return printer.printList(ts.ListFormat.MultiLine, nodeArray, sourceFile); +}; + +/** + * Save the given string representation of TS nodes in a file + * If the given directory doesn't exist, it'll be created automatically + * + * @param {string} dir + * @param {string} file + * @param {string} content + * + * @return {Promise} The path of the created file + */ +const saveDefinitionToFileSystem = async (dir, file, content) => { + const filepath = path.join(dir, file); + + fse.ensureDirSync(dir); + await fse.writeFile(filepath, content); + + return filepath; +}; + +/** + * Format the given definitions. + * Uses the existing config if one is defined in the project. + * + * @param {string} content + * @returns {Promise} + */ +const format = async (content) => { + const configFile = await prettier.resolveConfigFile(); + const config = configFile + ? await prettier.resolveConfig(configFile) + : // Default config + { + singleQuote: true, + useTabs: false, + tabWidth: 2, + }; + + Object.assign(config, { parser: 'typescript' }); + + return prettier.format(content, config); +}; + +/** + * Generate the extension block for a shared component from strapi/strapi + * + * @param {string} registry The registry to extend + * @param {Array<{ uid: string; definition: ts.TypeNode }>} definitions + * @returns {ts.ModuleDeclaration} + */ +const generateSharedExtensionDefinition = (registry, definitions) => { + const properties = definitions.map(({ uid, definition }) => + factory.createPropertySignature( + undefined, + factory.createStringLiteral(uid, true), + undefined, + factory.createTypeReferenceNode(factory.createIdentifier(definition.name.escapedText)) + ) + ); + + return factory.createModuleDeclaration( + [factory.createModifier(ts.SyntaxKind.DeclareKeyword)], + factory.createStringLiteral('@strapi/strapi', true), + factory.createModuleBlock([ + factory.createModuleDeclaration( + [factory.createModifier(ts.SyntaxKind.ExportKeyword)], + factory.createIdentifier('Shared'), + factory.createModuleBlock( + properties.length > 0 + ? [ + factory.createInterfaceDeclaration( + [factory.createModifier(ts.SyntaxKind.ExportKeyword)], + factory.createIdentifier(registry), + undefined, + undefined, + properties + ), + ] + : [] + ) + ), + ]), + ts.NodeFlags.ExportContext + ); +}; + +const createLogger = (options = {}) => { + const { silent = false, debug = false } = options; + + const state = { errors: 0, warning: 0 }; + + return { + get warnings() { + return state.warning; + }, + + get errors() { + return state.errors; + }, + + debug(...args) { + if (silent || !debug) { + return; + } + + console.log(chalk.cyan(`[DEBUG]\t[${new Date().toISOString()}] (Typegen)`), ...args); + }, + + info(...args) { + if (silent) { + return; + } + + console.info(chalk.blue(`[INFO]\t[${new Date().toISOString()}] (Typegen)`), ...args); + }, + + warn(...args) { + state.warning += 1; + + if (silent) { + return; + } + + console.warn(chalk.yellow(`[WARN]\t[${new Date().toISOString()}] (Typegen)`), ...args); + }, + + error(...args) { + state.errors += 1; + + if (silent) { + return; + } + + console.error(chalk.red(`[ERROR]\t[${new Date().toISOString()}] (Typegen)`), ...args); + }, + }; +}; + +const timer = () => { + const state = { + start: null, + end: null, + }; + + return { + start() { + assert(state.start === null, 'The timer has already been started'); + assert(state.end === null, 'The timer has already been ended'); + + state.start = Date.now(); + + return this; + }, + + end() { + assert(state.start !== null, 'The timer needs to be started before ending it'); + assert(state.end === null, 'The timer has already been ended'); + + state.end = Date.now(); + + return this; + }, + + get duration() { + assert(state.start !== null, 'The timer has not been started'); + + return ((state.end ?? Date.now) - state.start) / 1000; + }, + }; +}; + +module.exports = { + emitDefinitions, + saveDefinitionToFileSystem, + format, + generateSharedExtensionDefinition, + createLogger, + timer, +}; diff --git a/packages/utils/typescript/package.json b/packages/utils/typescript/package.json index 942f18f591..1561f57e48 100644 --- a/packages/utils/typescript/package.json +++ b/packages/utils/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/typescript-utils", - "version": "4.11.0", + "version": "4.11.1", "description": "Typescript support for Strapi", "keywords": [ "strapi", diff --git a/scripts/front/package.json b/scripts/front/package.json index 7e3faf3ff5..bef096ecd5 100644 --- a/scripts/front/package.json +++ b/scripts/front/package.json @@ -1,7 +1,7 @@ { "name": "scripts-front", "private": true, - "version": "4.11.0", + "version": "4.11.1", "scripts": { "test:front": "jest --config jest.config.front.js" } diff --git a/yarn.lock b/yarn.lock index 631318b544..2ed6894c6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4690,15 +4690,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/cli@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/cli@npm:15.9.4" - dependencies: - nx: 15.9.4 - checksum: 039df998bbc56cc6d506a4c07500c97ce6662dff1ed0756d893d48398ffbfcfc9a1c274914011dbe331c0663b5c3e6de496ad6cdd05180ea0505fdcee19c67ff - languageName: node - linkType: hard - "@nrwl/devkit@npm:>=15.5.2 < 16": version: 15.8.2 resolution: "@nrwl/devkit@npm:15.8.2" @@ -4722,13 +4713,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-darwin-arm64@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-darwin-arm64@npm:15.9.4" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@nrwl/nx-darwin-x64@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-darwin-x64@npm:15.8.2" @@ -4736,13 +4720,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-darwin-x64@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-darwin-x64@npm:15.9.4" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@nrwl/nx-linux-arm-gnueabihf@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.8.2" @@ -4750,13 +4727,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-linux-arm-gnueabihf@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.4" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@nrwl/nx-linux-arm64-gnu@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.8.2" @@ -4764,13 +4734,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-linux-arm64-gnu@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.9.4" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@nrwl/nx-linux-arm64-musl@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-linux-arm64-musl@npm:15.8.2" @@ -4778,13 +4741,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-linux-arm64-musl@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-linux-arm64-musl@npm:15.9.4" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@nrwl/nx-linux-x64-gnu@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-linux-x64-gnu@npm:15.8.2" @@ -4792,13 +4748,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-linux-x64-gnu@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-linux-x64-gnu@npm:15.9.4" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@nrwl/nx-linux-x64-musl@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-linux-x64-musl@npm:15.8.2" @@ -4806,13 +4755,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-linux-x64-musl@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-linux-x64-musl@npm:15.9.4" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@nrwl/nx-win32-arm64-msvc@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.8.2" @@ -4820,13 +4762,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-win32-arm64-msvc@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.9.4" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@nrwl/nx-win32-x64-msvc@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/nx-win32-x64-msvc@npm:15.8.2" @@ -4834,13 +4769,6 @@ __metadata: languageName: node linkType: hard -"@nrwl/nx-win32-x64-msvc@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/nx-win32-x64-msvc@npm:15.9.4" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@nrwl/tao@npm:15.8.2": version: 15.8.2 resolution: "@nrwl/tao@npm:15.8.2" @@ -4852,14 +4780,84 @@ __metadata: languageName: node linkType: hard -"@nrwl/tao@npm:15.9.4": - version: 15.9.4 - resolution: "@nrwl/tao@npm:15.9.4" +"@nrwl/tao@npm:16.3.2": + version: 16.3.2 + resolution: "@nrwl/tao@npm:16.3.2" dependencies: - nx: 15.9.4 + nx: 16.3.2 bin: tao: index.js - checksum: 03acf914b443fc5b0a93674dbdf9d770856d48adf8956819869aef6c5378ecb52e9696361e8c8799c639fd384f7ab5d109189d44251a8975901adcfe77fa0c9e + checksum: 85f6c83170b0beccee7d86ae7cc3a09154d003be4fb9ab7b34f66044b71161d439766b6b19ef63424671780285476bad3375306c7e2af099d82c39d755997678 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-darwin-arm64@npm:16.3.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-darwin-x64@npm:16.3.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-freebsd-x64@npm:16.3.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:16.3.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-linux-arm64-gnu@npm:16.3.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-linux-arm64-musl@npm:16.3.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-linux-x64-gnu@npm:16.3.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-linux-x64-musl@npm:16.3.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-win32-arm64-msvc@npm:16.3.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:16.3.2": + version: 16.3.2 + resolution: "@nx/nx-win32-x64-msvc@npm:16.3.2" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7867,17 +7865,17 @@ __metadata: dependencies: "@juggle/resize-observer": 3.4.0 "@testing-library/jest-dom": 5.16.5 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 jest-styled-components: 7.1.1 redux: ^4.2.1 - tsconfig: 4.11.0 + tsconfig: 4.11.1 whatwg-fetch: 3.6.2 peerDependencies: redux: ^4.2.1 languageName: unknown linkType: soft -"@strapi/admin@4.11.0, @strapi/admin@workspace:packages/core/admin": +"@strapi/admin@4.11.1, @strapi/admin@workspace:packages/core/admin": version: 0.0.0-use.local resolution: "@strapi/admin@workspace:packages/core/admin" dependencies: @@ -7889,15 +7887,15 @@ __metadata: "@casl/ability": ^5.4.3 "@fingerprintjs/fingerprintjs": 3.4.1 "@pmmmwh/react-refresh-webpack-plugin": 0.5.10 - "@strapi/babel-plugin-switch-ee-ce": 4.11.0 - "@strapi/data-transfer": 4.11.0 + "@strapi/babel-plugin-switch-ee-ce": 4.11.1 + "@strapi/data-transfer": 4.11.1 "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/permissions": 4.11.0 - "@strapi/provider-audit-logs-local": 4.11.0 - "@strapi/typescript-utils": 4.11.0 - "@strapi/utils": 4.11.0 + "@strapi/permissions": 4.11.1 + "@strapi/provider-audit-logs-local": 4.11.1 + "@strapi/typescript-utils": 4.11.1 + "@strapi/utils": 4.11.1 "@testing-library/dom": 9.2.0 "@testing-library/react": 14.0.0 "@testing-library/user-event": 14.4.3 @@ -7990,7 +7988,7 @@ __metadata: languageName: unknown linkType: soft -"@strapi/babel-plugin-switch-ee-ce@4.11.0, @strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce": +"@strapi/babel-plugin-switch-ee-ce@4.11.1, @strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce": version: 0.0.0-use.local resolution: "@strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce" dependencies: @@ -8008,12 +8006,12 @@ __metadata: languageName: unknown linkType: soft -"@strapi/data-transfer@4.11.0, @strapi/data-transfer@workspace:packages/core/data-transfer": +"@strapi/data-transfer@4.11.1, @strapi/data-transfer@workspace:packages/core/data-transfer": version: 0.0.0-use.local resolution: "@strapi/data-transfer@workspace:packages/core/data-transfer" dependencies: - "@strapi/logger": 4.11.0 - "@strapi/strapi": 4.11.0 + "@strapi/logger": 4.11.1 + "@strapi/strapi": 4.11.1 "@tsconfig/node16": 1.0.3 "@types/fs-extra": 9.0.13 "@types/jest": 29.2.0 @@ -8041,11 +8039,11 @@ __metadata: languageName: unknown linkType: soft -"@strapi/database@4.11.0, @strapi/database@workspace:packages/core/database": +"@strapi/database@4.11.1, @strapi/database@workspace:packages/core/database": version: 0.0.0-use.local resolution: "@strapi/database@workspace:packages/core/database" dependencies: - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 date-fns: 2.30.0 debug: 4.3.4 fs-extra: 10.0.0 @@ -8109,7 +8107,7 @@ __metadata: languageName: node linkType: hard -"@strapi/generate-new@4.11.0, @strapi/generate-new@workspace:packages/generators/app": +"@strapi/generate-new@4.11.1, @strapi/generate-new@workspace:packages/generators/app": version: 0.0.0-use.local resolution: "@strapi/generate-new@workspace:packages/generators/app" dependencies: @@ -8128,25 +8126,25 @@ __metadata: languageName: unknown linkType: soft -"@strapi/generators@4.11.0, @strapi/generators@workspace:packages/generators/generators": +"@strapi/generators@4.11.1, @strapi/generators@workspace:packages/generators/generators": version: 0.0.0-use.local resolution: "@strapi/generators@workspace:packages/generators/generators" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/typescript-utils": 4.11.0 - "@strapi/utils": 4.11.0 + "@strapi/typescript-utils": 4.11.1 + "@strapi/utils": 4.11.1 chalk: 4.1.2 copyfiles: 2.4.1 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 fs-extra: 10.0.0 node-plop: 0.26.3 plop: 2.7.6 pluralize: 8.0.0 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/helper-plugin@4.11.0, @strapi/helper-plugin@workspace:packages/core/helper-plugin": +"@strapi/helper-plugin@4.11.1, @strapi/helper-plugin@workspace:packages/core/helper-plugin": version: 0.0.0-use.local resolution: "@strapi/helper-plugin@workspace:packages/core/helper-plugin" dependencies: @@ -8202,34 +8200,34 @@ __metadata: languageName: node linkType: hard -"@strapi/logger@4.11.0, @strapi/logger@workspace:packages/utils/logger": +"@strapi/logger@4.11.1, @strapi/logger@workspace:packages/utils/logger": version: 0.0.0-use.local resolution: "@strapi/logger@workspace:packages/utils/logger" dependencies: - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 lodash: 4.17.21 - tsconfig: 4.11.0 + tsconfig: 4.11.1 winston: 3.3.3 languageName: unknown linkType: soft -"@strapi/permissions@4.11.0, @strapi/permissions@workspace:packages/core/permissions": +"@strapi/permissions@4.11.1, @strapi/permissions@workspace:packages/core/permissions": version: 0.0.0-use.local resolution: "@strapi/permissions@workspace:packages/core/permissions" dependencies: "@casl/ability": 5.4.4 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 lodash: 4.17.21 sift: 16.0.1 languageName: unknown linkType: soft -"@strapi/plugin-color-picker@4.11.0, @strapi/plugin-color-picker@workspace:packages/plugins/color-picker": +"@strapi/plugin-color-picker@4.11.1, @strapi/plugin-color-picker@workspace:packages/plugins/color-picker": version: 0.0.0-use.local resolution: "@strapi/plugin-color-picker@workspace:packages/plugins/color-picker" dependencies: "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 "@testing-library/react": 14.0.0 prop-types: ^15.8.1 @@ -8248,27 +8246,27 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-content-manager@4.11.0, @strapi/plugin-content-manager@workspace:packages/core/content-manager": +"@strapi/plugin-content-manager@4.11.1, @strapi/plugin-content-manager@workspace:packages/core/content-manager": version: 0.0.0-use.local resolution: "@strapi/plugin-content-manager@workspace:packages/core/content-manager" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 lodash: 4.17.21 languageName: unknown linkType: soft -"@strapi/plugin-content-type-builder@4.11.0, @strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder": +"@strapi/plugin-content-type-builder@4.11.1, @strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder": version: 0.0.0-use.local resolution: "@strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/admin": 4.11.0 + "@strapi/admin": 4.11.1 "@strapi/design-system": 1.8.0 - "@strapi/generators": 4.11.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/generators": 4.11.1 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@testing-library/react": 14.0.0 "@testing-library/react-hooks": 8.0.1 fs-extra: 10.0.0 @@ -8296,15 +8294,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-documentation@4.11.0, @strapi/plugin-documentation@workspace:packages/plugins/documentation": +"@strapi/plugin-documentation@4.11.1, @strapi/plugin-documentation@workspace:packages/plugins/documentation": version: 0.0.0-use.local resolution: "@strapi/plugin-documentation@workspace:packages/plugins/documentation" dependencies: "@apidevtools/swagger-parser": ^10.1.0 "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@testing-library/react": 14.0.0 bcryptjs: 2.4.3 cheerio: ^1.0.0-rc.12 @@ -8339,15 +8337,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-email@4.11.0, @strapi/plugin-email@workspace:packages/core/email": +"@strapi/plugin-email@4.11.1, @strapi/plugin-email@workspace:packages/core/email": version: 0.0.0-use.local resolution: "@strapi/plugin-email@workspace:packages/core/email" dependencies: "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/provider-email-sendmail": 4.11.0 - "@strapi/utils": 4.11.0 + "@strapi/provider-email-sendmail": 4.11.1 + "@strapi/utils": 4.11.1 "@testing-library/react": 14.0.0 lodash: 4.17.21 msw: 1.2.1 @@ -8366,16 +8364,16 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-graphql@4.11.0, @strapi/plugin-graphql@workspace:packages/plugins/graphql": +"@strapi/plugin-graphql@4.11.1, @strapi/plugin-graphql@workspace:packages/plugins/graphql": version: 0.0.0-use.local resolution: "@strapi/plugin-graphql@workspace:packages/plugins/graphql" dependencies: "@graphql-tools/schema": 8.5.1 "@graphql-tools/utils": ^8.13.1 "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 apollo-server-core: 3.12.0 apollo-server-koa: 3.10.0 cross-env: ^7.0.3 @@ -8403,14 +8401,14 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-i18n@4.11.0, @strapi/plugin-i18n@workspace:packages/plugins/i18n": +"@strapi/plugin-i18n@4.11.1, @strapi/plugin-i18n@workspace:packages/plugins/i18n": version: 0.0.0-use.local resolution: "@strapi/plugin-i18n@workspace:packages/plugins/i18n" dependencies: "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@testing-library/react": 14.0.0 formik: 2.4.0 immer: 9.0.19 @@ -8435,13 +8433,13 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-sentry@4.11.0, @strapi/plugin-sentry@workspace:packages/plugins/sentry": +"@strapi/plugin-sentry@4.11.1, @strapi/plugin-sentry@workspace:packages/plugins/sentry": version: 0.0.0-use.local resolution: "@strapi/plugin-sentry@workspace:packages/plugins/sentry" dependencies: "@sentry/node": 6.19.7 "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 react: ^18.2.0 react-dom: ^18.2.0 @@ -8456,15 +8454,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-upload@4.11.0, @strapi/plugin-upload@workspace:packages/core/upload": +"@strapi/plugin-upload@4.11.1, @strapi/plugin-upload@workspace:packages/core/upload": version: 0.0.0-use.local resolution: "@strapi/plugin-upload@workspace:packages/core/upload" dependencies: "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/provider-upload-local": 4.11.0 - "@strapi/utils": 4.11.0 + "@strapi/provider-upload-local": 4.11.1 + "@strapi/utils": 4.11.1 "@testing-library/dom": 9.2.0 "@testing-library/react": 14.0.0 "@testing-library/user-event": 14.4.3 @@ -8502,21 +8500,20 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-users-permissions@4.11.0, @strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions": +"@strapi/plugin-users-permissions@4.11.1, @strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions": version: 0.0.0-use.local resolution: "@strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions" dependencies: "@strapi/design-system": 1.8.0 - "@strapi/helper-plugin": 4.11.0 + "@strapi/helper-plugin": 4.11.1 "@strapi/icons": 1.8.0 - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@testing-library/dom": 9.2.0 "@testing-library/react": 14.0.0 "@testing-library/user-event": 14.4.3 bcryptjs: 2.4.3 formik: 2.4.0 grant-koa: 5.4.8 - history: ^4.9.0 immer: 9.0.19 jsonwebtoken: 9.0.0 jwk-to-pem: 2.0.5 @@ -8543,12 +8540,12 @@ __metadata: languageName: unknown linkType: soft -"@strapi/provider-audit-logs-local@4.11.0, @strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local": +"@strapi/provider-audit-logs-local@4.11.1, @strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local": version: 0.0.0-use.local resolution: "@strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local" dependencies: - eslint-config-custom: 4.11.0 - tsconfig: 4.11.0 + eslint-config-custom: 4.11.1 + tsconfig: 4.11.1 peerDependencies: "@strapi/strapi": ^4.9.0 languageName: unknown @@ -8558,22 +8555,22 @@ __metadata: version: 0.0.0-use.local resolution: "@strapi/provider-email-amazon-ses@workspace:packages/providers/email-amazon-ses" dependencies: - "@strapi/utils": 4.11.0 - eslint-config-custom: 4.11.0 + "@strapi/utils": 4.11.1 + eslint-config-custom: 4.11.1 node-ses: ^3.0.3 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/provider-email-mailgun@4.11.0, @strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun": +"@strapi/provider-email-mailgun@4.11.1, @strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun": version: 0.0.0-use.local resolution: "@strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun" dependencies: - "@strapi/utils": 4.11.0 - eslint-config-custom: 4.11.0 + "@strapi/utils": 4.11.1 + eslint-config-custom: 4.11.1 form-data: ^4.0.0 mailgun.js: 8.2.1 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft @@ -8582,10 +8579,10 @@ __metadata: resolution: "@strapi/provider-email-nodemailer@workspace:packages/providers/email-nodemailer" dependencies: "@types/nodemailer": 6.4.7 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 lodash: 4.17.21 nodemailer: 6.9.1 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft @@ -8594,79 +8591,79 @@ __metadata: resolution: "@strapi/provider-email-sendgrid@workspace:packages/providers/email-sendgrid" dependencies: "@sendgrid/mail": 7.7.0 - "@strapi/utils": 4.11.0 - eslint-config-custom: 4.11.0 - tsconfig: 4.11.0 + "@strapi/utils": 4.11.1 + eslint-config-custom: 4.11.1 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/provider-email-sendmail@4.11.0, @strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail": +"@strapi/provider-email-sendmail@4.11.1, @strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail": version: 0.0.0-use.local resolution: "@strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail" dependencies: - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@types/sendmail": 1.4.4 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 sendmail: ^1.6.1 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/provider-upload-aws-s3@4.11.0, @strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3": +"@strapi/provider-upload-aws-s3@4.11.1, @strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3": version: 0.0.0-use.local resolution: "@strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3" dependencies: "@types/jest": 29.2.0 - aws-sdk: 2.1372.0 - eslint-config-custom: 4.11.0 + aws-sdk: 2.1399.0 + eslint-config-custom: 4.11.1 lodash: 4.17.21 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/provider-upload-cloudinary@4.11.0, @strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary": +"@strapi/provider-upload-cloudinary@4.11.1, @strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary": version: 0.0.0-use.local resolution: "@strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary" dependencies: - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 cloudinary: ^1.37.0 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 into-stream: ^5.1.0 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/provider-upload-local@4.11.0, @strapi/provider-upload-local@workspace:packages/providers/upload-local": +"@strapi/provider-upload-local@4.11.1, @strapi/provider-upload-local@workspace:packages/providers/upload-local": version: 0.0.0-use.local resolution: "@strapi/provider-upload-local@workspace:packages/providers/upload-local" dependencies: - "@strapi/utils": 4.11.0 + "@strapi/utils": 4.11.1 "@types/jest": 29.2.0 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 fs-extra: 10.0.0 - tsconfig: 4.11.0 + tsconfig: 4.11.1 languageName: unknown linkType: soft -"@strapi/strapi@4.11.0, @strapi/strapi@workspace:packages/core/strapi": +"@strapi/strapi@4.11.1, @strapi/strapi@workspace:packages/core/strapi": version: 0.0.0-use.local resolution: "@strapi/strapi@workspace:packages/core/strapi" dependencies: "@koa/cors": 3.4.3 "@koa/router": 10.1.1 - "@strapi/admin": 4.11.0 - "@strapi/data-transfer": 4.11.0 - "@strapi/database": 4.11.0 - "@strapi/generate-new": 4.11.0 - "@strapi/generators": 4.11.0 - "@strapi/logger": 4.11.0 - "@strapi/permissions": 4.11.0 - "@strapi/plugin-content-manager": 4.11.0 - "@strapi/plugin-content-type-builder": 4.11.0 - "@strapi/plugin-email": 4.11.0 - "@strapi/plugin-upload": 4.11.0 - "@strapi/typescript-utils": 4.11.0 - "@strapi/utils": 4.11.0 + "@strapi/admin": 4.11.1 + "@strapi/data-transfer": 4.11.1 + "@strapi/database": 4.11.1 + "@strapi/generate-new": 4.11.1 + "@strapi/generators": 4.11.1 + "@strapi/logger": 4.11.1 + "@strapi/permissions": 4.11.1 + "@strapi/plugin-content-manager": 4.11.1 + "@strapi/plugin-content-type-builder": 4.11.1 + "@strapi/plugin-email": 4.11.1 + "@strapi/plugin-upload": 4.11.1 + "@strapi/typescript-utils": 4.11.1 + "@strapi/utils": 4.11.1 bcryptjs: 2.4.3 boxen: 5.1.2 chalk: 4.1.2 @@ -8713,7 +8710,7 @@ __metadata: languageName: unknown linkType: soft -"@strapi/typescript-utils@4.11.0, @strapi/typescript-utils@workspace:packages/utils/typescript": +"@strapi/typescript-utils@4.11.1, @strapi/typescript-utils@workspace:packages/utils/typescript": version: 0.0.0-use.local resolution: "@strapi/typescript-utils@workspace:packages/utils/typescript" dependencies: @@ -8758,7 +8755,7 @@ __metadata: languageName: node linkType: hard -"@strapi/utils@4.11.0, @strapi/utils@workspace:packages/core/utils": +"@strapi/utils@4.11.1, @strapi/utils@workspace:packages/core/utils": version: 0.0.0-use.local resolution: "@strapi/utils@workspace:packages/core/utils" dependencies: @@ -12088,9 +12085,9 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:2.1372.0": - version: 2.1372.0 - resolution: "aws-sdk@npm:2.1372.0" +"aws-sdk@npm:2.1399.0": + version: 2.1399.0 + resolution: "aws-sdk@npm:2.1399.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -12102,7 +12099,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.5.0 - checksum: da064626d434f792adf74861534ab3fc15757ba9352f735f6703deacebf1b982c057d5db434ac00fc5d364aee1c82de684572e205228f5014ca468e05e312d97 + checksum: 74dc46a921cd449749e6a9ba318eb959db0004a21b0c8257660a0cb9727c09b3260f5adb460429d9f362b5c432897df9f7dab3b72dc8c599fdbb96681b132dbc languageName: node linkType: hard @@ -14823,11 +14820,11 @@ __metadata: version: 0.0.0-use.local resolution: "create-strapi-app@workspace:packages/cli/create-strapi-app" dependencies: - "@strapi/generate-new": 4.11.0 + "@strapi/generate-new": 4.11.1 commander: 8.3.0 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 inquirer: 8.2.5 - tsconfig: 4.11.0 + tsconfig: 4.11.1 bin: create-strapi-app: ./bin/index.js languageName: unknown @@ -14837,16 +14834,16 @@ __metadata: version: 0.0.0-use.local resolution: "create-strapi-starter@workspace:packages/cli/create-strapi-starter" dependencies: - "@strapi/generate-new": 4.11.0 + "@strapi/generate-new": 4.11.1 chalk: 4.1.2 ci-info: 3.8.0 commander: 8.3.0 - eslint-config-custom: 4.11.0 + eslint-config-custom: 4.11.1 execa: 5.1.1 fs-extra: 10.0.0 inquirer: 8.2.5 ora: 5.4.1 - tsconfig: 4.11.0 + tsconfig: 4.11.1 bin: create-strapi-starter: ./bin/index.js languageName: unknown @@ -16669,7 +16666,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-custom@4.11.0, eslint-config-custom@workspace:packages/utils/eslint-config-custom": +"eslint-config-custom@4.11.1, eslint-config-custom@workspace:packages/utils/eslint-config-custom": version: 0.0.0-use.local resolution: "eslint-config-custom@workspace:packages/utils/eslint-config-custom" languageName: unknown @@ -18674,16 +18671,16 @@ __metadata: resolution: "getstarted@workspace:examples/getstarted" dependencies: "@strapi/icons": 1.8.0 - "@strapi/plugin-color-picker": 4.11.0 - "@strapi/plugin-documentation": 4.11.0 - "@strapi/plugin-graphql": 4.11.0 - "@strapi/plugin-i18n": 4.11.0 - "@strapi/plugin-sentry": 4.11.0 - "@strapi/plugin-users-permissions": 4.11.0 - "@strapi/provider-email-mailgun": 4.11.0 - "@strapi/provider-upload-aws-s3": 4.11.0 - "@strapi/provider-upload-cloudinary": 4.11.0 - "@strapi/strapi": 4.11.0 + "@strapi/plugin-color-picker": 4.11.1 + "@strapi/plugin-documentation": 4.11.1 + "@strapi/plugin-graphql": 4.11.1 + "@strapi/plugin-i18n": 4.11.1 + "@strapi/plugin-sentry": 4.11.1 + "@strapi/plugin-users-permissions": 4.11.1 + "@strapi/provider-email-mailgun": 4.11.1 + "@strapi/provider-upload-aws-s3": 4.11.1 + "@strapi/provider-upload-cloudinary": 4.11.1 + "@strapi/strapi": 4.11.1 better-sqlite3: 8.3.0 lodash: 4.17.21 mysql: 2.18.1 @@ -22825,9 +22822,9 @@ __metadata: version: 0.0.0-use.local resolution: "kitchensink-ts@workspace:examples/kitchensink-ts" dependencies: - "@strapi/plugin-i18n": 4.11.0 - "@strapi/plugin-users-permissions": 4.11.0 - "@strapi/strapi": 4.11.0 + "@strapi/plugin-i18n": 4.11.1 + "@strapi/plugin-users-permissions": 4.11.1 + "@strapi/strapi": 4.11.1 better-sqlite3: 8.3.0 react: ^18.2.0 react-dom: ^18.2.0 @@ -22840,10 +22837,10 @@ __metadata: version: 0.0.0-use.local resolution: "kitchensink@workspace:examples/kitchensink" dependencies: - "@strapi/provider-email-mailgun": 4.11.0 - "@strapi/provider-upload-aws-s3": 4.11.0 - "@strapi/provider-upload-cloudinary": 4.11.0 - "@strapi/strapi": 4.11.0 + "@strapi/provider-email-mailgun": 4.11.1 + "@strapi/provider-upload-aws-s3": 4.11.1 + "@strapi/provider-upload-cloudinary": 4.11.1 + "@strapi/strapi": 4.11.1 lodash: 4.17.21 mysql: 2.18.1 passport-google-oauth2: 0.2.0 @@ -25670,21 +25667,21 @@ __metadata: languageName: node linkType: hard -"nx@npm:15.9.4": - version: 15.9.4 - resolution: "nx@npm:15.9.4" +"nx@npm:16.3.2": + version: 16.3.2 + resolution: "nx@npm:16.3.2" dependencies: - "@nrwl/cli": 15.9.4 - "@nrwl/nx-darwin-arm64": 15.9.4 - "@nrwl/nx-darwin-x64": 15.9.4 - "@nrwl/nx-linux-arm-gnueabihf": 15.9.4 - "@nrwl/nx-linux-arm64-gnu": 15.9.4 - "@nrwl/nx-linux-arm64-musl": 15.9.4 - "@nrwl/nx-linux-x64-gnu": 15.9.4 - "@nrwl/nx-linux-x64-musl": 15.9.4 - "@nrwl/nx-win32-arm64-msvc": 15.9.4 - "@nrwl/nx-win32-x64-msvc": 15.9.4 - "@nrwl/tao": 15.9.4 + "@nrwl/tao": 16.3.2 + "@nx/nx-darwin-arm64": 16.3.2 + "@nx/nx-darwin-x64": 16.3.2 + "@nx/nx-freebsd-x64": 16.3.2 + "@nx/nx-linux-arm-gnueabihf": 16.3.2 + "@nx/nx-linux-arm64-gnu": 16.3.2 + "@nx/nx-linux-arm64-musl": 16.3.2 + "@nx/nx-linux-x64-gnu": 16.3.2 + "@nx/nx-linux-x64-musl": 16.3.2 + "@nx/nx-win32-arm64-msvc": 16.3.2 + "@nx/nx-win32-x64-msvc": 16.3.2 "@parcel/watcher": 2.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.18 @@ -25722,23 +25719,25 @@ __metadata: "@swc-node/register": ^1.4.2 "@swc/core": ^1.2.173 dependenciesMeta: - "@nrwl/nx-darwin-arm64": + "@nx/nx-darwin-arm64": optional: true - "@nrwl/nx-darwin-x64": + "@nx/nx-darwin-x64": optional: true - "@nrwl/nx-linux-arm-gnueabihf": + "@nx/nx-freebsd-x64": optional: true - "@nrwl/nx-linux-arm64-gnu": + "@nx/nx-linux-arm-gnueabihf": optional: true - "@nrwl/nx-linux-arm64-musl": + "@nx/nx-linux-arm64-gnu": optional: true - "@nrwl/nx-linux-x64-gnu": + "@nx/nx-linux-arm64-musl": optional: true - "@nrwl/nx-linux-x64-musl": + "@nx/nx-linux-x64-gnu": optional: true - "@nrwl/nx-win32-arm64-msvc": + "@nx/nx-linux-x64-musl": optional: true - "@nrwl/nx-win32-x64-msvc": + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": optional: true peerDependenciesMeta: "@swc-node/register": @@ -25747,7 +25746,7 @@ __metadata: optional: true bin: nx: bin/nx.js - checksum: 61b92c070db1474462eb31f86cf3ac5a5ab2a3f454bed307a0b931cf09ef5ee883c90f05b4440f5760ff57f3965ecdd744320ff3b0475fba9b52004840173b5f + checksum: 627decdb89cea60f45ab035b33a53f2e3170f24c0eed07cfbec59eeeda4a6d62b57738e5f34fd1cdcdc00dcff83bb4d1022fe892c69e89420182d50ff0f6b547 languageName: node linkType: hard @@ -30710,7 +30709,7 @@ __metadata: lerna: 6.5.1 lint-staged: 13.2.2 lodash: 4.17.21 - nx: 15.9.4 + nx: 16.3.2 plop: 2.7.6 prettier: 2.8.4 qs: 6.11.1 @@ -32120,7 +32119,7 @@ __metadata: languageName: node linkType: hard -"tsconfig@4.11.0, tsconfig@workspace:packages/utils/tsconfig": +"tsconfig@4.11.1, tsconfig@workspace:packages/utils/tsconfig": version: 0.0.0-use.local resolution: "tsconfig@workspace:packages/utils/tsconfig" languageName: unknown