WK Enhanced Search

Enhance WaniKani's Subject Search Results

// ==UserScript==
// @name         WK Enhanced Search
// @namespace    sirenhound
// @version      0.0.6
// @description  Enhance WaniKani's Subject Search Results
// @author       Ethan McCoy
// @match        http*://www.wanikani.com/search?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var apiV2 = ''; //<-- Put your APIv2 token here.

    var mute = false; // Mutes console output for this script.
    var failSilently = false; // Mutes error output to console.
    // Variables that concern adding more search results/functionality
    var includeSKIP = true; // Includes SKIP codes (ie. 1-1-1 etc)
    var includeUserSynonyms = true; // Includes user synonyms in search results

    /* TO BE ADDED:
    - Shuffle new results into server response of Radicals, Kanji, then Vocabulary. Currently it just sticks them on the top in reverse order of when we get confirmation from the API that they exist on the site.
    - Visualise locked and burned items like they do elsewhere on the site.
    - Boolean operations
    - Search by radical
    - Cross site links (jisho etc.)
    - Customisable settings and 'settings page'
    */

    /** Todo
    Search page seems to reload now, sending itself GET requests
    Need to patch: persist results? Read URL after reload?
    */


    //******************End of functional variables for v0.0.1 ****************************


    //Variables TODO: implement a settings page
    // Variables that alter the existing results' appearance
    var visualiseLocked = false;

    var getSetApiToken = function(apiV2){
        var storedAPIv2 = localStorage.getItem("apiKey_v2")||localStorage.getItem("apiv2_key");
        if (apiV2){
            if (storedAPIv2 && storedAPIv2 !== apiV2){
                var ovr = confirm("Do you wish to overwrite the stored API V2 key ("+storedAPIv2 + ") with this one ("+apiV2+")?");
                if (ovr){
                    localStorage.setItem("apiKey_v2", apiV2);
                }
            }
            else{
                localStorage.setItem("apiKey_v2", apiV2);
            }
        }
        else if(storedAPIv2){
            localStorage.setItem("apiKey_v2", storedAPIv2);
        }
        return localStorage.getItem("apiKey_v2") || '';
    };
    var apiToken = getSetApiToken(apiV2);
    //Preset search object. Defined at end so code stays on top.
    var searchIndex = {};

    mute || console.log("WK Enhanced Search initialized");

    var queryAPI = function(endpointPath, params, fullUrl){
        if (endpointPath){
            var requestHeaders =
                new Headers({
                    'Wanikani-Revision': '20170710',
                    Authorization: 'Bearer ' + apiToken,
                });
            var apiEndpoint =
                // if fullUrl is set, don't add the domain to the start
                new Request((fullUrl?'':'https://api.wanikani.com/v2/') + endpointPath+(params?"?"+params:""), {
                    method: 'GET',
                    headers: requestHeaders
                });

            return fetch(apiEndpoint)
                .then(response => response.json())
                .then(responseBody => {
                mute || console.log("r", responseBody);
                // Run a recursive request until we reach the last page url
                if (responseBody && responseBody.pages && responseBody.pages.next_url){
                    /* There is pagination, lets add the next pages response data to this one, this recursion should give us an array of all the data
                       NOTE that the url and pages object will still be this response body, but I don't see a reason we'd need to keep subsequent pages urls.
                       */
                    mute || console.log(responseBody.pages.next_url);
                    //Set fullUrl so we don't double up the domain name.
                    return queryAPI(responseBody.pages.next_url,'',true).then(function(respBody){
                        responseBody.data = responseBody.data.concat(respBody.data||[]);
                        return responseBody;
                    });
                }
                else{
                    return responseBody;
                }
            });
        }
    };
    // Broad strokes, for searching things like SKIP codes that can return vocab or kanji or both, if searching for particular subject, need to use id.
    var getSubjectsBySlug= function(subjArr){
        if (subjArr && subjArr.length){ //Avoid unnecessary calls to API
            if (apiToken){
                var apiEndpointPath = 'subjects';
                var slugs = "slugs=" + subjArr.map(v=>v.val||v).join(",");
                return queryAPI(apiEndpointPath, slugs).then(function(r){return r.data;});
            }
            else{
                //Tell user to set API

                //Return Kanji without meanings and stuff so they can still be linked to
                return Promise.resolve(subjArr);
            }
        }
        else{
            return Promise.resolve([]);
        }
    };
    var getSubjectsById= function(idArr){
        mute || console.log("idArr", idArr);
        if (idArr && idArr.length){ //Avoid unnecessary calls to API
            var apiEndpointPath = 'subjects';
            var ids = "ids=" + idArr.map(v=>v.val||v).join(",");
            return queryAPI(apiEndpointPath, ids).then(function(r){return r.data;});
        }
        else{
            return [];
        }
    };

    var convertResponseToObj = function(response){
        if (response.error){
            return Promise.reject(response);
        }
        else{
            var results = (response.data||response).map(function(v){
                var type = v && (v.object === "radical"?"rad":v.object === "kanji"?"kan":v.object === "vocabulary"?"voc":"oth");
                var slug = v && v.data && v.data.slug || v; // If v is just a string, use that, but if it has .data.slug, use slug.
                var id = v && v.id;
                var val = (type === "rad" && v.data && !v.data.characters)?
                    // Need to use radical image. The URL is constructed with the id and slug of the radical
                    '<img class="radical-image" alt="'+ slug +'" src="https://cdn.wanikani.com/subjects/images/'+id+'-'+slug+'-large.png">':
                v && v.data && v.data.characters || v || "";
                var ja = v && v.data && v.data.readings && v.data.readings.filter(function(v){return v.primary;})[0].reading||"";
                var en = v && v.data && v.data.meanings && v.data.meanings.filter(function(v){return v.primary;})[0].meaning||"";
                return {
                    type: type,
                    val: val,
                    ja: ja,
                    en: en,
                    slug: slug,
                    id: String(id)
                };
            });
            return Promise.resolve(results);
        }
    };

    var searchSynonyms = function(searchQuery){
        // Make case insensitive by converting all queries to lowercase
        searchQuery = searchQuery.toLowerCase();
        if (includeUserSynonyms){
            //Get user synonym list
            var synonymIndex = {};
            /* Considered storing results in localstorage with the last_updated variable, augmenting with results by eg ?updated_after=2017-10-11T10:42:00Z
            May not work because removing synonyms does not create a study_material to check, so it would remain in the localstorage.
            We cannot just listen to deletions as they may be deleted in different browsers or on different machines.
            */
            var resp = queryAPI("study_materials")
            .then(function(v){
                v.data && v.data.filter(function(d){
                    return d.data && d.data.meaning_synonyms && d.data.meaning_synonyms.length;
                }).map(function(d){
                    var synArr = d.data.meaning_synonyms;
                    return synArr.map(function(syn){ // for every synonym that is entered, build an object that returns all ids of words that use the same word as user synonym.
                        // use all lowercase so query is not case sensitive
                        syn = syn.toLowerCase();
                        if (synonymIndex[syn]){
                            synonymIndex[syn].push(d.data.subject_id);
                        }
                        else {
                            synonymIndex[syn] = [d.data.subject_id];
                        }
                    });
                    mute || console.log(d, synArr);
                });

                mute || console.log(synonymIndex[searchQuery], synonymIndex);
                return synonymIndex[searchQuery];

                //return v;
            });
            mute || console.log("searchSynonyms resp", resp);
            return resp;
        }
        else{
            return Promise.resolve([]);
        }
    };

    var search = function(searchQuery){
        // Handle the search. Right now just looks up the index in the searchIndex object. Sends an array of Kanji characters to getSubjectsBySlug
        var resultsArray = searchIndex[searchQuery];
        var userSynResults = searchSynonyms(searchQuery);
        //Add userSynResults that aren't already in resultsArray

        // Send the 'slugs' to the list to be published with any search results from the server.
        //var slugResults = getSubjectsBySlug(resultsArray);
        //var idResults = getSubjectsById(userSynResults);
        //var idResults = userSynResults.then(getSubjectsById);
        //mute || console.log("idResults", idResults); mute || console.log("slugResults", slugResults);
        return Promise.all([userSynResults.then(getSubjectsById), getSubjectsBySlug(resultsArray)]).then(v=>{
            var result = v[0].concat(v[1]);
            mute || console.log("results: ", result);
            return result;
        });
    };


    var incrementResultTotalBy = function(searchResultsElem, num){
        // This will need to be pulled out of this function. TODO
        var text = searchResultsElem.childNodes[3].childNodes[1].innerText;
        //get current number
        var total = text.match(/([0-9]+)/)[0];
        //get the text around it
        var pieces = text.split(total);
        //get the new total
        var newTotal = Number(total) + num;
        //if the new total is one, remove the 's'
        if (newTotal === 1) {
            pieces[1] = pieces[1].replace("results","result");
        }
        //if not, make sure RESULTS is plural
        else if (pieces[1].indexOf("results")<0){
            pieces[1] = pieces[1].replace("result","results");
        }
        //insert the new total
        pieces.splice(1,0,newTotal);
        searchResultsElem.childNodes[3].childNodes[1].innerText = pieces.join("");
        //searchResultsElem.firstChild.firstChild.textContent = pieces.join("");
    };

    var extractIdsFromResults = function(ul){
        var ids = Array.from(ul.querySelectorAll(":scope > li")).map(function(v, i, a){
            return Array.from(v.classList).filter(x=>{
               return x.match(/radical/)||x.match(/kanji/)||x.match(/vocabulary/);
            }).map(x=>{
                var p = x.indexOf("-");
                var res = x.substr(p+1, x.length);
                //mute || console.log("x",res);
                return res;
            });
        }).flat();
        return ids;
    };

    var createSearchResultElem =function([response, searchResultsElem]){
        // Get elements already in list so we don't repeat them
        var ul = searchResultsElem.querySelector("ul");
        var resultIds = extractIdsFromResults(ul);
        mute || console.log("resultIds (from server)", resultIds);


        // Allow custom results to be set apart if need be ("oth")
        var otherStyle = "background-color: #a100f1;"+
            "background-image: -moz-linear-gradient(top, #45fb85, #9300dd);"+
            "background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#45fb85), to(#9300dd));"+
            "background-image: -webkit-linear-gradient(top, #45fb85, #9300dd);"+
            "background-image: -o-linear-gradient(top, #45fb85, #9300dd);"+
            "background-image: linear-gradient(to bottom, #45fb85, #0d7);"+
            "background-repeat: repeat-x;"+
            "filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFAA00FF', endColorstr='#FF9300DD', GradientType=0);"+
            "border-top: 1px solid #c655ff;"+
            "border-bottom: 1px solid #8800cc;"+
            "border-left: 1px solid #c655ff;"
        ;

        return convertResponseToObj(response)
        .then(function(searchResults){
         searchResults = searchResults || [];
            var elems = searchResults
            .filter(function(v,i,a){
                return resultIds.indexOf(v.id) === -1;
            })
            .map(function(v,i,a){
                var type = v && v.type || "voc";
                var val = v && v.val || v || "";
                var ja = v && v.ja || "";
                var en = v && v.en || "";

                var slug = v && v.slug;
                var id = v && v.id || "";
                var longType = (type==="rad"?'radical':type==="kan"?'kanji':type==="voc"?'vocabulary':'');
                // radicals use 'radical' for class name but 'radicals' for path name
                var path = (type==="rad"?'radicals':longType);

                // Chrome seems to sort out the href just fine, could use escape codes if it becomes a problem
                return $('<li '+(type==="oth"?'style="'+otherStyle:
                                 visualiseLocked?'style="background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAABlBMVEXp6en///8aIX6LAAAAAnRSTlOAAE0QVXMAAAAzSURBVHgBY5A4ZtiTDCUMGMAUlEhgSEaSPMBwDEmygaEHSVKAWFNGTRk1ZdSUUVNGTQEADgYDv1aNs2sAAAAASUVORK5CYII=\')':
                                 ''
                                )+'class="'+longType+'-'+ id +' character-item">'+
                         '<a href="/'+path+'/'+slug+'">'+ // this needs to be slug, not val
                         '<span class="character" lang="ja">'+val+'</span>'+
                         '<ul>'+
                         '<li>'+ja+'</li>'+
                         '<li>'+en+'</li>'+
                         '</ul>'+
                         '</a></li>')
                // TODO Sort into existing list
                    .prependTo(ul);
            });
            incrementResultTotalBy(searchResultsElem, elems.length);
            return Promise.resolve(elems);
        }).catch(function(e){
            failSilently || console.error(e);
        });
    };

    var elementReady = function (selector) {
        let el = document.querySelector(selector).parentElement;
        return new Promise((resolve, reject) => {
          resolve(el);
/*            new MutationObserver((mutationRecords, observer) => {
                resolve(el);
                //Once we have resolved we don't need the observer anymore.
                observer.disconnect();
            }).observe(el, {
                subtree: false,
                childList: true
            });
            */
        });
    };

    var addCustomResults = function(elems){};

    var initHooks = function(){
/*        $(".search-form")[0].addEventListener('submit', function(){*/
        var urlParams = new URLSearchParams(window.location.search);
            var query = urlParams.get("query"); //$("#query").val();

            mute || console.log("Event Listener. Field Value: "+query);
            Promise.all([search(query),elementReady(".search-results")])
                .then(
                function(searchResults){
                    mute || console.log("Search Results: ", searchResults);
                    return searchResults;
                })
                .then(createSearchResultElem)
        /*});*/
//mute || console.log("getSubj", getSubjectsBySlug(["低い","ground","新聞"]));
        window.queryAPI = queryAPI;
    };

    if (includeSKIP){
        var skipIndex = {"1-1-1":["八","儿"],"1-1-2":["小","川","巛"],"1-1-3":["心","水"],"1-1-4":["旧","必"],"1-1-7":["承"],"1-1-8":["胤"],"1-1-11":["順"],"1-2-2":["仂","刈","仇","什","仁","切","双","比","仏","从","仍","仆","化"],"1-2-3":["癶","加","仕","仔","仙","他","代","氷","付","丱","仗","仞","仭","仟","以"],"1-2-4":["收","仮","伎","休","仰","件","伍","次","州","仲","伝","任","伐","伏","价","伉","伜","决","冱","冲","冰","攷","伊"],"1-2-5":["攸","何","伽","佐","冴","作","伺","似","住","伸","体","但","佃","低","伯","伴","冶","佑","伶","冷","佚","估","佛","佝","佗","佇","况","佞","位"],"1-2-6":["侫","価","佳","侃","供","侠","協","佼","使","侍","侮","併","侭","例","佶","侈","侏","侘","佻","佩","佰","侑","佯","冽","依"],"1-2-7":["俥","係","侯","俊","信","侵","促","俗","便","保","俣","侶","俔","俟","俘","俛","俑","俚","俐","俤","俄"],"1-2-8":["倏","帰","倶","倹","個","候","倖","借","修","准","凄","値","凋","倒","凍","俳","倍","俵","倣","俸","凌","倫","倭","倚","倨","倔","倪","倥","倅","俶","倡","倩","倬","俾","俯","們","倆","凅","凉","俺"],"1-2-9":["脩","偶","倦","健","頃","偲","側","頂","停","偵","偏","偃","假","偕","偐","偈","做","偖","偬","偸","條","偽"],"1-2-10":["馮","僅","博","備","傍","傀","傚","傅","偉"],"1-2-11":["鳰","傑","債","催","傷","僧","働","鳩","傭","傴","傲","僊","傳","僂","絛","傾"],"1-2-12":["儁","像","僕","僚","僖","僞","僥","僭","僣","僮","僑"],"1-2-13":["凜","儀","僻","價","僵","儉","儂","儚","凛","億"],"1-2-14":["凝","儒","儘","儕","儔"],"1-2-15":["償","儲","優","儖","儡"],"1-2-19":["儺","儷"],"1-2-20":["儼","儻"],"1-3-1":["引","幻","孔","乢","扎"],"1-3-2":["収","外","叶","刊","功","巧","弘","叱","汁","打","叩","汀","奴","氾","犯","払","北","幼","刋","夘","叮","叨","叭","叺","卯","圦"],"1-3-3":["阡","吋","羽","汚","汗","吃","吸","叫","好","江","行","汐","壮","托","地","弛","池","竹","兆","吐","汝","如","帆","汎","妃","忙","吁","圷","圸","奸","妁","屹","幵","忖","扞","扣","扛","扠","扨","汕","汢","犲","艸","扱"],"1-3-4":["阯","快","改","岐","汽","妓","技","汲","狂","均","吟","決","坑","抗","攻","沙","坂","阪","孜","抄","状","吹","折","舛","汰","択","沢","沈","投","沌","妊","把","抜","批","扶","吻","扮","坊","妨","防","吠","没","妙","役","妖","抑","沃","吽","听","吭","吼","吮","吶","吩","呎","坎","圻","址","坏","妣","妍","彷","忻","忤","忸","忱","忰","扼","抂","抉","找","抒","抓","抖","抃","抔","汪","沂","沍","沚","沁","汾","汨","汳","沒","沐","泛","犹","狃","狆","狄","阨","阮","沖"],"1-3-5":["抛","姐","泳","沿","往","押","河","怪","拐","拡","泣","拒","拠","怯","況","狗","径","弦","呼","姑","拘","狛","坤","咋","始","姉","治","呪","招","沼","姓","征","性","拙","岨","狙","阻","陀","拓","坦","担","抽","注","帖","坪","抵","泥","妬","波","拝","拍","泊","彼","披","泌","怖","附","沸","抱","法","泡","妹","抹","沫","味","岬","弥","油","怜","呀","咏","呵","呟","呷","呻","咀","呶","咄","咐","咆","坩","坡","坿","垉","妲","姆","岫","岻","岶","岼","岷","峅","岾","帙","徃","徂","彿","怡","怙","怐","怩","怛","怕","怫","怦","怏","怺","拔","拗","拑","抻","拆","拈","拌","拊","拂","拇","拉","抬","氓","沛","泄","泱","泓","沽","泗","泅","泝","沮","沱","沾","沺","泯","泙","泪","狎","狒","阿","陂"],"1-3-6":["陋","姶","按","咽","姻","姥","洩","悔","恢","海","咳","垣","恰","括","活","峡","挟","狭","限","孤","弧","狐","後","垢","恒","洪","拷","恨","咲","拶","指","持","狩","拾","洲","城","浄","拭","浅","洗","待","挑","津","洞","峠","独","派","姪","洋","洛","律","呱","哇","咥","咬","哄","哈","哂","咤","咾","哘","咯","垓","垠","垳","垤","垪","垰","姨","姙","姚","孩","峙","弭","徊","很","徇","恠","恪","恟","恊","恆","恍","恃","恤","恂","恬","恫","挌","拮","拱","挧","挂","拯","拵","洟","衍","洶","洫","洽","洸","洙","洵","洳","洒","洌","狢","狠","狡","陌","陏","娃"],"1-3-7":["陦","挨","院","唄","浦","悦","峨","浬","陥","娯","悟","浩","降","唆","挫","捌","酒","従","峻","徐","除","哨","将","消","娠","振","浸","陣","捜","挿","捉","孫","啄","狸","悌","挺","徒","涛","涜","悩","狽","挽","姫","浜","浮","陛","捕","峰","埋","哩","娘","涌","浴","流","涙","浪","狼","哦","唏","唔","哽","哮","哺","哢","唳","埃","埆","埔","埒","埓","埖","娥","娟","娜","娉","娚","峽","峺","峭","峪","徑","悁","悍","悃","悚","悄","悛","悖","悗","悒","悧","悋","挈","捐","挾","捍","捏","捩","浣","涓","浤","浚","浹","浙","涎","涕","涅","狹","狷","陜","陞","陝","唖"],"1-3-8":["捗","域","淫","陰","液","掩","涯","掛","喝","渇","掬","強","郷","掘","掲","渓","険","控","惚","婚","混","採","済","崎","埼","惨","捨","授","渋","淑","術","淳","渚","唱","娼","捷","渉","情","埴","深","推","据","清","惜","接","措","掃","掻","唾","堆","探","淡","猪","帳","張","陳","掴","添","堵","悼","淘","陶","得","惇","捺","猫","捻","排","培","陪","描","埠","婦","娩","捧","堀","猛","唯","淀","陸","掠","隆","涼","猟","陵","淋","唹","啀","啌","啜","啅","啖","啗","唸","啝","埣","堋","婀","婬","婉","娵","婢","崕","崛","崢","崚","崘","帷","弸","從","徙","徘","徠","惧","悸","悴","悽","惆","悵","惘","掖","掎","掀","掫","捶","掏","掉","掟","掵","捫","淹","渕","渊","涵","淇","淦","涸","淆","淬","淞","淌","淨","淒","淅","淺","淙","淤","淕","淪","淮","渮","猗","猊","猜","猖","猝","衒","陷","陟","陲","惟","陬"],"1-3-9":["隍","渥","渦","堰","援","温","階","街","粥","喚","堪","換","揮","喫","卿","喰","隅","隈","喧","捲","減","湖","御","喉","慌","港","項","堺","滋","湿","循","湘","場","須","随","測","揃","惰","隊","湛","弾","喋","塚","堤","提","渡","塔","搭","湯","媒","溌","弼","媛","復","幅","淵","塀","帽","満","湊","婿","愉","揖","湧","猶","揚","揺","陽","湾","啣","喙","喀","喊","喟","啾","喘","喞","啼","喃","喩","喇","喨","堙","堝","堽","壻","媚","嵎","嵋","幄","幀","徨","惓","愕","惶","愀","惴","惺","愃","愡","惻","惱","愎","掾","揩","揀","揆","揣","揉","插","揶","揄","渭","湮","渙","湲","湟","渾","渣","湫","渫","湶","湍","渟","湃","渺","湎","渤","渝","游","溂","猴","猯","猩","猥","隋","握"],"1-3-10":["隗","猿","塩","嫁","嘩","塊","慨","隔","滑","漢","携","隙","嫌","源","溝","嵯","搾","獅","嫉","慎","摂","損","滞","滝","嘆","溺","填","塘","漠","塙","搬","微","幌","滅","摸","溶","溜","漣","嗚","嗅","嗟","嗄","嗜","嗤","嗔","塢","塒","媼","媾","嫋","嫂","媽","嫐","嵶","幃","幎","彁","徭","慍","愾","愧","慊","愼","愴","愽","慄","搜","搖","搆","搓","搦","搶","搗","搨","搏","溪","溘","滉","溷","滓","溽","溯","滄","溲","滔","溏","溥","滂","溟","猾","獏","衙","隘","隕","溢"],"1-3-11":["銜","嘘","演","慣","潅","漁","境","獄","漉","際","漆","障","摺","漸","噌","漕","増","憎","嫡","徴","漬","摘","滴","嶋","徳","漂","慢","漫","鳴","漏","嘔","嗷","嘖","嗾","嗽","嘛","嗹","塲","嫣","嫗","嫦","嫩","嫖","嶇","嶂","幗","幔","慷","慘","慚","慴","慯","慥","慱","慟","慓","慵","摧","摶","摎","滿","滬","滸","滾","滲","漱","滯","漲","滌","漾","漓","滷","隠"],"1-3-12":["隧","撹","潟","噛","澗","嬉","潔","撮","撒","潤","衝","嘱","澄","撰","潜","潮","潰","徹","撤","憧","撞","撚","播","幡","撫","噴","墳","憤","撲","噎","嘶","嘲","嘸","墹","墟","墫","墸","嫺","嫻","嬌","嬋","嶢","嶝","幟","幢","彈","慳","憬","憔","憚","憫","憮","撕","撓","撥","撩","撈","漑","澆","潺","潸","澁","潯","潭","澂","潼","潘","澎","澑","潦","濆","潴","獗","噂"],"1-3-13":["險","憶","壊","懐","獲","憾","彊","激","衡","壌","嬢","操","濁","壇","澱","噸","濃","噺","擁","隣","憐","嘴","噫","噤","嘯","噬","噪","嚆","墺","墻","嶬","嶮","嶼","徼","懌","懊","懈","懆","憺","懍","擔","撼","據","擒","擅","擇","撻","擂","濂","澳","澣","澡","澤","澹","澪","濛","獪","獨","衞","隨","衛"],"1-3-14":["鵆","徽","擬","鴻","壕","濠","擦","濯","嬬","擢","瀞","濡","嚀","嚊","嚔","嚏","壗","嬪","嬶","孺","彌","懦","擱","擠","擡","擣","擯","濤","澀","潛","濟","濕","濬","濔","濘","濱","濮","獰","濶","隱","隲","隰","嚇"],"1-3-15":["獵","瀦","濫","嚠","壙","懴","擶","擴","擲","擺","擽","攅","瀉","瀋","濺","瀑","瀁","瀏","濾","擾"],"1-3-16":["隴","瀧","嚥","壞","壜","嬾","懷","懶","濳","瀛","瀚","瀝","瀘","瀟","獺","瀬"],"1-3-17":["瀲","嚶","壥","壤","孃","孅","孀","巉","懺","懽","攘","灌","瀰","瀾","瀕"],"1-3-18":["攜","嚼","囁","囃","囀","囈","懼","懾","攝","灘"],"1-3-19":["囎","攤","灑"],"1-3-20":["攪","攫","黴"],"1-3-21":["囑","囓","衢"],"1-3-22":["攬","灣"],"1-4-1":["札","礼"],"1-4-2":["朷","机","朽","刑","此","灯","肌","朴","牝","列","肋","刔","刎","杁","朸","印"],"1-4-3":["邨","肝","玖","祁","形","材","社","杓","灼","杖","杉","村","対","杜","那","肘","邦","卵","壯","妝","杆","杞","杠","杙","杣","杤","肛","肚","牡"],"1-4-4":["肬","旺","欧","殴","玩","祈","祇","杵","欣","股","杭","肱","枝","祉","肢","所","松","炊","枢","析","杷","杯","板","版","肥","非","枇","服","物","放","朋","肪","牧","枚","枕","明","門","林","炉","枠","枉","杼","杪","枌","枋","枦","枡","枅","歿","殀","炒","牀","肭","於"],"1-4-5":["脉","珂","柿","柑","枯","昨","柵","珊","施","祝","昭","神","牲","祖","相","柁","胎","胆","柱","珍","栂","柘","栃","祢","肺","柏","畑","柊","柄","胞","殆","昧","柾","柳","柚","祐","玲","俎","拜","昵","昿","朏","枷","柯","枴","枳","柩","枸","柤","柞","柝","柢","柮","枹","柎","柆","殄","殃","炯","炬","炸","炳","炮","爼","牴","珈","玳","珎","玻","珀","祓","胛","胙","胝","胚","胖","映"],"1-4-6":["胼","格","核","株","栢","桓","桔","胸","桐","珪","桂","桁","校","根","桜","晒","桟","残","脂","時","殊","珠","殉","祥","栖","脆","栓","栴","朕","桃","胴","特","梅","班","桧","脈","旅","脇","旃","旆","旄","晄","柧","框","栩","桍","栲","桎","栫","桙","档","烟","烙","珥","珮","珞","珱","胯","胱","晦"],"1-4-7":["脯","焔","桶","械","梶","椛","規","脚","球","現","梧","梗","梱","視","梢","旋","族","琢","脱","梯","梼","祷","豚","脳","彬","桝","理","琉","將","旌","晞","晤","晧","朖","梳","桷","桿","梏","梭","梔","梛","梃","梹","桴","梠","梍","桾","殍","烱","烽","牾","琅","珸","脛","梓"],"1-4-8":["腑","瑛","棺","棋","暁","極","検","腔","勝","焼","植","殖","椙","晴","棲","棚","脹","椎","棟","牌","斑","晩","斌","棒","椋","棉","雄","琳","煉","禄","椀","腕","晰","暎","椏","椁","椈","椢","椦","棡","椌","棍","棔","棧","棕","椒","椄","棣","椥","棹","棯","椨","椪","椚","椣","椡","棆","殘","殕","焜","焙","牋","琥","琲","琺","腋","腆","脾","腓","椅"],"1-4-9":["頌","煙","暇","禍","頑","瑚","腰","榊","腫","楯","瑞","腺","禅","楕","腿","暖","牒","腸","槌","椿","禎","椴","頓","楢","楠","楳","煤","煩","頒","楓","福","腹","預","楊","楼","榔","旒","暉","暄","暘","椶","楹","楷","楜","楸","楫","楔","楾","楮","椹","楴","椽","楙","椰","楡","楞","楝","榁","楪","煥","煌","煖","煬","瑕","琿","瑙","瑁","瑜","瑶","腱","腮","腥","腦","腴","腟","頏","暗"],"1-4-10":["瑤","概","樺","旗","構","魂","瑳","雌","榛","煽","槍","樋","槙","膜","模","様","熔","瑠","孵","暝","曄","榲","槐","榿","槁","槓","榾","槎","槝","榻","榧","樮","榑","榠","榜","榕","榴","槞","榱","殞","熄","熕","犒","瑯","瑰","瑣","瑪","膃","膈","膊","膀","槇","榎"],"1-4-11":["鴆","鴎","権","樟","槽","樗","槻","鴇","膝","標","璃","槨","樛","槿","槹","槲","樅","樞","槭","樔","槫","樒","樣","樓","樌","樢","殤","滕","瑾","璋","膠","膕","膤","膣","膓","膵","横"],"1-4-12":["臈","機","橘","橋","樹","樵","膳","樽","燈","橡","燃","膨","豫","旙","曉","暾","暸","橄","橲","樶","橸","橇","橢","橙","橦","橈","樸","殪","殫","燗","熾","燒","燉","燔","燎","璢","璞","縢","膩","膰","樫"],"1-4-13":["臉","橿","環","犠","櫛","檎","燦","曙","燭","燥","檀","謄","膿","燐","曖","曚","朦","檜","檐","檍","檄","檢","檣","檬","檪","燠","燬","燧","燵","牆","膾","膸","膽","臆"],"1-4-14":["臑","曜","旛","檮","櫁","櫃","櫂","檸","檳","殯","燻","燼","燿","瓊","臍","禰"],"1-4-15":["臘","曝","爆","鵬","櫓","曠","檻","櫞","櫑","櫟","櫚","殱","爍","牘","犢","臓"],"1-4-16":["臚","櫨","欄","曦","朧","櫪","爐","犧","瓏","臙","騰"],"1-4-17":["櫺","櫻","欅","權","殲","爛","瓔"],"1-4-18":["臟"],"1-4-22":["欖"],"1-4-24":["欟"],"1-5-3":["邵","知","邸","的","和","矼","祀","竏","衫","邯","邱","邪"],"1-5-4":["袂","衿","研","故","胡","砂","砕","秋","政","段","矧","叛","秒","畋","斫","畍","畊","畉","皈","盻","眈","眇","眄","矜","砌","砒","秕","竕","竓","衵","衽","衲","科"],"1-5-5":["鬥","砧","矩","砿","弱","称","租","袖","秩","砥","砺","破","秤","畔","秘","被","砲","眠","畛","皰","眩","眤","眛","砠","祠","祗","祚","祕","秧","秬","秡","秣","站","竚","竝","袗","袒","袮","袙","袢","袍","既"],"1-5-6":["裄","移","眼","畦","袴","眺","務","略","畩","畤","皎","眦","眸","硅","竡","翊","袵","袿","袱","裃","袷"],"1-5-7":["覘","稀","硯","硬","竣","硝","税","疏","疎","短","程","覗","硲","補","裕","裡","硫","畭","畴","皖","皓","睇","硴","稈","稍","竢","竦","裙","甥"],"1-5-8":["雉","雅","碍","褐","碕","睡","裾","稚","碇","畷","睦","稔","靖","裸","稜","碗","畸","睚","睨","睫","睛","睥","矮","碎","硼","碚","碌","祺","祿","稘","稙","稠","號","褂","裼","裨","裲","褄","雎","碓"],"1-5-9":["颯","頚","磁","種","頗","碩","端","暢","碑","稗","複","領","皹","睹","碣","碵","碪","碯","禊","稱","竭","竰","褌","褊","褓","褝","稲"],"1-5-10":["魄","確","稿","穂","皚","瞎","瞋","瞑","磑","磆","磋","碾","碼","磅","禝","稻","稷","穃","褞","褥","褪","褫","稼"],"1-5-11":["鴒","穏","鴨","稽","鴫","積","穆","瞠","瞞","磔","磧","磚","襁","褶","褸","鴉","鴪","鴣","鴟","穐"],"1-5-12":["襍","襖","矯","礁","瞳","瞭","瞰","瞶","磽","磴","禧","禪","穗","穉","襌","磯"],"1-5-13":["襠","襟","瞬","穣","礎","瞹","瞼","瞻","矇","礇","礒","礑","禮","穡","穢","穫"],"1-5-14":["疇","礪","礙","穩","襦","襪"],"1-5-15":["礦","礫","襤","襭"],"1-5-16":["龝","襯"],"1-5-17":["禳","穰","襴","襷"],"1-5-21":["矚"],"1-5-2":["竍","劫","私","初","助","即","町","判","別","利","励","刧","刪","劬","劭","却"],"1-6-1":["乱","糺"],"1-6-2":["籵","卦","効","刻","刷","刺","取","叔","制","到","刮","刳","刹","劼","劾"],"1-6-3":["衂","郁","紀","級","糾","粁","紅","郊","帥","耐","虹","封","籾","耶","約","郎","剏","紆","紂","缸","虻"],"1-6-4":["衄","紘","耕","航","朔","殺","師","紙","紗","純","粋","耽","恥","致","納","能","般","紐","敏","粉","紛","紡","粍","耗","紋","料","朗","效","殷","粃","粐","紜","紕","缺","耘","耙","耿","耻","舐","舩","舫","舮","蚓","蚣","蚪","蚋","蚌","蚊"],"1-6-5":["蚫","経","絃","舷","紺","細","蛇","終","紹","紳","船","粗","組","舵","紬","甜","粘","粕","舶","瓶","粒","匏","絅","絋","紲","紿","紵","絆","羝","羚","耜","聊","聆","舸","舳","蚶","蚯","蛄","蛆","蚰","蛉","蛎"],"1-6-6":["蛯","絵","蛙","給","結","絞","粧","絶","統","蛤","蛭","絡","弑","棘","瓠","粭","粫","粡","粨","絖","絎","絲","絨","絏","絣","翔","聒","蛔","蛞","蛟","蛛","絢"],"1-6-7":["辟","継","絹","辞","続","蛸","艇","蜂","粳","粮","糀","絳","經","綉","綏","絽","綛","綟","耡","聘","艀","蜒","蜆","蜈","蛻","蜉","蜍","蛹","蜊","蛾"],"1-6-8":["蜩","維","綱","雑","綬","緒","精","総","綜","聡","綻","蜘","綴","緋","綿","網","緑","練","蝋","粹","粽","綺","綣","綵","緇","綽","綫","綢","綯","綸","綰","緕","聢","蜴","蜿","蜷","蜻","蜥","綾"],"1-6-9":["頡","蝦","緩","輝","糊","蝉","線","糎","蝶","締","縄","蝿","編","頬","緬","潁","糅","糂","緘","緝","緤","緞","緲","緡","縅","縋","羯","聨","蝠","蝟","蝸","蝌","蝎","蝴","蝗","蝮","蝙","蝓","蝣","蝪","蟒","頤","縁"],"1-6-10":["蟆","縞","縦","糖","縛","縫","糘","糒","糢","緻","縊","縡","縒","縟","縉","耨","臻","艙","艘","螟","螂","緯"],"1-6-11":["鵈","繍","縮","績","繊","糟","聴","螺","聯","總","縱","繆","繦","縵","縹","繃","縷","縲","縺","罅","聰","艝","艚","蟋","蟀","蟐","螳","螻","蠎","鵄","鵁","鴿","鴾","糠"],"1-6-12":["蟠","職","繕","糧","繧","繝","繖","繞","繙","繚","艟","蟯","織"],"1-6-13":["蠖","繰","疆","繹","繪","繩","羶","艤","艢","艨","蠅","蠏","蠍","蟾","蟶","蟷","蟻"],"1-6-14":["蠕","糯","糲","繼","繻","纃","繽","聹","蠣","蠑","耀"],"1-6-15":["艪","纏","繿","纈","纉","續","纐","纎","艦"],"1-6-16":["纒","罎","艫"],"1-6-17":["纓","纔","纖","罐"],"1-6-22":["纜"],"1-7-1":["乳","軋"],"1-7-2":["酊","臥","軌","計","削","叙","則","勅","剃","訂","勃","剄","剌","勁","卻","畆","訃","卸"],"1-7-3":["髟","訓","郡","軒","財","射","酌","訊","畝","託","酎","討","配","豹","訖","訐","訌","豺","躬","郢","郤","郛","記"],"1-7-4":["訥","救","許","教","躯","訣","斬","赦","斜","釈","訟","酔","設","断","転","軟","敗","販","訪","野","訳","欲","敖","敕","敍","敘","斛","欸","欷","訛","殻","豼","戝","貶","跂","趾","趺","軛","酖","酘","麪"],"1-7-5":["釉","距","軽","詐","詞","軸","証","詔","診","酢","訴","詑","註","貯","貼","評","皴","觝","訝","訶","詁","詛","詒","詆","谺","貂","貽","赧","跏","跚","跖","跌","跛","跋","躰","軼","軻","軫","酣","酥","詠"],"1-7-6":["酩","該","較","詰","群","詣","誇","跨","詩","試","酬","詳","触","誠","跡","詮","賎","践","賊","跳","酪","賂","路","話","賄","詫","肄","肆","觚","觧","詼","詭","詬","詢","誅","誂","誄","貉","貅","貊","賍","跪","跟","跣","躱","軾","輊","輅","輌","解"],"1-7-7":["酲","疑","語","誤","酵","酷","酸","誌","説","読","賑","認","輔","貌","誘","踊","兢","毓","覡","誨","誡","誑","誥","誦","誚","誣","貍","跼","踈","踉","跿","輕","輒","輓","辣","酳","赫"],"1-7-8":["醂","課","諌","誼","賜","醇","諸","諏","請","諾","誰","誕","談","調","賭","踏","賠","誹","賦","諒","輪","論","諄","諍","諂","諚","豌","貎","賤","踝","踞","踐","踟","踪","輙","輜","輟","輛","醋","醉","謁"],"1-7-9":["頽","穎","頴","諺","醐","諮","輯","醒","醍","諜","諦","蹄","頭","謎","醗","謀","諭","輸","謡","頼","辨","辧","諫","諳","諧","諤","謔","諠","諢","諷","諞","諛","諡","豬","赭","蹂","踵","踰","踴","躾","輳","輻","輹","頸","頷","謂"],"1-7-10":["醢","謹","謙","講","購","謝","醜","嬲","諱","謌","謚","謖","謐","謗","謠","謨","譁","貔","貘","賺","賻","蹊","蹉","蹌","蹐","蹈","轅","輾","轄"],"1-7-11":["鵙","鵠","蹟","贈","謬","臨","觴","謳","謫","謾","蹤","蹠","蹣","蹕","轌","轉","轆","醪","鵝","鵤","鵑","鵐","鵜"],"1-7-12":["醯","蹴","轍","譜","譌","譏","譎","證","譛","譚","蹶","蹲","蹼","躇","軅","轎","識"],"1-7-13":["釋","護","譲","醸","瓣","辮","觸","譫","譟","譯","贍","躁","躅","軆","轗","醵","醴","議"],"1-7-14":["醺","譖","譴","贐","躋","躊","轜","辯","躍"],"1-7-15":["轢","讀","贓","贖","躓","躑","躔","讃"],"1-7-16":["讌","躙","轣","轤"],"1-7-17":["讒","讓","讖","讙","軈","釀"],"1-7-18":["躡"],"1-7-19":["讚","躪"],"1-8-2":["釛","剣","剛","剤","針","釘","剥","剖","剞","剔","勍","釖","釟","飢"],"1-8-3":["釶","郭","乾","釧","彩","執","彫","釣","都","部","釦","郵","剱","孰","釼","釵","尉"],"1-8-4":["鈩","鈎","敢","款","期","欺","欽","敬","戟","散","斯","就","朝","敦","鈍","飯","報","舒","敞","敝","欹","殼","鈞","釿","鈔","鈬","鈕","鈑","飲"],"1-8-5":["鉚","鉛","幹","鈷","鉱","嗣","飼","鉦","飾","鉄","鉢","飽","鈴","鉞","鉗","鉅","鉉","鉤","鉈","鈿","鉋","鉐","飴"],"1-8-6":["鋩","餌","銀","銃","蝕","静","銭","銑","銚","銅","鉾","銘","餅","夥","銕","銖","銓","銛","斡"],"1-8-7":["錵","餓","鋤","鋳","鋲","舗","鋪","鋒","緜","舖","鋏","銹","銷","錺","鋭"],"1-8-8":["靜","館","舘","鋸","錦","鋼","錯","錆","錫","錠","錐","錘","錨","隷","錬","録","錏","鋺","鍄","錮","錙","錢","錚","錣","錻","雕","翰"],"1-8-9":["顆","鍵","鍾","鍛","鎚","鍔","鍍","鍋","頻","鍜","鍠","鍼","鍮","鍖","鍬"],"1-8-10":["魏","鎌","韓","鎖","鎗","鎮","鎰","鎬","鎭","鎔","鎹","鎧"],"1-8-11":["鵺","鶏","鏑","鵡","鏥","鏘","鏃","鏝","鏐","鏈","鏤","鵲","鶉","鶇","鵯","鏡"],"1-8-12":["鐡","鐙","鏗","鐚","鐔","鐓","鐃","鐇","鐐","鐫","鐘"],"1-8-13":["鐸","鑓","鐶","鐵","鐺"],"1-8-14":["糴","鑁","鑄"],"1-8-15":["鑠","讎","鑛","鑑","鑢","鑞","鑚"],"1-8-16":["鑪"],"1-8-17":["鑰","鑵"],"1-8-18":["鑷"],"1-8-19":["鑽","鑼"],"1-8-20":["钁"],"1-9-2":["勘","剰","動","副","剳","勒"],"1-9-3":["靭","彭","鄂","靫","靱"],"1-9-4":["飫","献","鼓","新","数","戦","殿","猷","飭","毀","尠","戡","斟","飮","歇","歃","靹","韵","飩","靴"],"1-9-5":["皷","甄","甃","皸","靤","鞅","靼","鞁","靺","鞆","韶","鞄"],"1-9-6":["鞍","翩","鞋","鞐","餃","餉"],"1-9-7":["餝","親","龍","縣","覩","覦","靦","餒","餔","餘","鞘"],"1-9-8":["馘","雖","隸","鞜","餡","餞","餤","餠","鞠"],"1-9-9":["馥","顎","顔","顕","鞭","類","鞫","鞨","鞦","鞣","鞳","顏","顋","餬","額"],"1-9-10":["韻","鞴","餽","餾","饂"],"1-9-11":["饉","饅","鶫","鶚","鶤"],"1-9-12":["饐","饋","饑","饒","饌"],"1-9-13":["韃"],"1-9-14":["韈"],"1-9-15":["韆"],"1-10-2":["創","割","勤","凱","剴","剩","馭"],"1-10-3":["馳","馴","鄒","骭"],"1-10-4":["骰","歌","駆","穀","駄","歎","駁","歉","馼","駅"],"1-10-5":["駘","駒","駐","皺","駟","駛","駝","駈"],"1-10-6":["骼","融","駭","駮","駱","駲","駢","骸"],"1-10-7":["騁","覬","覯","豁","谿","駻","駸","駿"],"1-10-8":["髀","験","雛","騒","難","歸","雜","騏","騅","騎"],"1-10-9":["願","髄","騨","顛","騙"],"1-10-10":["競","韜","騷"],"1-10-11":["鷂","驅","驂","驃","騾","髏","鶲","鷄","鷁","鶻","鶸","鶺","鷆","鷏","鶴"],"1-10-12":["聽","驕","驍"],"1-10-13":["驛","驗","髑","髓","體","髞"],"1-10-14":["驟"],"1-10-16":["驢","驥"],"1-10-17":["驤","驩"],"1-10-19":["驪"],"1-11-2":["勧","剿","剽","勣","勦","勠"],"1-11-3":["彰","對","鄙"],"1-11-4":["鴃","翫","毅","戯","敵","敷","戮","數","歐","毆","魴","歓"],"1-11-5":["鴕","甑","鮒","甌","甎","鮓","鮃","鮑","鮖","鮗","鮎"],"1-11-6":["鮴","鮫","鮮","瓢","鮪","艱","鮟","鮠","鮨","鮭"],"1-11-7":["鯒","鯉","覲","鯀","鮹","鯆","鯏","鯑","観"],"1-11-8":["麒","鯨","鹸","鯖","鯛","離","鯣","鯢","鯤","鯔","鯡","鯲","鯱","鯰","鯵"],"1-11-9":["鹹","鰐","飄","鰕","鰔","鰉","鰓","鰌","鰆","鰈","鰒","鰊","鰄","鰛","鰍"],"1-11-10":["鰥","鰭","鰮","鰯","鰤","鰡","鰰"],"1-11-11":["鷓","鱈","竸","鰺","鱇","鱆","鰾","鰻"],"1-11-12":["鰹","鱒","鱚"],"1-11-13":["鱗","麟","鱠","鱧"],"1-11-14":["糶"],"1-11-15":["鱶"],"1-11-16":["鱸"],"1-12-1":["亂"],"1-12-2":["劃"],"1-12-3":["影","鄭","鄲"],"1-12-4":["獣","戰","歙","歔","默","黔"],"1-12-5":["齢","黏","黜","點","黝","黻"],"1-12-6":["翻","黠"],"1-12-7":["辭","黼"],"1-12-8":["黥"],"1-12-9":["顧","飜","飆","黯"],"1-12-10":["懿"],"1-12-11":["鷸","鷦","鷭","鷯","黐"],"1-12-12":["靆"],"1-12-13":["靉"],"1-12-15":["黷"],"1-13-2":["劇","劉","劍"],"1-13-3":["劔","劒","鄰"],"1-13-4":["戲","斂","歛","歟","氈","轂"],"1-13-6":["艶"],"1-13-9":["顫"],"1-14-2":["叡","劑","勳","勵"],"1-14-3":["虧","鼾"],"1-14-4":["戳","斷"],"1-14-9":["顯"],"1-15-2":["齔"],"1-15-4":["獸"],"1-15-5":["齣","齟","齠","齡"],"1-15-6":["齦"],"1-15-7":["覿","齬","齪"],"1-15-9":["齷","齲","齶"],"1-16-4":["獻"],"1-16-9":["顱"],"1-17-2":["勸"],"1-17-4":["歡"],"1-17-7":["觀"],"1-17-9":["顴"],"1-17-11":["鸚","鸛"],"1-18-6":["艷"],"1-18-9":["顳"],"2-1-1":["二","冫"],"2-1-2":["三","彡","彳"],"2-1-3":["云","元","戸","乏"],"2-1-4":["永","示","主"],"2-1-5":["亘"],"2-1-6":["系","言","豆","戻"],"2-1-7":["肩","房"],"2-1-9":["扇","晉","鬲"],"2-1-10":["扈"],"2-1-11":["雇","扉"],"2-2-1":["乞","个"],"2-2-2":["爻","介","欠","午","公","今","支","冗","父","分","文","方","予","六","亢","兮","卆","卞","攴","攵","殳","气","允"],"2-2-3":["尓","古","市","写","召","占","台","乍","弁","矛","矢","立","令","卉","孕","玄"],"2-2-4":["朶","亥","会","缶","企","交","合","旨","而","充","色","全","争","年","百","毎","亦","牟","妄","衣"],"2-2-5":["肓","含","希","亨","克","辛","谷","弟","忘","余","兌","吝","斈","岔","弃","甬","矣","罕","角"],"2-2-6":["虱","享","京","尭","金","肴","参","舎","斉","卒","卓","念","命","免","盲","夜","侖","兔","忿","舍","育"],"2-2-7":["瓮","音","冠","急","軍","柔","食","怠","亭","貞","帝","点","南","負","頁","変","盆","面","勇","亮","亰","兪","奕","奐","弯","哀"],"2-2-8":["釡","夏","釜","脅","桑","高","真","衰","倉","畜","衷","冥","竜","恋","亳","冤","冦","冢","拿","旁","畚","眞","紊","衾","翁"],"2-2-9":["鹵","魚","牽","斎","商","章","曽","貧","冨","烹","率","冕","參","毫","盒","袞","袤","貪","竟","馗","亀"],"2-2-10":["辜","象","曾","童","蛮","無","啻","奠","戞","翕","賁","傘"],"2-2-11":["雍","棄","禽","愈","裏","亶","會","僉","稟","禀","裔","意"],"2-2-12":["膏","豪","冩","夐","裹","齊"],"2-2-13":["舞","褒","憂","魯","冪","稾"],"2-2-14":["壅"],"2-2-15":["齋","襃","襄","褻","龠"],"2-2-16":["甕","龜"],"2-2-17":["麗","羸","韲"],"2-2-18":["贏"],"2-2-19":["齎"],"2-2-20":["龕"],"2-2-21":["齏"],"2-2-22":["矗"],"2-3-1":["太","弖"],"2-3-2":["艾","兄","穴","号","只","冬","夲","它","屶","去"],"2-3-3":["芒","芋","宇","各","吉","圭","糸","至","字","寺","芝","守","舌","尖","多","宅","吊","当","名","羊","夛","夸","并","芍","安"],"2-3-4":["赱","壱","花","芥","苅","完","忌","灸","究","芹","芸","宏","災","志","宍","肖","条","芯","声","赤","宋","走","足","呈","忍","芭","売","芙","呆","芳","邑","呂","牢","岌","岑","妛","汞","芫","芟","芬","芦"],"2-3-5":["鼡","英","奄","苑","苛","茄","芽","茅","官","岸","岩","奇","宜","苦","空","茎","幸","実","若","宗","尚","苔","宙","苧","定","宕","突","苫","奈","苗","並","宝","奔","茂","孟","苓","帚","畄","盂","穹","羌","苡","苣","苟","苒","苴","苳","苺","范","苻","苹","苞","茆","苜","茉","苙","宛"],"2-3-6":["莽","茨","荏","姦","客","粂","荊","荒","室","首","酋","窃","宣","前","草","荘","茸","単","炭","茶","美","品","宥","奎","姜","峇","彖","穽","茵","茴","茖","茲","茱","荀","茹","荐","荅","茯","茫","茗","茘","茜"],"2-3-7":["韋","員","益","宴","荻","家","荷","華","害","莞","宮","兼","貢","宰","窄","宵","穿","套","莫","峯","容","莱","宦","宸","峩","崋","恚","恙","盍","窈","羔","莓","莅","莚","莪","莟","莢","莖","茣","莎","莇","莊","荼","莵","荳","荵","莠","莉","莨","袁","豈","案"],"2-3-8":["菻","菓","崖","葛","寄","菊","菌","菜","寂","宿","菖","崇","菅","巣","窓","窒","著","壷","菟","萄","寅","菱","菩","崩","萌","密","剪","寃","寇","寉","崗","崟","崑","崔","崙","盖","窕","羞","菴","萓","菫","菎","菽","萃","菘","萋","菁","菷","萇","菠","菲","萍","萢","萠","萎"],"2-3-9":["堯","萱","寒","喜","寓","菰","惹","尋","善","葬","尊","董","韮","葱","萩","富","普","葡","葺","募","葉","落","嵐","葎","壺","壹","奢","孳","寔","寐","嵜","嵌","嵒","窗","窘","窖","萸","葭","萪","萼","蒄","葷","葫","葮","蒂","葩","葆","萬","葯","葹","萵","葢","颪","葵"],"2-3-10":["麁","蓋","蒲","寛","義","窟","塞","慈","蒔","蒐","蒋","蒸","寝","嵩","煎","羨","蒼","蓄","蒜","墓","蓬","幕","蓑","夢","蒙","蓉","蓮","壼","寞","嵬","嵳","彙","蒭","蓊","蒹","蒿","蒟","蓙","蓍","蒻","蓚","蓐","蓁","蓆","蓖","蒡","葦"],"2-3-11":["蓼","蔚","嘉","寡","窪","察","蔀","奪","蔦","寧","蔑","慕","暮","蔓","蜜","壽","奩","寤","實","寢","寥","嶌","嶄","嶐","搴","寨","窩","臺","蔆","蔡","蓿","蓴","蔗","蔘","蔟","蔕","蔔","蔭"],"2-3-12":["賣","蕎","蕊","蕉","審","蔵","蕩","蕃","賓","蕪","蔽","窯","養","寮","蕨","寫","甍","窰","羮","翦","蔬","蕀","蕘","蕈","蕁","蕋","蕕","蝨","窮"],"2-3-13":["蟇","薗","薫","憲","薯","薪","薦","薙","薄","蕗","奮","薬","薮","寰","彜","憙","熹","窶","窿","羲","蕚","蕣","薀","薤","薈","薑","薊","薨","蕭","薔","薛","薇","薜","蕷","蕾","薐","窺"],"2-3-14":["蹇","薩","嶺","藁","嶽","嶷","舊","藉","薺","薹","藐","螽","謇","賽","竃"],"2-3-15":["藜","藤","藩","繭","藍","彝","竅","竄","藪","藏","藕","藝","藥","藷"],"2-3-16":["蘢","藻","寵","蘭","寳","羹","蘂","藹","蘊","蘓","蘋","藾","藺","蘆","蘇"],"2-3-17":["驀","寶","蘗","蘖","蘯","竇","譱","蘚","蘰","騫","巌"],"2-3-18":["巍","竈","蠡"],"2-3-19":["巓","竊","蘿","蠧"],"2-3-20":["巖"],"2-4-1":["旦","丕"],"2-4-2":["兇","共","光","先","早","劣"],"2-4-3":["豸","吾","告","妥","呑","麦","否","杢","李","弄","孚","孛","帋","旱","杏"],"2-4-4":["冐","炎","沓","昂","肯","忽","昏","昆","采","受","昇","昌","青","昔","忠","毒","表","斧","歩","忝","戔","杲","昊","昃","旻","杳","杰","枩","毟","炙","爭","易"],"2-4-5":["爰","皆","革","巷","査","省","是","星","盃","冒","歪","昴","昜","曷","盈"],"2-4-6":["蚩","恭","晃","索","蚕","素","蚤","奚","晏","晁","晟","挙"],"2-4-7":["覓","貨","貫","雀","責","勗","曼","晨","黄"],"2-4-8":["犇","景","最","歯","暑","晶","森","量","暃","毳","爲","喬"],"2-4-9":["爺","歳","舜","愛","誉","暈","盞"],"2-4-10":["睿"],"2-4-11":["暴","靠","齒"],"2-4-12":["燕","曇","暼"],"2-4-13":["爵"],"2-4-17":["曩"],"2-4-21":["纛"],"2-5-1":["丞"],"2-5-2":["皃","見","呉","児","秀","男","努","禿","兵","労","甼","皀","貝"],"2-5-3":["弩","学","岳","季","具","妻","妾","岱","長","奉","咎","垈","孥","帑","帛","委"],"2-5-4":["胄","胃","栄","怨","架","界","皇","香","思","春","泉","染","奏","怒","背","発","毘","某","冑","竒","怎","怱","拏","癸","罘","胥","畏"],"2-5-5":["芻","帯","泰","党","畠","留","冓","哥","烝","皋","祟","罟","罠","秦"],"2-5-6":["袰","袈","蛍","皐","常","袋","蛋","堂","畢","累","焉","畧","紮","舂","異"],"2-5-7":["黹","賀","覚","貴","黍","掌","畳","貸","登","買","費","貿","貰","塁","棠","發","詈","営"],"2-5-8":["蜀","罫","罪","署","置","惷","甞","當","罨","罩","罧","業"],"2-5-9":["嘗","裳","罰","盡"],"2-5-10":["罷","賞","罵","駕","磊","罸","駑"],"2-5-11":["冀","鴬","黛","鴛","罹","疂","鴦"],"2-5-13":["叢","壘","羂","羃"],"2-5-14":["羅","羆"],"2-5-15":["黨"],"2-5-16":["罍","贔"],"2-5-17":["疊","疉","羇"],"2-5-19":["羈"],"2-6-2":["咒","些","竺","其","典","阜","兒","凭","劵","卷","券"],"2-6-3":["舁","竿","笈","型","契","県","姿","臭","甚","専","卑","要","呰","咢","咨","笂","巻"],"2-6-4":["耄","鬼","恐","栗","恵","拳","骨","柴","書","恕","笑","晋","脊","息","烈","哭","恁","恷","恣","栞","烋","笏","笊","笆","笄","笋","翆","耆","恩"],"2-6-5":["笶","基","砦","祭","笹","習","笥","盛","第","笛","盗","票","符","翌","帶","晝","瓷","眥","眷","笳","笘","笙","笞","笵","笨","笠"],"2-6-6":["覃","筋","策","紫","衆","装","巽","筑","等","答","筒","筈","筏","筆","裂","單","朞","棊","棗","畫","筐","筍","筌","筅","筝","粢","絮","耋","蛩","蛬","粟"],"2-6-7":["跫","資","節","鼠","賃","農","豊","筺","筵","筥","筴","筧","筰","筱","筬","筮","舅","觜","豢","貲","賈","碁"],"2-6-8":["箙","管","算","翠","箔","鼻","箆","箕","睾","箝","箘","箟","箍","箜","箚","箋","箒","箏","箇"],"2-6-9":["鞏","箭","箪","箱","箸","範","篇","噐","篋","篁","篌","篏","箴","篆","器"],"2-6-10":["篥","篤","篭","篝","篩","簑","篦","築"],"2-6-11":["篶","糞","翼","簒","簔","簀","簇","簓","篳","篷","簗","簍","篠"],"2-6-12":["簧","覆","簣","簡","簟","聶","蟲"],"2-6-13":["覈","簸","簿","簾","簷","簫","簽","籀","覇"],"2-6-14":["纂","籍","嚴","簪","籌","籏"],"2-6-15":["囂","籃","籔","籐","籖","齧"],"2-6-16":["籠","籘","籟"],"2-6-17":["籤","籥","蠱"],"2-6-19":["籬","覊"],"2-7-1":["亟"],"2-7-2":["鳬"],"2-7-3":["辱","唇","哲","奘","娑","弉"],"2-7-4":["軣","患","黒","悉","曹","望","悠","梨","梁","戛","晢","桀","梟","犁","脣","悪"],"2-7-5":["番","盜"],"2-7-6":["裝","嗇","粲","粱","羣","蜃","蜑","裘","裟"],"2-7-7":["誓","墨"],"2-7-9":["餐"],"2-7-11":["嚢","鯊","鵞"],"2-7-14":["轟"],"2-7-17":["蠹"],"2-8-2":["隻","隼","叟","鬯"],"2-8-3":["麥","雫","雪","埜","婆","婁","售","堊","梦","娶","婪","專","彗","梵","梺","啓"],"2-8-4":["雋","渠","琴","煮","集","焦","然","惣","替","智","琶","悲","斐","琵","焚","雰","惑","勞","悳","惡","惠","掣","犂","雲"],"2-8-5":["雹","楚","電","督","盟","雷","零","塋","煢","瑟","皙","碆","禁"],"2-8-6":["裴","製","肇","榮","犖","綮","翡","聚","聟","蜚","需"],"2-8-7":["黎","賛","質","震","輩","霊","瑩","賚","輦","霄","霆","慧"],"2-8-8":["霙","霍","霈","霓","霎","霑","霏","霖","螢"],"2-8-9":["霞","霜","營"],"2-8-10":["霤"],"2-8-11":["霧","麓","霪"],"2-8-12":["霰"],"2-8-13":["露","霸","霹"],"2-8-14":["霽","霾"],"2-8-16":["靄","靈","靂"],"2-9-2":["兜"],"2-9-3":["奥","堅","喪","堕","堡","幇"],"2-9-4":["煦","感","愚","愁","照","腎","聖","想","愆","愍","煕","楽"],"2-9-5":["竪","碧"],"2-9-6":["緊"],"2-9-7":["賢","豎"],"2-9-9":["釐","餮"],"2-9-11":["鶩"],"2-9-12":["蠢"],"2-10-2":["凖","粤"],"2-10-3":["奨","塑","塗","塰","奧","髢"],"2-10-4":["髦","態","髪","慇","愨","愿","愬","慂","慝","敲","槊","槃","熏","膂","髣","熊"],"2-10-5":["髱","盤","磐","髯","髫","髮","髴","監"],"2-10-6":["繁","髭","髷","髻"],"2-10-7":["醤","覧"],"2-10-8":["瞿","鬆"],"2-10-10":["矍"],"2-10-11":["鬘","鶯"],"2-10-12":["鬚"],"2-10-13":["鬟"],"2-10-14":["鬢"],"2-10-15":["鬣"],"2-10-16":["蠶"],"2-10-20":["驫"],"2-11-2":["準","勢","與","鳧"],"2-11-3":["塾","塹","墅","奬"],"2-11-4":["熙","勲","撃","暫","熟","熱","黙","慾","慙","慫","憇","摯","樂","槧","漿","熈","熨","熬","獎","慰"],"2-11-5":["整","舉","曁","盥","磬"],"2-11-6":["麋","擧","翳","聳","聲","螯","螫","蟄","繋"],"2-11-7":["贅","豐","贄","謦","蹙","醫","麌"],"2-11-8":["鏖","鏨","麕","麑"],"2-11-9":["馨","響","譽"],"2-11-10":["麝"],"2-11-11":["鰲","鷙"],"2-11-13":["鼇"],"2-12-3":["弊","導","幣","墜","墮","幤","樊"],"2-12-4":["憩","憖","憊","憑","檠"],"2-12-5":["禦","瞥","盪"],"2-12-6":["斃","翹"],"2-12-7":["警","攀","贊","贇"],"2-12-8":["礬"],"2-12-10":["驚","鬻"],"2-12-11":["鷲"],"2-12-13":["釁","鼈"],"2-12-14":["欝"],"2-13-2":["劈"],"2-13-3":["墾","壁","嬖","學"],"2-13-4":["擘","懃","懋","懇","檗","臀","臂"],"2-13-5":["璧","甓","瞽","鼕"],"2-13-6":["蟹","嚮","襞"],"2-13-7":["覺","譬","躄"],"2-13-9":["饗","饕"],"2-13-11":["鷺","鷽"],"2-13-12":["黌"],"2-14-2":["興"],"2-14-3":["嬰","壑"],"2-14-4":["懲","懣","燹"],"2-14-5":["璽"],"2-14-6":["罌"],"2-14-9":["靨"],"2-14-12":["黶"],"2-14-15":["鬱","爨"],"2-15-2":["輿","燮"],"2-15-7":["覽"],"2-15-8":["鑒"],"2-16-2":["雙"],"2-16-3":["壟"],"2-16-4":["懸"],"2-16-6":["襲","聾"],"2-16-7":["讐"],"2-16-8":["顰"],"2-19-3":["轡","巒","彎"],"2-19-4":["戀","攣","變","欒"],"2-19-6":["臠","蠻"],"2-19-8":["鑾"],"2-19-11":["鸞"],"2-20-5":["鹽"],"2-20-8":["鑿"],"3-1-1":["刀","乃","匕"],"3-1-2":["刃"],"3-1-4":["司"],"3-1-7":["直"],"3-2-1":["山","勺","寸","凡","万","尢"],"3-2-2":["仄","凶","斤","区","月","勾","止","氏","斗","匂","反","匹","勿","厄","友","円"],"3-2-3":["卮","右","可","句","左","斥","石","匝","凧","布","包","用","囘","匆","圧"],"3-2-4":["网","灰","匡","后","在","夙","旬","匠","存","同","凪","有","凩","匈","旭"],"3-2-5":["甸","辰","冏","医","匣","巵","乕"],"3-2-6":["岡","画","周","函","罔"],"3-2-7":["扁","盾","風","幽","厘","凾","匍","厖","厚"],"3-2-8":["原","匿","匪"],"3-2-9":["凰","匐","區","厠","貭"],"3-2-10":["厩","雁","厨","厦","厥"],"3-2-11":["匯","鳫"],"3-2-12":["歴","鳳","暦","厭","匱","厮","厰"],"3-2-13":["匳","鴈"],"3-2-15":["壓"],"3-2-17":["贋"],"3-2-22":["魘"],"3-3-1":["爪","日","尤","弌","曰"],"3-3-2":["弍","巨","広","込","四","囚","処","尻","庁","辻","田","尼","皮","辺","民","目","瓜"],"3-3-3":["迄","迂","回","向","式","巡","庄","尽","迅","辿","団","因"],"3-3-4":["屁","応","局","近","迎","困","序","床","臣","図","廷","尿","庇","尾","返","囮","囲"],"3-3-5":["迪","迦","居","屈","固","庚","国","述","底","迭","店","届","迩","迫","府","庖","囹","屆","廸","延"],"3-3-6":["庠","廻","逆","建","屍","送","退","昼","追","度","逃","廼","迷","圀","囿","屎","屏","屋"],"3-3-7":["屐","屑","庫","座","逗","逝","席","造","速","逐","通","庭","逓","展","途","唐","透","這","圃","連","圄","屓","逢"],"3-3-8":["貮","逸","康","鹿","週","庶","進","逮","屠","麻","庸","圉","圈","國","庵"],"3-3-9":["貳","過","遇","圏","犀","屡","遂","属","達","遅","道","遁","廃","逼","遍","遊","遥","廊","孱","廁","廂","運"],"3-3-10":["廐","園","遠","遣","遡","遜","廉","圍","圓","廈","違"],"3-3-11":["廖","遮","塵","層","遭","適","鳶","腐","團","圖","麼","廏","廓"],"3-3-12":["麾","慶","遵","廠","選","遷","廟","摩","履","遼","廣","廝","廚","廛","廢","廡","遺"],"3-3-13":["圜","避","磨","還","廨","廩","麈"],"3-3-14":["應","糜","縻","膺"],"3-3-15":["麿"],"3-3-16":["廬","靡"],"3-3-17":["廰"],"3-3-18":["魔","屬","廱"],"3-3-21":["鷹"],"3-3-22":["廳"],"3-4-1":["辷"],"3-4-2":["虍","気","考","戎","弐","肉","老","危"],"3-4-3":["戒","君","孝","尨"],"3-4-4":["武","虎","者","或","氛","爬","迚"],"3-4-5":["咫","虐","眉","看","迥","迢","迯"],"3-4-6":["迸","氣","翅","虔","迴","逅","迹","迺","氤"],"3-4-7":["逎","處","毬","逑","逕","逡","逍","逞","逖","逋","逧","虚"],"3-4-8":["毯","逶","逵","逹","遏"],"3-4-9":["遖","虜","遐","遑","遒","遉","逾","虞"],"3-4-10":["遘","遞","遙"],"3-4-11":["膚","慮","遨","遯"],"3-4-12":["暹","盧","遶","遲"],"3-4-13":["邂","遽","邁","邀"],"3-4-14":["邃","邇","邉"],"3-4-15":["邊"],"3-4-19":["邏"],"3-5-2":["瓧","疔"],"3-5-3":["瓩","疚","疝"],"3-5-4":["瓰","昶","瓲","疫","瓱","疥","疣"],"3-5-5":["疱","症","疹","疲","病","痂","疳","痃","疽","疸","疼","疾"],"3-5-6":["疵","痔","瓸","痕","痍","痊","痒"],"3-5-7":["痢","痛","痘","痩","痙","痣","痞"],"3-5-8":["痳","痾","痿","痼","瘁","痰","痺","痲","痴"],"3-5-9":["甅","瘋","瘍","瘉","瘧"],"3-5-10":["瘟","瘠","瘡","瘢","瘤"],"3-5-11":["瘴","瘰","瘻"],"3-5-12":["癘","厳","戴","療","癇","癈","癆","癌"],"3-5-13":["癖","癒","癜"],"3-5-14":["癡"],"3-5-15":["癢"],"3-5-16":["癨","癩","癪","癧"],"3-5-17":["癬"],"3-5-18":["癰"],"3-5-19":["癲"],"3-6-3":["哉","彦","咼"],"3-6-4":["烏","栽","馬"],"3-6-5":["産"],"3-6-6":["裁"],"3-6-7":["載"],"3-6-8":["截"],"3-7-2":["赴","剋"],"3-7-3":["起","差","島","尅","赳"],"3-7-4":["鳥","麸"],"3-7-5":["越","着","超","甦","趁","麭"],"3-7-7":["趙"],"3-7-8":["麹","趣"],"3-7-9":["麺"],"3-7-10":["趨"],"3-8-1":["閂"],"3-8-2":["閃","勉"],"3-8-3":["彪","閉","問","閇","閊"],"3-8-4":["閑","開","間","閏","悶","閔","閖"],"3-8-5":["閘","閙","閠"],"3-8-6":["閥","関","閤","閣","聞","閨","閧"],"3-8-7":["閲","魅","閭"],"3-8-8":["閼","閻","閹","閾"],"3-8-9":["闇","闊","闃","闍","闌"],"3-8-10":["闘","闕","闔","闖"],"3-8-11":["關"],"3-8-12":["闡"],"3-8-13":["闥","闢"],"3-9-2":["匙"],"3-9-5":["颱"],"3-9-8":["颶"],"3-9-9":["題"],"3-9-11":["飃"],"3-10-4":["魁"],"3-10-5":["鬧","魃"],"3-10-6":["鬨"],"3-10-8":["鬩","魍","魎"],"3-10-10":["鬪"],"3-10-11":["魑"],"3-10-16":["鬮"],"3-11-4":["麩"],"3-13-5":["鼬"],"4-1-1":["乙"],"4-1-4":["一","丶","丿","亅"],"4-2-1":["厂","又","了","冂","冖","几","匚","匸","卩","丁"],"4-2-2":["七","亠","凵"],"4-2-3":["十"],"4-2-4":["厶","人","入","卜","力","乂","勹","九"],"4-3-1":["廴","干","久","及","弓","己","口","工","叉","子","巳","夕","于","兀","刄","囗","夂","夊","孑","尸","已","下"],"4-3-2":["士","上","土","亡","也","彑"],"4-3-3":["巾","才","千","屮","廾"],"4-3-4":["弋","女","丈","大","之","与","宀","幺","广","丸"],"4-4-1":["毋","王","丑","五","互","尺","丹","弔","天","巴","不","丐","尹","无","歹","牙"],"4-4-2":["壬","廿"],"4-4-3":["木","牛","手","升","中","屯","毛","井"],"4-4-4":["爿","犬","少","内","夫","片","匁","卅","夬","夭","戈","火"],"4-5-1":["旡","且","瓦","玉","甲","冊","皿","正","凸","疋","丙","平","母","册","凹"],"4-5-2":["丗","丘","出","世","生","白","由","甘"],"4-5-3":["朮","乎","申","半","本","末","未","禾"],"4-5-4":["戉","史","失","弗","戊","丼","冉","央"],"4-6-1":["襾","再","死","耳","西","両","亙","卍","艮"],"4-6-2":["臼","曲","血","自"],"4-6-3":["朱","虫","米","朿","耒","聿"],"4-6-4":["成","曳","舟","夷","吏","戍","戌"],"4-7-1":["亜","更","酉","里","巫","豕"],"4-7-2":["坐"],"4-7-3":["亊","求","串","車","身","束","釆","甫","来","我"],"4-7-4":["寿","良","夾","曵"],"4-8-1":["雨","果","亞","兩"],"4-8-2":["垂","隹"],"4-8-3":["事","東","乖","來","秉","隶"],"4-8-4":["兎"],"4-9-1":["飛"],"4-9-2":["重","韭"],"4-9-3":["乗","柬","禹","禺"],"4-9-4":["威","為","咸","臾"],"4-10-2":["埀"],"4-10-3":["乘"],"4-11-3":["粛"],"4-11-4":["戚","爽"],"4-12-4":["幾"],"4-13-1":["鼎","黽"],"4-13-3":["肅"],"4-14-1":["爾"],"4-15-4":["畿","臧"]};
        Object.assign(searchIndex, skipIndex);
    }
    initHooks();
})();