diff --git a/#movie.bat b/#movie.bat
new file mode 100644
index 0000000..7de6d76
--- /dev/null
+++ b/#movie.bat
@@ -0,0 +1,13 @@
+ @ECHO OFF
+ECHO Put Netflix Id here :
+set /p MPD=
+
+ECHO Quality Select :
+set /p qu=
+NFripper.py %MPD% -o Downloads -q %qu% --main --prv ca-tor.pvdata.host --alang hin eng
+
+echo
+pause
+
+
+@ECHO OFF
\ No newline at end of file
diff --git a/#series.bat b/#series.bat
new file mode 100644
index 0000000..a421a61
--- /dev/null
+++ b/#series.bat
@@ -0,0 +1,16 @@
+@ECHO OFF
+ECHO Put Netflix Id here :
+set /p MPD=
+
+ECHO Season No :
+set /p se=
+
+ECHO Quality Select :
+set /p qu=
+NFripper.py %MPD% -o Downloads -q %qu% -s %se% --main --prv ca-tor.pvdata.host --alang hin eng
+
+echo
+pause
+
+
+@ECHO OFF
\ No newline at end of file
diff --git a/NFripper.py b/NFripper.py
new file mode 100644
index 0000000..653adb6
--- /dev/null
+++ b/NFripper.py
@@ -0,0 +1,128 @@
+import argparse, json, os, logging
+from configs.config import tool
+from helpers.proxy_environ import proxy_env
+from datetime import datetime
+from services.netflix import netflix
+
+script_name = "NF Ripper"
+script_ver = "2.0.1.0"
+
+if __name__ == "__main__":
+
+ parser = argparse.ArgumentParser(description=f">>> {script_name} {script_ver} <<<")
+ parser.add_argument("content", nargs="?", help="Content URL or ID")
+ parser.add_argument("-q", dest="customquality", nargs=1, help="For configure quality of video.", default=[])
+ parser.add_argument("-o", dest="output", help="download all assets to directory provided.")
+ parser.add_argument("-f", dest="output_folder", help="force mux .mkv files to directory provided", action="store", default=None)
+ parser.add_argument("--nv", dest="novideo", help="dont download video", action="store_true")
+ parser.add_argument("--na", dest="noaudio", help="dont download audio", action="store_true")
+ parser.add_argument("--ns", dest="nosubs", help="dont download subs", action="store_true")
+ parser.add_argument("-e", dest="episodeStart", help="it will start downloading the season from that episode.", default=None)
+ parser.add_argument("-s", dest="season", help="it will start downloading the from that season.", default=None)
+ parser.add_argument("--keep", dest="keep", help="well keep all files after mux, by default all erased.", action="store_true")
+ parser.add_argument("--only-2ch-audio", dest="only_2ch_audio", help="to force get only eac3 2.0 Ch audios.", action="store_true")
+ parser.add_argument("--alang", dest="audiolang", nargs="*", help="download only selected audio languages", default=[],)
+ parser.add_argument("--AD", '--adlang', dest="AD", nargs="*", help="download only selected audio languages", default=[],)
+ parser.add_argument("--slang", dest="sublang", nargs="*", help="download only selected subtitle languages", default=[],)
+ parser.add_argument("--flang", dest="forcedlang", nargs="*", help="download only selected forced subtitle languages", default=[],)
+ parser.add_argument('-t', "--title", dest="titlecustom", nargs=1, help="Customize the title of the show", default=[],)
+ parser.add_argument('-p', "--prompt", dest="prompt", help="will Enable the yes/no prompt when URLs are grabbed.", action="store_true")
+ parser.add_argument('-keys', "--license", dest="license", help="print all profiles keys and exit.", action="store_true")
+ parser.add_argument("--audio-bitrate", dest="custom_audio_bitrate", nargs=1, help="For configure bitrate of audio.", default=[])
+ parser.add_argument("--aformat-2ch","--audio-format-2ch", dest="aformat_2ch",nargs=1, help="For configure format of audio.", default=[],)
+ parser.add_argument("--aformat-51ch","--audio-format-51ch", dest="aformat_51ch",nargs=1, help="For configure format of audio.", default=[],)
+ parser.add_argument("--android-login", dest="android_login", help="will log netflix using android api and save cookies nd build.", action="store_true",)
+ parser.add_argument("--search", action="store", dest="search", help="download using netflix search for the movie/show.", default=0,)
+ parser.add_argument("--hevc", dest="hevc", help="will return HEVC profile", action="store_true")
+ parser.add_argument("--hdr", dest="hdr", help="will return HDR profile", action="store_true")
+ parser.add_argument("--high", dest="video_high", help="return MSL High Video manifest for hpl videos, usually small size low bitrate.", action="store_true",)
+ parser.add_argument("--main", dest="video_main", help="return MSL Main Video manifest for mpl videos, usually Big size High bitrate.", action="store_true",)
+ parser.add_argument("--check", dest="check", help="hpl vs mpl.", action="store_true",)
+ parser.add_argument("--all-audios", dest="allaudios", help="all download audios of the movie/show", action="store_true",)
+ parser.add_argument("--all-forced", dest="allforcedlang", help="all download forced subs of the movie/show", action="store_true",)
+ parser.add_argument("--no-aria2c", dest="noaria2c", help="not use aria2c for download, will use python downloader.", action="store_true",)
+
+ # PROXY
+ parser.add_argument("--nrd", action="store", dest="nordvpn", help="add country for nordvpn proxies.", default=0,)
+ parser.add_argument("--prv", action="store", dest="privtvpn", help="add country for privtvpn proxies.", default=0,)
+ parser.add_argument("--no-dl-proxy", dest="no_download_proxy", help="do not use proxy will downloading files", action="store_true", default=False,)
+
+ # PACK
+ parser.add_argument("--gr", dest="muxer_group", help="add group name to use that will override the one in config", action="store", default=None)
+ parser.add_argument("--upload", dest="upload_ftp", help="upload the release after packing", action="store_true", default=None)
+ parser.add_argument("--pack", dest="muxer_pack", help="pack the release", action="store_true", default=None)
+ parser.add_argument("--confirm", dest="confirm_upload", help="ask confirming before upload the packed release", action="store_true", default=None)
+ parser.add_argument("--imdb", dest="muxer_imdb", help="add imdb for the title for packing", action="store", default=None)
+ parser.add_argument("--scheme", dest="muxer_scheme", help="set muxer scheme name", default=None)
+ # cleaner
+ parser.add_argument("--clean-add", dest="clean_add", nargs="*", help="add more extension of files to be deleted", default=[],)
+ parser.add_argument("--clean-exclude", dest="clean_exclude", nargs="*", help="add more extension of files to not be deleted", default=[],)
+ parser.add_argument("--log-level", default="info", dest="log_level", choices=["debug", "info", "error", "warning"], help="choose level")
+ parser.add_argument("--log-file", dest="log_file", help="set log file for debug", default=None)
+ args = parser.parse_args()
+
+ start = datetime.now()
+
+ if args.log_file:
+ logging.basicConfig(
+ filename=args.log_file,
+ format="%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s",
+ datefmt="%Y-%m-%d %I:%M:%S %p",
+ level=logging.DEBUG,
+ )
+
+ else:
+ if args.log_level.lower() == "info":
+ logging.basicConfig(format="%(message)s", level=logging.INFO)
+ elif args.log_level.lower() == "debug":
+ logging.basicConfig(
+ format="%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s",
+ datefmt="%Y-%m-%d %I:%M:%S %p",
+ level=logging.DEBUG,
+ )
+ elif args.log_level.lower() == "warning":
+ logging.basicConfig(
+ format="%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s",
+ datefmt="%Y-%m-%d %I:%M:%S %p",
+ level=logging.WARNING,
+ )
+ elif args.log_level.lower() == "error":
+ logging.basicConfig(
+ format="%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(message)s",
+ datefmt="%Y-%m-%d %I:%M:%S %p",
+ level=logging.ERROR,
+ )
+
+ logging.getLogger(__name__)
+
+ group = {
+ "UPLOAD": args.upload_ftp,
+ "IMDB": args.muxer_imdb,
+ "SCHEME": args.muxer_scheme,
+ "PACK": args.muxer_pack,
+ "GROUP": args.muxer_group,
+ "CONFIRM": args.confirm_upload,
+ "EXTRA_FOLDER": args.output_folder,
+ }
+
+ # ~ commands
+ proxy, ip = proxy_env(args).Load()
+ commands = {"aria2c_extra_commands": proxy, "group": group}
+ logging.debug(commands)
+
+ if args.license:
+ args.prompt = False
+
+ l = "\n__________________________\n"
+ print(
+ f"\n-- {script_name} --{l}\nVERSION: {script_ver}{l}\nIP: {ip}{l}"
+ )
+
+ netflix_ = netflix(args, commands)
+ netflix_.main_netflix()
+
+ print(
+ "\nNFripper took {} Sec".format(
+ int(float((datetime.now() - start).total_seconds()))
+ )
+ ) # total seconds
diff --git a/bin/BeHappy/plugins32/LSMASHSource.dll b/bin/BeHappy/plugins32/LSMASHSource.dll
new file mode 100644
index 0000000..feeeeff
Binary files /dev/null and b/bin/BeHappy/plugins32/LSMASHSource.dll differ
diff --git a/bin/BeHappy/plugins32/TimeStretch.dll b/bin/BeHappy/plugins32/TimeStretch.dll
new file mode 100644
index 0000000..d7ddc13
Binary files /dev/null and b/bin/BeHappy/plugins32/TimeStretch.dll differ
diff --git a/bin/BeHappy/plugins32/desktop.ini b/bin/BeHappy/plugins32/desktop.ini
new file mode 100644
index 0000000..787cdb4
Binary files /dev/null and b/bin/BeHappy/plugins32/desktop.ini differ
diff --git a/bin/tools/MediaInfo.exe b/bin/tools/MediaInfo.exe
new file mode 100644
index 0000000..9e70e20
Binary files /dev/null and b/bin/tools/MediaInfo.exe differ
diff --git a/bin/tools/aria2c.exe b/bin/tools/aria2c.exe
new file mode 100644
index 0000000..7de7a06
Binary files /dev/null and b/bin/tools/aria2c.exe differ
diff --git a/bin/tools/ffmpeg.exe b/bin/tools/ffmpeg.exe
new file mode 100644
index 0000000..8085a60
Binary files /dev/null and b/bin/tools/ffmpeg.exe differ
diff --git a/bin/tools/ffplay.exe b/bin/tools/ffplay.exe
new file mode 100644
index 0000000..91250fe
Binary files /dev/null and b/bin/tools/ffplay.exe differ
diff --git a/bin/tools/ffprobe.exe b/bin/tools/ffprobe.exe
new file mode 100644
index 0000000..100a47f
Binary files /dev/null and b/bin/tools/ffprobe.exe differ
diff --git a/bin/tools/mkvmerge.exe b/bin/tools/mkvmerge.exe
new file mode 100644
index 0000000..1fd3256
Binary files /dev/null and b/bin/tools/mkvmerge.exe differ
diff --git a/bin/tools/mp4decrypt.exe b/bin/tools/mp4decrypt.exe
new file mode 100644
index 0000000..4956c22
Binary files /dev/null and b/bin/tools/mp4decrypt.exe differ
diff --git a/bin/tools/mp4dump.exe b/bin/tools/mp4dump.exe
new file mode 100644
index 0000000..328c322
Binary files /dev/null and b/bin/tools/mp4dump.exe differ
diff --git a/checker.bat b/checker.bat
new file mode 100644
index 0000000..4a6fba1
--- /dev/null
+++ b/checker.bat
@@ -0,0 +1,13 @@
+@ECHO OFF
+ECHO Put Netflix Id here :
+set /p MPD=
+
+ECHO Quality Select :
+set /p qu=
+NFripper.py %MPD% -o Downloads -q %qu% --check
+
+echo
+pause
+
+
+@ECHO OFF
\ No newline at end of file
diff --git a/configs/Cookies/cookies_nf.txt b/configs/Cookies/cookies_nf.txt
new file mode 100644
index 0000000..d5018de
--- /dev/null
+++ b/configs/Cookies/cookies_nf.txt
@@ -0,0 +1,113 @@
+{
+ "BUILD_IDENTIFIER": "v970d0ec4",
+ "cookies": {
+ "_ga": [
+ "GA1.2.1140108570.1617215940",
+ 0
+ ],
+ "NetflixId": [
+ "v%3D2%26ct%3DBQAOAAEBEHOzu6KP28kdADXLobUUrROB0PoBjq3JxcX1vGfDcXUv4xVDQq5H6XsQyE1Frj5SPGO99pNqlZl9A5O3CZUdxiur6u9F5dqAyA0veRgT2bVpQnJ-h7kBmZdPSr3HyGHD9fMnj07AjgioUxeWFsJPky9pVuFRADdnSQXFFqK1NpW2TpDRpGEFRInaAZ9Hr-y6y4J7ggTgHQhbL8CI6NgAHFs8QgPEC9jcyvyFKQmRIBUeU-HS2-WSNlNwSxquZ4bNGBasoTIMGE_8A3R2Mo4lc-qio2Df8Qdv-elVwj8S6VeH8v-brCDpPk-VcDbQp1O2sPb9oKnbCS0DNYL3TqGXzMBNVrL_nHfxDEbPss8929Tc9Ra5HA3635DKbxEJc-tq3u9xUeb_DszXHIS5O-sg6595Pn-LPWBxphkPKdftdLYsQD1RzR0ena_UNrvr-8lIE5TxCXJhLXK0msAfypuevVH1XKXN2FsHJyR0JbbzkOYN2KNxCmRfNkYezY28fKRoufM1F6gF5HDMxuLzw_KjrDV6is18lbNbcmP32_TY2aJnWfHqSaGw5DWnQ3shDKo4SltLUjCuJzYGY7YJAEM-3ifbtwN-QgKyWTUsCwtrrYlDnpUy4rs3rnJyAu8EElWymMkV%26bt%3Ddbl%26ch%3DAQEAEAABABSprqjfXbW6YL0tVF0tz16hvWyTr9LF4jE.%26mac%3DAQEAEAABABRoyiGmz8qurX494b0O21l13oiiV94g9CU.",
+ 0
+ ],
+ "OptanonConsent": [
+ "isIABGlobal=false&datestamp=Fri+Jun+18+2021+07%3A58%3A49+GMT-0700+(Pacific+Daylight+Time)&version=6.6.0&consentId=a93027f9-5a1c-410f-8272-e0a1ea3e658d&interactionCount=1&landingPath=NotLandingPage&groups=C0001%3A1%2CC0002%3A1%2CC0004%3A0&hosts=H1%3A1%2CH12%3A1%2CH13%3A1%2CH27%3A0%2CH28%3A0%2CH30%3A0&AwaitingReconsent=false",
+ 0
+ ],
+ "SecureNetflixId": [
+ "v%3D2%26mac%3DAQEAEQABABS0Wg3y7pHcIuzNaFVA9OL1hOBszVcpdKc.%26dt%3D1623992368587",
+ 0
+ ],
+ "cf_token": [
+ "5d16d7e4-f422-4505-b81a-f13f81d06b71",
+ 0
+ ],
+ "flwssn": [
+ "f30c6737-15f8-4a97-8102-a0162bac69bc",
+ 0
+ ],
+ "memclid": [
+ "5eb11c58-f94f-46a1-9916-a877c78cc950",
+ 0
+ ],
+ "nfvdid": [
+ "BQFmAAEBEHVhRA5F47wt0VzEXxA4lotgv2JbGEnTuU3t2ACmhEmOKuDHWsixD22MEvRfk1SyBSysA4pNyu4UnaMbEBYYAAhCvmGD6sG8LGI_wNxCLpENpUPoF1FF8p3ZOUGBcLkMl5UDunPJGTSHibJ6rP5eZwgX",
+ 0
+ ],
+ "pas": [
+ "%7B%22supplementals%22%3A%7B%22muted%22%3Atrue%7D%7D",
+ 0
+ ],
+ "playerPerfMetrics": [
+ "%7B%22uiValue%22%3A%7B%22throughput%22%3A24045%2C%22throughputNiqr%22%3A0.1387332986123521%7D%2C%22mostRecentValue%22%3A%7B%22throughput%22%3A24044.9%2C%22throughputNiqr%22%3A0.1387332986123521%7D%7D",
+ 0
+ ],
+ "profilesNewSession": [
+ "0",
+ 0
+ ],
+ "__cfduid": [
+ "ddc5ba21ab87d546424a73381309e8af61619034211",
+ 0
+ ],
+ "_admrla": [
+ "2.0-a88ab21a-c44f-b78a-d6e3-05b3cde370fc",
+ 0
+ ],
+ "_awl": [
+ "2.1619452424.0.4-7dc0a353-a88ab21ac44fb78ad6e305b3cde370fc-6763652d617369612d6561737431-6086e208-1",
+ 0
+ ],
+ "_gid": [
+ "GA1.2.962657418.1619405560",
+ 0
+ ],
+ "ccpaApplies": [
+ "false",
+ 0
+ ],
+ "ccpaUUID": [
+ "e05cd352-14f3-4d80-9500-b1d81fee7cd0",
+ 0
+ ],
+ "dnsDisplayed": [
+ "true",
+ 0
+ ],
+ "signedLspa": [
+ "false",
+ 0
+ ],
+ "thx_guid": [
+ "8a067b33cfaa47539ea40975e2b80069",
+ 0
+ ],
+ "_sp_v1_csv": [
+ "null",
+ 0
+ ],
+ "_sp_v1_data": [
+ "2:334049:1619034213:0:9:0:9:0:0:_:-1",
+ 0
+ ],
+ "_sp_v1_lt": [
+ "1:",
+ 0
+ ],
+ "_sp_v1_opt": [
+ "1:",
+ 0
+ ],
+ "_sp_v1_ss": [
+ "1:H4sIAAAAAAAAAItWqo5RKimOUbKKhjHySnNydGKUUpHYJWCJ6traWFwSSjrUNwiffqVYAG6Fhl26AAAA",
+ 0
+ ],
+ "_sp_v1_uid": [
+ "1:365:378b6189-c59f-4807-abd1-95bcd2c5779d",
+ 0
+ ],
+ "consentUUID": [
+ "ef33150e-dde3-41af-b14c-18d858e5a51b",
+ 0
+ ]
+ }
+}
\ No newline at end of file
diff --git a/configs/KEYS/netflix.keys b/configs/KEYS/netflix.keys
new file mode 100644
index 0000000..30d9655
--- /dev/null
+++ b/configs/KEYS/netflix.keys
@@ -0,0 +1,2025 @@
+[
+ {
+ "NAME": "Nayattu 2021",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006860f250000000000000000",
+ "KEY": "df64ee3c4342c096ad1595301615ef52"
+ },
+ {
+ "NAME": "Rajma Chawal 2018",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051f92e10000000000000000",
+ "KEY": "37ee4a3b53bc0f256ca6553ef9688034"
+ },
+ {
+ "NAME": "Torbaaz 2020",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000063a93d80000000000000000",
+ "KEY": "6f1afa99d4fa960d53ad0b2bd5ec94b8"
+ },
+ {
+ "NAME": "Sacred Games S01E01 Ashwathama",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d5e6510000000000000000",
+ "KEY": "d24a057efc785362d9bc7c1201901cfe"
+ },
+ {
+ "NAME": "Sacred Games S01E02 Halahala",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d63ff50000000000000000",
+ "KEY": "30eb93ce2b208425c90ec312a9d92f8a"
+ },
+ {
+ "NAME": "Sacred Games S01E03 Atapi Vatapi",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d5fe6d0000000000000000",
+ "KEY": "960869ab112f560a7b3c8a2c05abaf92"
+ },
+ {
+ "NAME": "Sacred Games S01E04 Brahmahatya",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d6e5930000000000000000",
+ "KEY": "122b2ea2a89f0194bd77a9bf04dd1294"
+ },
+ {
+ "NAME": "Sacred Games S01E05 Sarama",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d71c730000000000000000",
+ "KEY": "d38e103ae35ca99cdd68fd7da2a2c111"
+ },
+ {
+ "NAME": "Sacred Games S01E06 Pretakalpa",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d73da90000000000000000",
+ "KEY": "5a45bb6db2c65bbef7f03bb080a446c5"
+ },
+ {
+ "NAME": "Sacred Games S01E07 Rudra",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d797990000000000000000",
+ "KEY": "49c4368f385b7f421ade3dea286ce019"
+ },
+ {
+ "NAME": "Sacred Games S01E08 Yayati",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d7bbd70000000000000000",
+ "KEY": "17d5412a106fd46777f130ff6f0975b6"
+ },
+ {
+ "NAME": "Bard of Blood S01E01 What's Past Is Prologue",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056c4f250000000000000000",
+ "KEY": "c513748194ad82d4fa6e5910703e6ec6"
+ },
+ {
+ "NAME": "Bard of Blood S01E02 When Sorrows Come, They Come Not Single Spies, but in Battalions",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056e738d0000000000000000",
+ "KEY": "3628c4c15a1714278b940765065ef451"
+ },
+ {
+ "NAME": "Bard of Blood S01E03 So Quick Bright Things Come to Confusion",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056fdd590000000000000000",
+ "KEY": "a4ad58ebe7a447ffb937f82fb9fa0ab6"
+ },
+ {
+ "NAME": "Bard of Blood S01E04 Love All, Trust a Few, Do Wrong to None",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056f53010000000000000000",
+ "KEY": "3ab894bff4d0667a63fcce7ac820ed0e"
+ },
+ {
+ "NAME": "Bard of Blood S01E05 Fight Fire With Fire",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005731ba50000000000000000",
+ "KEY": "0967bf63861923f8a3e7acf525299c06"
+ },
+ {
+ "NAME": "Bard of Blood S01E06 Heat Not a Furnace for Your Foe So Hot That It Do Singe Yourself",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000057016a10000000000000000",
+ "KEY": "b55003c7df540d4c87c1daf8b9971fbd"
+ },
+ {
+ "NAME": "Bard of Blood S01E07 My Stronger Guilt Defeats My Strong Intent",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000571979d0000000000000000",
+ "KEY": "3ef1b7721991d5c041964519075852e1"
+ },
+ {
+ "NAME": "She S01E01 the Pickup",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059355f10000000000000000",
+ "KEY": "3d7f38c26f6ebd610833218b5c68bace"
+ },
+ {
+ "NAME": "She S01E02 the Proposal",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059390190000000000000000",
+ "KEY": "054b864eaa58cd3252c60bc4d10d6cc7"
+ },
+ {
+ "NAME": "She S01E03 the Pawn's Move",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000594ebd10000000000000000",
+ "KEY": "f013441061d70470d275ab2232ea2ecc"
+ },
+ {
+ "NAME": "She S01E04 Night Walk",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005993e950000000000000000",
+ "KEY": "f9e4fd62c8235f2bd4a2d9052557ce69"
+ },
+ {
+ "NAME": "She S01E05 It's Time",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000595bbf10000000000000000",
+ "KEY": "fa3fb7d3c86d0add89be75e17f0b90a5"
+ },
+ {
+ "NAME": "She S01E06 the Promise",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059b902d0000000000000000",
+ "KEY": "69f2807dc5c7c64c10fd2e08e7b66f22"
+ },
+ {
+ "NAME": "She S01E07 Devil's Share",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059ee3210000000000000000",
+ "KEY": "a360133e17e499a5ede2316b102a8fff"
+ },
+ {
+ "NAME": "Stranger Things S01E01 Chapter One - The Vanishing of Will Byers",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598eed90000000000000000",
+ "KEY": "bab0ba4c4e587e820882558d9ec04672"
+ },
+ {
+ "NAME": "Stranger Things S01E02 Chapter Two - The Weirdo on Maple Street",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f29d0000000000000000",
+ "KEY": "a5b1259bae6b78fabba66848ec3736cb"
+ },
+ {
+ "NAME": "Stranger Things S01E03 Chapter Three - Holly, Jolly",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f6550000000000000000",
+ "KEY": "e38aad7ddcbb57ab67236c0a643f6d48"
+ },
+ {
+ "NAME": "Stranger Things S01E04 Chapter Four - The Body",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f4cd0000000000000000",
+ "KEY": "c8787efdaf30a7c463c3b8b67e0a32d1"
+ },
+ {
+ "NAME": "Stranger Things S01E05 Chapter Five - The Flea and the Acrobat",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f55d0000000000000000",
+ "KEY": "f7d3e1df13f180b8797ffb3cd366f983"
+ },
+ {
+ "NAME": "Stranger Things S01E06 Chapter Six - The Monster",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f5e10000000000000000",
+ "KEY": "71220ae98efbb354578754490abf998e"
+ },
+ {
+ "NAME": "Stranger Things S01E07 Chapter Seven - The Bathtub",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f4850000000000000000",
+ "KEY": "f275bf3f5e5e82fbb6b298a5859c3c15"
+ },
+ {
+ "NAME": "Stranger Things S01E08 Chapter Eight - The Upside Down",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598f5f10000000000000000",
+ "KEY": "178cd88de85dd4cdeaca2073a3b52b5a"
+ },
+ {
+ "NAME": "Stranger Things S02E01 Chapter One - MADMAX",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005656c680000000000000000",
+ "KEY": "f9f71daed086a7301c6a4511a4e34c78"
+ },
+ {
+ "NAME": "Stranger Things S02E01 Chapter One - MADMAX",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "0000000005656c660000000000000000",
+ "KEY": "c6b475226d6ee499de3e57be00c3a787"
+ },
+ {
+ "NAME": "Stranger Things S02E01 Chapter One - MADMAX",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "0000000005656c6a0000000000000000",
+ "KEY": "bdcd7a754440e3d972c84e1be043ca93"
+ },
+ {
+ "NAME": "Narcos S03E01 the Kingpin Strategy",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000053311d30000000000000000",
+ "KEY": "88fd9ecf8a207d7a7c881bb2c11a9860"
+ },
+ {
+ "NAME": "Narcos S03E02 the Cali KGB",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000053315d70000000000000000",
+ "KEY": "a99dd9848525f08e5a61815103922469"
+ },
+ {
+ "NAME": "Narcos S03E03 Follow the Money",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000053315190000000000000000",
+ "KEY": "b27809c079a564cb9e9de8513e1f8d4d"
+ },
+ {
+ "NAME": "Narcos S03E04 Checkmate",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000053315890000000000000000",
+ "KEY": "5e5cc5fa610ef8daade9741259ca626c"
+ },
+ {
+ "NAME": "Narcos S03E05 Mro",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005331d410000000000000000",
+ "KEY": "719e574a90e3f05f31d9afe20664b763"
+ },
+ {
+ "NAME": "Narcos S03E06 Best Laid Plans",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056079750000000000000000",
+ "KEY": "408e294be620b2cc39d9102a31540f01"
+ },
+ {
+ "NAME": "Narcos S03E07 Sin Salida",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056078990000000000000000",
+ "KEY": "aebf8a3374cb9ac3baaeadc5b5ef721f"
+ },
+ {
+ "NAME": "Narcos S03E08 Convivir",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056078060000000000000000",
+ "KEY": "23b7a5f27f32a07eef8146605df8fd0f"
+ },
+ {
+ "NAME": "Narcos S03E09 Todos Los Hombres Del Presidente",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056078f90000000000000000",
+ "KEY": "1acb7a8da7fc30abb07d3fd2e431ac35"
+ },
+ {
+ "NAME": "Narcos S03E10 Going Back to Cali",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056077c70000000000000000",
+ "KEY": "2d141e833098df1928d0416892830c71"
+ },
+ {
+ "NAME": "Narcos S02E01 Free at Last",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005635eb30000000000000000",
+ "KEY": "4cf9b0926567004208c5c9521f3bd800"
+ },
+ {
+ "NAME": "Narcos S02E02 Cambalache",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056367a10000000000000000",
+ "KEY": "27d0ef3d06fc7a74b85902904c90f765"
+ },
+ {
+ "NAME": "Narcos S02E03 Our Man in Madrid",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056369830000000000000000",
+ "KEY": "60f43b66a0ea0772d9598269aa87b281"
+ },
+ {
+ "NAME": "Narcos S02E04 the Good, the Bad, and the Dead",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005636b3a0000000000000000",
+ "KEY": "da9f6e1c3b5c3583d5dcd23c0b5f4607"
+ },
+ {
+ "NAME": "Narcos S02E04 the Good, the Bad, and the Dead",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "0000000005636b380000000000000000",
+ "KEY": "03bbc2cc1b6db80bda94b2cb41943e1e"
+ },
+ {
+ "NAME": "Narcos S02E04 the Good, the Bad, and the Dead",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "0000000005636b360000000000000000",
+ "KEY": "29b0c960076df6d7fbada002003e43b5"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059434f00000000000000000",
+ "KEY": "43c9bbb1c37ea801aa6b7bb6c7ed82fb"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "00000000059434ee0000000000000000",
+ "KEY": "545cbc3932be3546de282fb3ac3f8f18"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "00000000059434f20000000000000000",
+ "KEY": "16ade1672d9abde370e08b4c0e3c854a"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059434ee0000000000000000",
+ "KEY": "545cbc3932be3546de282fb3ac3f8f18"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "00000000059434f00000000000000000",
+ "KEY": "43c9bbb1c37ea801aa6b7bb6c7ed82fb"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "00000000059434f20000000000000000",
+ "KEY": "16ade1672d9abde370e08b4c0e3c854a"
+ },
+ {
+ "NAME": "Ozark S01E01 Sugarwood",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005a224d00000000000000000",
+ "KEY": "cbe405c5759d99a0d5149fa8d34f52e7"
+ },
+ {
+ "NAME": "Ozark S01E01 Sugarwood",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "0000000005a224ce0000000000000000",
+ "KEY": "9a6de08168fe83965425e7718ee44741"
+ },
+ {
+ "NAME": "Ozark S01E01 Sugarwood",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "0000000005a224d20000000000000000",
+ "KEY": "9ecf832af424aa826674324f5908db3e"
+ },
+ {
+ "NAME": "Lust Stories 2018",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d5eb090000000000000000",
+ "KEY": "933aac254dd686dd629b41e04009e881"
+ },
+ {
+ "NAME": "Chopsticks 2019",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005339cfb0000000000000000",
+ "KEY": "e8027083cdcbdd7f85f862424b656c4a"
+ },
+ {
+ "NAME": "Force 2 2016",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000492a97d0000000000000000",
+ "KEY": "62461ab74d683d0c9ce7ded602982d81"
+ },
+ {
+ "NAME": "Serious Men 2020",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e0e1ca0000000000000000",
+ "KEY": "60a47bba09b0cdcc10f3d2c1c4281ff9"
+ },
+ {
+ "NAME": "Choked - Paisa Bolta Hai 2020",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059f40d60000000000000000",
+ "KEY": "2997d82d3bb71974af220a08de5e8f27"
+ },
+ {
+ "NAME": "Choked - Paisa Bolta Hai 2020",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "00000000059f40d40000000000000000",
+ "KEY": "c3df42e031cef3d6811eba40c9d73885"
+ },
+ {
+ "NAME": "Choked - Paisa Bolta Hai 2020",
+ "PSSH": null,
+ "ID": 3,
+ "KID": "00000000059f3cea0000000000000000",
+ "KEY": "4c40aaa2ec94970b8de752b57ea2c568"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059331b50000000000000000",
+ "KEY": "4b6cc05afe7c8e7fd59b9e906beb60ee"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000593657d0000000000000000",
+ "KEY": "441b5c97778515e94bf3b15fb44483ab"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005939ab90000000000000000",
+ "KEY": "e3f79a1589071f6de13d57fb65c9b8c0"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059411d50000000000000000",
+ "KEY": "f33a60c28faf72aae8ded9e52a5e6b83"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E05",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059486a50000000000000000",
+ "KEY": "924f8b9dc168f74e2b7eef5489440f54"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E06",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000594ceed0000000000000000",
+ "KEY": "579e674e5f55f992f987cbe69979f6ea"
+ },
+ {
+ "NAME": "Taj Mahal 1989 S01E07",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005964a350000000000000000",
+ "KEY": "a366276b1d956fec0df5371a0e488b30"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E01 Chapter One - October Country",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004dda1fb0000000000000000",
+ "KEY": "eb2c75d014b9e0d4a3e028eb1ca670eb"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E02 Chapter Two - The Dark Baptism",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004dce2d70000000000000000",
+ "KEY": "f650127dee8309320a74466cdbffee8d"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E03 Chapter Three - The Trial of Sabrina Spellman",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005182fb70000000000000000",
+ "KEY": "ddaeb92cbcb237f91f898469cdaff5d7"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E04 Chapter Four - Witch Academy",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004df72a90000000000000000",
+ "KEY": "78e8d941d33ad9db26abcf0174d67427"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E05 Chapter Five - Dreams in a Witch House",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004df93630000000000000000",
+ "KEY": "e3fcef235ce0db3fbe79d3d971be2ef1"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E06 Chapter Six - An Exorcism in Greendale",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004dfffc50000000000000000",
+ "KEY": "810c84818c72f27ef9e6e558ecb3e815"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E07 Chapter Seven - Feast of Feasts",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004e0e8f50000000000000000",
+ "KEY": "227b378f407e86522257e0db0f226529"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E08 Chapter Eight - The Burial",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000515eddd0000000000000000",
+ "KEY": "11148bce0a2f7744d536888537363c9a"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E09 Chapter Nine - The Returned Man",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051620d10000000000000000",
+ "KEY": "ba4709ec9591430f4ac7d9cb99127d74"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E10 Chapter Ten - The Witching Hour",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051830610000000000000000",
+ "KEY": "88688177fe22e35bd721aa079f4f8ea6"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S01E11 Chapter Eleven - A Midwinter's Tale",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051eaf570000000000000000",
+ "KEY": "52d77300ba270f3d0f96c99d52719235"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E01 Chapter Twelve - The Epiphany",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052357730000000000000000",
+ "KEY": "9e8d0bae58ee1f2e82f0ff6be51f0ba4"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E02 Chapter Thirteen - The Passion of Sabrina Spellman",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052356b90000000000000000",
+ "KEY": "b4f0b0ac66587ebaa79f3792730f5475"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E03 Chapter Fourteen - Lupercalia",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000523dc0d0000000000000000",
+ "KEY": "c13e06dabc3872c8bec7274433ba456c"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E04 Chapter Fifteen - Doctor Cerberus's House of Horror",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000524fd1f0000000000000000",
+ "KEY": "4d54446a34f3f5f42547b2e5546967a1"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E05 Chapter Sixteen - Blackwood",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005252f150000000000000000",
+ "KEY": "1c5cd19a34941653256c504fcf228cb5"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E06 Chapter Seventeen - The Missionaries",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000528221b0000000000000000",
+ "KEY": "84e3cc78c97b7cee8d576d4472c8488d"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E07 Chapter Eighteen - The Miracles of Sabrina Spellman",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c498d0000000000000000",
+ "KEY": "f25a5ca0c76f8e051ec55ebf2027998f"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E08 Chapter Nineteen - The Mandrake",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c53d30000000000000000",
+ "KEY": "8212e11c29a94bd7348f92b2af1781ee"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S02E09 Chapter Twenty - The Mephisto Waltz",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c8f290000000000000000",
+ "KEY": "d786eb79d08946a1d1ff6b4beabaefee"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E01 Chapter Twenty-One - The Hellbound Heart",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000580032d0000000000000000",
+ "KEY": "b3e1e52c2377b62ed07d8a10ed91c407"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E02 Chapter Twenty-Two - Drag Me to Hell",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058003090000000000000000",
+ "KEY": "0eed2b23ef7ae52e554bf9853e25bcf5"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E03 Chapter Twenty-Three - Heavy Is the Crown",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058ab8cd0000000000000000",
+ "KEY": "6ea595a730ec6aacd44a94830dc4d31d"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E04 Chapter Twenty-Four - The Hare Moon",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058abd150000000000000000",
+ "KEY": "834785135ce2110da8f728b595032a54"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E05 Chapter Twenty-Five - The Devil Within",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058222a10000000000000000",
+ "KEY": "23953e24d78d53e80ab71c206f632f89"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E06 Chapter Twenty-Six - All of Them Witches",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000586e97d0000000000000000",
+ "KEY": "19a7c34d51a290e6084279978828d186"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E07 Chapter Twenty-Seven - The Judas Kiss",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058894950000000000000000",
+ "KEY": "cc3a246d46be6d5705e31ccffd845c27"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S03E08 Chapter Twenty-Eight - Sabrina Is Legend",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058bedc90000000000000000",
+ "KEY": "97171df8e3ef1cbfdd6f282084b19a26"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E01 Chapter Twenty-Nine - The Eldritch Dark",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059271b90000000000000000",
+ "KEY": "3d121d7e3ae3863979ee0849b830fdfc"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E02 Chapter Thirty - The Uninvited",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059c4a9d0000000000000000",
+ "KEY": "4463b5b1e6dbfdd7777f2924d027492a"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E03 Chapter Thirty-One - The Weird",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059c49d50000000000000000",
+ "KEY": "d265194425cacf04e52b0148b02cf4ff"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E04 Chapter Thirty-Two - The Imp of the Perverse",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005a259b10000000000000000",
+ "KEY": "f974f7019a2e4c45b851174c19ffe76c"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E05 Chapter Thirty-Three - Deus Ex Machina",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005a604110000000000000000",
+ "KEY": "8704557ec589eb2be87e3b70a5b1ccf3"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E06 Chapter Thirty-Four - The Returned",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005c53b010000000000000000",
+ "KEY": "61419177b3313cb6e21747387388273b"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E07 Chapter Thirty-Five - The Endless",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005c72dae0000000000000000",
+ "KEY": "f3d64f82456dcf5a7ac4c4d0c84739c7"
+ },
+ {
+ "NAME": "Chilling Adventures of Sabrina S04E08 Chapter Thirty-Six - At the Mountains of Madness",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ccbda00000000000000000",
+ "KEY": "d054db9e0eff9495d20febc308684ce9"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e1db2c0000000000000000",
+ "KEY": "21a6467e35cef07daf15b7650da04ba5"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e247900000000000000000",
+ "KEY": "7163abe227577ce50da752baf04c7a46"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e2a0fa0000000000000000",
+ "KEY": "d301bbe1dc4cdf6ef154f748ed270994"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e7ee4d0000000000000000",
+ "KEY": "5b7faaa047dc05b5b1bf1a5f3872bddd"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E05",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005e83de90000000000000000",
+ "KEY": "90cd56ba8d7da3b56d14b8fe1203386f"
+ },
+ {
+ "NAME": "Bhaag Beanie Bhaag S01E06",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ecd0fc0000000000000000",
+ "KEY": "a02280ee81fe959d2855c88ac0ee0df2"
+ },
+ {
+ "NAME": "Betaal S01E01 the Tunnel",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059434ed0000000000000000",
+ "KEY": "ca6c25db7bf1a05609e14e5f68e5fbde"
+ },
+ {
+ "NAME": "Betaal S01E02 the Barracks",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005943d810000000000000000",
+ "KEY": "eeb29a6438049f87f0de8cfed03828fa"
+ },
+ {
+ "NAME": "Betaal S01E03 the Battle",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000598ac690000000000000000",
+ "KEY": "b60168fdf217678c3a1b47da3a82c44a"
+ },
+ {
+ "NAME": "Betaal S01E04 the Colonel",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000059b967d0000000000000000",
+ "KEY": "50025700cc677b192bfd8ca6b20ea38d"
+ },
+ {
+ "NAME": "Leila S01E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000530f5bd0000000000000000",
+ "KEY": "311c135d06210f515691d1accc3d6e75"
+ },
+ {
+ "NAME": "Leila S01E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056081750000000000000000",
+ "KEY": "4f973d9517e1c85f6aa0d53fd10fdf60"
+ },
+ {
+ "NAME": "Leila S01E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056324bf0000000000000000",
+ "KEY": "7aece6f077bed6b8f2eb6be7e986a46c"
+ },
+ {
+ "NAME": "Leila S01E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056269550000000000000000",
+ "KEY": "9cd620b6a4fa8cc3a845bbe555b42ff6"
+ },
+ {
+ "NAME": "Leila S01E05",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005632bad0000000000000000",
+ "KEY": "db4fdf74d82327f0dcf6bb3b358458ab"
+ },
+ {
+ "NAME": "Leila S01E06",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005633c590000000000000000",
+ "KEY": "7fb525e3eed0cb67cc8df3d729b99618"
+ },
+ {
+ "NAME": "Typewriter S01E01 Chapter 1 - Four Kids and a Dog",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056167290000000000000000",
+ "KEY": "efcf4700c99af5c76004bd10a4dee906"
+ },
+ {
+ "NAME": "Typewriter S01E02 Chapter 2 - Operation School Bell",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000562fab70000000000000000",
+ "KEY": "84b7f6dacbef3c53a1a37570506daa37"
+ },
+ {
+ "NAME": "Typewriter S01E03 Chapter 3 - The Ghost of Sultanpore",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000562f3410000000000000000",
+ "KEY": "083bbbfd09427e2c41e70d6d5da9ce29"
+ },
+ {
+ "NAME": "Typewriter S01E04 Chapter 4 - The Rise of the Fakeer",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000563e8fd0000000000000000",
+ "KEY": "790a5b7d7fe2704e170ca59b48f43fa8"
+ },
+ {
+ "NAME": "Typewriter S01E05 Chapter 5 - The Night of the Blood Moon",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000563e8c90000000000000000",
+ "KEY": "e8fee005886a3ee486bf8ec787879365"
+ },
+ {
+ "NAME": "The Package 2018",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004da4e6d0000000000000000",
+ "KEY": "26a8483720271f6a8758c3c260a0392c"
+ },
+ {
+ "NAME": "The Upshaws S01E01 Birthday B.S.",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065665f00000000000000000",
+ "KEY": "ea9af0f74d9df085fd9cf5fe70c99b90"
+ },
+ {
+ "NAME": "The Upshaws S01E02 the Hook-Up",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065674f10000000000000000",
+ "KEY": "ee3e0b57ff5e95524a02b72238e3c337"
+ },
+ {
+ "NAME": "The Upshaws S01E03 Joy Ride",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000657d5d80000000000000000",
+ "KEY": "cf38eda71e59658414587928612cb1e7"
+ },
+ {
+ "NAME": "The Upshaws S01E04 Big Plans",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065962980000000000000000",
+ "KEY": "3ec4afbdc7c54a92b12fa69c65a2175a"
+ },
+ {
+ "NAME": "The Upshaws S01E05 Ridin' Dirty",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065b3beb0000000000000000",
+ "KEY": "d2b78b31d0a46a07b61fbde54fdecca0"
+ },
+ {
+ "NAME": "The Upshaws S01E06 Last Straw",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065b90a10000000000000000",
+ "KEY": "bfa4cf7b91b5f90c6f4b361c35e57e26"
+ },
+ {
+ "NAME": "The Upshaws S01E07 Yard Sale",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000066012e10000000000000000",
+ "KEY": "6dba1f945cd1d95c04b4d567c70cd076"
+ },
+ {
+ "NAME": "The Upshaws S01E08 Night Out",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000660468c0000000000000000",
+ "KEY": "8fecc5c35620384a7419ac2bd82a5f9b"
+ },
+ {
+ "NAME": "The Upshaws S01E09 Gloves Off",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000662b0dd0000000000000000",
+ "KEY": "da7c67e6f9575f0f369f54fa32ebc8c9"
+ },
+ {
+ "NAME": "The Upshaws S01E10 the Backslide",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000662abc40000000000000000",
+ "KEY": "a443f933c6adf6e526d1212287d5a3e3"
+ },
+ {
+ "NAME": "Delhi Crime S01E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052cd3930000000000000000",
+ "KEY": "c04038a00b3f8e4847f40e0912d5d428"
+ },
+ {
+ "NAME": "Delhi Crime S01E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052cd0b50000000000000000",
+ "KEY": "ee2a19cfe90577792a23d3d2a31ac045"
+ },
+ {
+ "NAME": "Delhi Crime S01E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052ccd0f0000000000000000",
+ "KEY": "a9fa0062ecbc48bb582b0fbc873035d9"
+ },
+ {
+ "NAME": "Delhi Crime S01E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052cc0170000000000000000",
+ "KEY": "308cfbe3892bffcb5ee010ade72be304"
+ },
+ {
+ "NAME": "Delhi Crime S01E05",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052d02e70000000000000000",
+ "KEY": "e13bdc0b2f016cccf2646300bad0aeb1"
+ },
+ {
+ "NAME": "Delhi Crime S01E06",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052cfd510000000000000000",
+ "KEY": "cbabb9a13fc2425e488c12ce65b02483"
+ },
+ {
+ "NAME": "Delhi Crime S01E07",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052d0a0b0000000000000000",
+ "KEY": "9622764fa60228d7952e5fb983d595e5"
+ },
+ {
+ "NAME": "Ghoul S01E01 Out of the Smokeless Fire",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004da1ee10000000000000000",
+ "KEY": "372e1d702430eb26c3e66c048cefcd96"
+ },
+ {
+ "NAME": "Ghoul S01E02 the Nightmares Will Begin",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d889f70000000000000000",
+ "KEY": "fbb8a351b149189a05f8cdff8b3c5c3c"
+ },
+ {
+ "NAME": "Ghoul S01E03 Reveal Their Guilt, Eat Their Flesh",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d9207d0000000000000000",
+ "KEY": "c54048c0a5cef8406db5dc221db1c701"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E01 Moment of Truth",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000047160390000000000000000",
+ "KEY": "51c299cd2bff75c8bceead8d026a41b8"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E02 Code of the Streets",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000047163110000000000000000",
+ "KEY": "903e148ffed3eb8cebcef9c713123cac"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E03 Who's Gonna Take the Weight",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004717cd90000000000000000",
+ "KEY": "8ad4bf51359597c2c27160e6b7177621"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E04 Step in the Arena",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004718e210000000000000000",
+ "KEY": "87990a0c3039fb6088424f9036ddd330"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E05 Just to Get a Rep",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004719b250000000000000000",
+ "KEY": "103b9e8a512141c09ec20f47663bc793"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E06 Suckas Need Bodyguards",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000471e7010000000000000000",
+ "KEY": "a876293b4424a0865a994ebb112ff981"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E07 Manifest",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004717ed10000000000000000",
+ "KEY": "202c241feffa2b56a762e8cde825fbef"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E08 Blowin' Up the Spot",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000047180910000000000000000",
+ "KEY": "5e2ddb32df6a2cefa0365c18ee845238"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E09 Dwyck",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000047182c10000000000000000",
+ "KEY": "223ee057dfcfd0cab7eebc58f124c3ed"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E10 Take It Personal",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000471e3050000000000000000",
+ "KEY": "2cc7c8dcbb489332e75b5e1e7d0d1640"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E11 Now You're Mine",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004717f410000000000000000",
+ "KEY": "d8a5cef81e9064b76f5b928546ed515c"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E12 Soliloquy of Chaos",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000471803d0000000000000000",
+ "KEY": "5c1866d1d8e0c495b7473f057119d0a1"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S01E13 You Know My Steez",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000471b06d0000000000000000",
+ "KEY": "d04882daa7b6bae905d26adb3e9b3afb"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E01 Soul Brother #1",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c7adf10000000000000000",
+ "KEY": "0825fad5ce6324ce2a643220f95df606"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E02 Straighten It Out",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c7ab9d0000000000000000",
+ "KEY": "0f8f9d97704a68ae17f727a1e589f55d"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E03 Wig Out",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c836b70000000000000000",
+ "KEY": "fd298de76d74aee3880f82ae08d16819"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E04 I Get Physical",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c7cbb30000000000000000",
+ "KEY": "ed58ffadd2c56c1f542df3c2666780ef"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E05 All Souled Out",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c8b9430000000000000000",
+ "KEY": "a7e4daad283b4e9ccf26daf2e5939dbf"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E06 the Basement",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004ce0d8b0000000000000000",
+ "KEY": "f124d0bb7048a81a3c5735e5f27b762b"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E07 on and On",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004cdd14d0000000000000000",
+ "KEY": "85414be0d419d0b5e3db999fa2a743af"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E08 if It Ain't Rough, It Ain't Right",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004cdd0730000000000000000",
+ "KEY": "7626ef0be6a1bb7270c3021e4e31a4ee"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E09 for Pete's Sake",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004ce991f0000000000000000",
+ "KEY": "27c8d4b248184ae9dcd23184453330d1"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E10 the Main Ingredient",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d01f4d0000000000000000",
+ "KEY": "920e01bd381da1d7d5de723803f87b09"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E11 the Creator",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d128df0000000000000000",
+ "KEY": "972a71d6a6243e36d7128f9937b36c25"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E12 Can't Front on Me",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d1a4a10000000000000000",
+ "KEY": "7de0e3b7ac01c7ceb5f11d4409e121f7"
+ },
+ {
+ "NAME": "Marvel's Luke Cage S02E13 They Reminisce Over You",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d1c29d0000000000000000",
+ "KEY": "518f7a2c25541b18737a97304ffe9854"
+ },
+ {
+ "NAME": "Shadow and Bone S01E01 a Searing Burst of Light",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ff299b0000000000000000",
+ "KEY": "9cc5b407152431b151a5b127a01338d0"
+ },
+ {
+ "NAME": "Shadow and Bone S01E02 Were All Someones Monster",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000063aa2af0000000000000000",
+ "KEY": "b84ab834fc67bf1c6b95621190b9b579"
+ },
+ {
+ "NAME": "Shadow and Bone S01E03 the Making at the Heart of the World",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000063a297e0000000000000000",
+ "KEY": "73b3c1bf5c8c3694e41e87373aab25b2"
+ },
+ {
+ "NAME": "Shadow and Bone S01E04 Otkazatsya",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000063a289a0000000000000000",
+ "KEY": "3833de9365643527ad9dbf743f36e156"
+ },
+ {
+ "NAME": "Shadow and Bone S01E05 Show Me Who You Are",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000064780420000000000000000",
+ "KEY": "e44f142ec33749ecf88078b1b7e4cc1e"
+ },
+ {
+ "NAME": "Shadow and Bone S01E06 the Heart Is an Arrow",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000064778130000000000000000",
+ "KEY": "f10e7c1fc87645227f59762e662a0633"
+ },
+ {
+ "NAME": "Shadow and Bone S01E07 the Unsea",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000656959f0000000000000000",
+ "KEY": "8bb528f70c1ce8a7f6bd0f5cf6a34873"
+ },
+ {
+ "NAME": "Shadow and Bone S01E08 No Mourners",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000656ab950000000000000000",
+ "KEY": "9634489cc6c7a995edb13fc04a5a7dd5"
+ },
+ {
+ "NAME": "Shadow and Bone S01E01 a Searing Burst of Light",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ff29a10000000000000000",
+ "KEY": "57f6d5e688c551ce7aca8e367b6f9e17"
+ },
+ {
+ "NAME": "Shadow and Bone S01E01 a Searing Burst of Light",
+ "PSSH": null,
+ "ID": 2,
+ "KID": "0000000005ff299d0000000000000000",
+ "KEY": "a902ff0cfae93cd2c0421ef76f16ecd2"
+ },
+ {
+ "NAME": "Oxygen 2021",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000066f940a0000000000000000",
+ "KEY": "6b44b775ab7291e69e156c1b7dea7a55"
+ },
+ {
+ "NAME": "Bheeshma 2020",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005a8d5210000000000000000",
+ "KEY": "7de72d0e38598c895f070e979d94a5e7"
+ },
+ {
+ "NAME": "The Kissing Booth 2018",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d235e30000000000000000",
+ "KEY": "79e17ba8ff3ce927820c4b93222031b2"
+ },
+ {
+ "NAME": "Mismatched S01E01 When Dimple Met Rishi",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ecc5b20000000000000000",
+ "KEY": "50f65f2eab18237a03ef6f3dc7048c7a"
+ },
+ {
+ "NAME": "Mismatched S01E02 Hot Summer, Cold Vibes",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005ef4c740000000000000000",
+ "KEY": "e778291b89097de50dfcf1861c9b6329"
+ },
+ {
+ "NAME": "Mismatched S01E03 Message Deleted",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005edc7000000000000000000",
+ "KEY": "c894c09a2a8ba658cd9f16a4ab39b0f9"
+ },
+ {
+ "NAME": "Mismatched S01E04 Making Moves",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005eee9b20000000000000000",
+ "KEY": "99ed26764f88a0f1fad2721f8a815368"
+ },
+ {
+ "NAME": "Mismatched S01E05 It's Not a Date",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005efc6900000000000000000",
+ "KEY": "e2fa513fc76dadfe98b65519148e335c"
+ },
+ {
+ "NAME": "Mismatched S01E06 Games We Play",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005f1277e0000000000000000",
+ "KEY": "886d4fdb772bc7639bd09123ce1a3f26"
+ },
+ {
+ "NAME": "Sex Education S01E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051e13310000000000000000",
+ "KEY": "cc2f7080c18bee8e888f6c3acf28b2d3"
+ },
+ {
+ "NAME": "Sex Education S01E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051f74410000000000000000",
+ "KEY": "acd600baf6ab6de737fd27032fa2addf"
+ },
+ {
+ "NAME": "Sex Education S01E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051e31930000000000000000",
+ "KEY": "c46a89da136c9ae013fcf3059f592203"
+ },
+ {
+ "NAME": "Sex Education S01E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000051f82810000000000000000",
+ "KEY": "8264fe1dc9d59571a99f5cc6e41827a1"
+ },
+ {
+ "NAME": "Sex Education S01E05",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005217fcb0000000000000000",
+ "KEY": "562c97c188264876cd04fbc7a4801675"
+ },
+ {
+ "NAME": "Sex Education S01E06",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005227e110000000000000000",
+ "KEY": "fb77227ad054bc943032704db0f0300b"
+ },
+ {
+ "NAME": "Sex Education S01E07",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052280dd0000000000000000",
+ "KEY": "654d837b29a9ba132f79e48bddec54e0"
+ },
+ {
+ "NAME": "Sex Education S01E08",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000521b5c50000000000000000",
+ "KEY": "8ebb188ccb3f54b2d6a65fdafc5d2960"
+ },
+ {
+ "NAME": "Sex Education S02E01",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058d88210000000000000000",
+ "KEY": "7a084c57a31aa0a9c877e3d7f8a9aa24"
+ },
+ {
+ "NAME": "Sex Education S02E02",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000585b9c10000000000000000",
+ "KEY": "8ee22bfa4a8ff3aadb89a81209688d85"
+ },
+ {
+ "NAME": "Sex Education S02E03",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000058652a90000000000000000",
+ "KEY": "bdc621f6b72377798b229618dfe2c725"
+ },
+ {
+ "NAME": "Sex Education S02E04",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000674248f0000000000000000",
+ "KEY": "b217beac971b2c45e79a3a3331014900"
+ },
+ {
+ "NAME": "13 Reasons Why S01E01 Tape 1, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000521e0bd0000000000000000",
+ "KEY": "4284f0767cd906191611cdd77c104cc9"
+ },
+ {
+ "NAME": "13 Reasons Why S01E02 Tape 1, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000521e14f0000000000000000",
+ "KEY": "024a460e8b8d94dc9d5ee9a514f5364c"
+ },
+ {
+ "NAME": "13 Reasons Why S01E03 Tape 2, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005224de50000000000000000",
+ "KEY": "921452c9081016f2f2a3bd931fdadcba"
+ },
+ {
+ "NAME": "13 Reasons Why S01E04 Tape 2, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052206250000000000000000",
+ "KEY": "fd9f3d71cd094713dfeaf4b3c47c224a"
+ },
+ {
+ "NAME": "13 Reasons Why S01E05 Tape 3, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052208f70000000000000000",
+ "KEY": "288248911817ef30641afdf537a1ca62"
+ },
+ {
+ "NAME": "13 Reasons Why S01E06 Tape 3, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005224fad0000000000000000",
+ "KEY": "f4dffc1da27274a7447161348e4697a9"
+ },
+ {
+ "NAME": "13 Reasons Why S01E07 Tape 4, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000522b8d70000000000000000",
+ "KEY": "b6e6675d22f99def1eb7dd2ffb8cf5a1"
+ },
+ {
+ "NAME": "13 Reasons Why S01E08 Tape 4, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000522c1f50000000000000000",
+ "KEY": "0d5c9e24cdba4ef08afb35e0a432b520"
+ },
+ {
+ "NAME": "13 Reasons Why S01E09 Tape 5, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000522e4ab0000000000000000",
+ "KEY": "743e0dc80b9bdadd128a989a3883e38a"
+ },
+ {
+ "NAME": "13 Reasons Why S01E10 Tape 5, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000523136f0000000000000000",
+ "KEY": "c132453bd06d357462961ba79fb77cb1"
+ },
+ {
+ "NAME": "13 Reasons Why S01E11 Tape 6, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005239e0b0000000000000000",
+ "KEY": "567865b45c19ea9b865f14309644c087"
+ },
+ {
+ "NAME": "13 Reasons Why S01E12 Tape 6, Side B",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005239f4d0000000000000000",
+ "KEY": "f258c550b9c9ae1dc8f367fdfcaea37c"
+ },
+ {
+ "NAME": "13 Reasons Why S01E13 Tape 7, Side A",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005697ec10000000000000000",
+ "KEY": "e0d8c2365f86c269975b0369846672d9"
+ },
+ {
+ "NAME": "13 Reasons Why S02E01 the First Polaroid",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005739b650000000000000000",
+ "KEY": "c8c0672fa7d4fadcb19d223a94319975"
+ },
+ {
+ "NAME": "13 Reasons Why S02E02 Two Girls Kissing",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bc610000000000000000",
+ "KEY": "a4d9df3b7a1a366fff644e1fe40e0ab0"
+ },
+ {
+ "NAME": "13 Reasons Why S02E03 the Drunk Slut",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bcf90000000000000000",
+ "KEY": "a53adcaf896b11b87e4bcd8a9942c8ca"
+ },
+ {
+ "NAME": "13 Reasons Why S02E04 the Second Polaroid",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573be210000000000000000",
+ "KEY": "ad9afb0cebedd27578b38f800874e92e"
+ },
+ {
+ "NAME": "13 Reasons Why S02E05 the Chalk Machine",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573c01d0000000000000000",
+ "KEY": "be35c431a1bc45cd846307388848cc59"
+ },
+ {
+ "NAME": "13 Reasons Why S02E06 the Smile at the End of the Dock",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bd7d0000000000000000",
+ "KEY": "53875185d5bb9ef2d7f49ea92eb05ea1"
+ },
+ {
+ "NAME": "13 Reasons Why S02E07 the Third Polaroid",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bf090000000000000000",
+ "KEY": "39576b37879e527ea0c3ef046f49aa97"
+ },
+ {
+ "NAME": "13 Reasons Why S02E08 the Little Girl",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bc950000000000000000",
+ "KEY": "b8d7b27ad4e75e67f394d2b00f6f6515"
+ },
+ {
+ "NAME": "13 Reasons Why S02E09 the Missing Page",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bf850000000000000000",
+ "KEY": "f6086de2a3843635c3b9909fb760fdce"
+ },
+ {
+ "NAME": "13 Reasons Why S02E10 Smile, Bitches",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bfe50000000000000000",
+ "KEY": "3a9f4c2882215d4eb71ea63a2650f30a"
+ },
+ {
+ "NAME": "13 Reasons Why S02E11 Bryce and Chloe",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573c0850000000000000000",
+ "KEY": "76b2aa52c710edd4505b69dd875eb03e"
+ },
+ {
+ "NAME": "13 Reasons Why S02E12 the Box of Polaroids",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bdb10000000000000000",
+ "KEY": "31e65aeabf75dd2036e446c7d210a962"
+ },
+ {
+ "NAME": "13 Reasons Why S02E13 Bye",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000573bf3d0000000000000000",
+ "KEY": "d1883e0fad7feb482cc7b444125bf24a"
+ },
+ {
+ "NAME": "13 Reasons Why S03E01 Yeah. I'm the New Girl",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000566adc50000000000000000",
+ "KEY": "281fe40c335afafdbb2df07b081ad469"
+ },
+ {
+ "NAME": "13 Reasons Why S03E02 if You're Breathing, You're a Liar",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005623a950000000000000000",
+ "KEY": "5a50f6e6049acb01db7b7bb1acc83149"
+ },
+ {
+ "NAME": "13 Reasons Why S03E03 the Good Person Is Indistinguishable From the Bad",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005623c2d0000000000000000",
+ "KEY": "350bab0431560472d818651211b3e7bc"
+ },
+ {
+ "NAME": "13 Reasons Why S03E04 Angry, Young and Man",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000564ff590000000000000000",
+ "KEY": "6d08ccb4f07edfdff8e5111678324d02"
+ },
+ {
+ "NAME": "13 Reasons Why S03E05 Nobody's Clean",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056690450000000000000000",
+ "KEY": "962753036c22e5e191bd28215397daf6"
+ },
+ {
+ "NAME": "13 Reasons Why S03E06 You Can Tell the Heart of a Man by How He Grieves",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000566b15d0000000000000000",
+ "KEY": "2b1312ba79f90c3c5ca3af46d5a6dd71"
+ },
+ {
+ "NAME": "13 Reasons Why S03E07 There Are a Number of Problems With Clay Jensen",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056564a50000000000000000",
+ "KEY": "aa659e8837e0a7f1c2b665c57d2a66a2"
+ },
+ {
+ "NAME": "13 Reasons Why S03E08 in High School, Even on a Good Day, It's Hard to Tell Who's on Your Side",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000566ad350000000000000000",
+ "KEY": "0c55df1b3a26bab8ac1569e2175a46f9"
+ },
+ {
+ "NAME": "13 Reasons Why S03E09 Always Waiting for the Next Bad News",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056781810000000000000000",
+ "KEY": "ec2f607a542cb945ea156d9b31c04f59"
+ },
+ {
+ "NAME": "13 Reasons Why S03E10 the World Closing In",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056784710000000000000000",
+ "KEY": "52cbc209d0bf7484348e738b17055da9"
+ },
+ {
+ "NAME": "13 Reasons Why S03E11 There Are a Few Things I Haven't Told You",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000056760950000000000000000",
+ "KEY": "07c7d63a3ff551e97cc2eaabd317a277"
+ },
+ {
+ "NAME": "13 Reasons Why S03E12 and Then the Hurricane Hit",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000567c7590000000000000000",
+ "KEY": "527316da7083116b7dd59ed248690789"
+ },
+ {
+ "NAME": "13 Reasons Why S03E13 Let the Dead Bury the Dead",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000568db310000000000000000",
+ "KEY": "1766b0b09f52322db900c42f00fabe51"
+ },
+ {
+ "NAME": "Brij Mohan Amar Rahe 2018",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004d448190000000000000000",
+ "KEY": "ef7aa9b166d2fa73a61144e599a7b9d9"
+ },
+ {
+ "NAME": "The White Tiger 2021",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005fd8e4c0000000000000000",
+ "KEY": "46b25731b3a9ffdf1dd96a7eb00ac759"
+ },
+ {
+ "NAME": "Extraction 2020",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005a2f9190000000000000000",
+ "KEY": "d5b876682f715f230c26c9c1c665062e"
+ },
+ {
+ "NAME": "Triple Frontier 2019",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052a40770000000000000000",
+ "KEY": "59202fa9b0e3a62142c1cfe94551ed6c"
+ },
+ {
+ "NAME": "Sardar Ka Grandson 2021",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000068672b20000000000000000",
+ "KEY": "c5f38ae7b29398eca2ad3130b197133e"
+ },
+ {
+ "NAME": "Half Girlfriend 2017",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004c6734d0000000000000000",
+ "KEY": "161b820fc8df4bf6de7a84634b8958ac"
+ },
+ {
+ "NAME": "Special S01E01 Chapter One - Cerebral LOLzy",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052ba7050000000000000000",
+ "KEY": "9aaad152f18543d714fd5e4e430a8d07"
+ },
+ {
+ "NAME": "Special S01E02 Chapter Two - The Deep End",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c0e6f0000000000000000",
+ "KEY": "aab17e65d4955e53f9ee392bf6104f1e"
+ },
+ {
+ "NAME": "Special S01E03 Chapter Three - Free Scones",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052bbf630000000000000000",
+ "KEY": "5df4c2eafba846dbe7624c3612ed2ff4"
+ },
+ {
+ "NAME": "Special S01E04 Chapter Four - Housechilling Party",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052bbb990000000000000000",
+ "KEY": "3a0aef3bd3ab030d7e575e072fd36be1"
+ },
+ {
+ "NAME": "Special S01E05 Chapter Five - Vagina Momologues",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052bbea70000000000000000",
+ "KEY": "dd4abd602c317070db08ee6b30534fea"
+ },
+ {
+ "NAME": "Special S01E06 Chapter Six - Straight Potential",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c09c30000000000000000",
+ "KEY": "358b05e736e14c6d80ac6e8e6d92bdfa"
+ },
+ {
+ "NAME": "Special S01E07 Chapter Seven - Blind Deaf Date",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c51f70000000000000000",
+ "KEY": "fe535cd1f6eb98d9f2da3298236eb9c0"
+ },
+ {
+ "NAME": "Special S01E08 Chapter Eight - Gay Gardens",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052c370b0000000000000000",
+ "KEY": "0faf1817ad38ca4052090ca7ff9e7edc"
+ },
+ {
+ "NAME": "Special S02E01 One Day Stand",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006582dc40000000000000000",
+ "KEY": "997f38f9d395b727c3e4ac37b83c71b0"
+ },
+ {
+ "NAME": "Special S02E02 I Don't Like It Like This",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065894e20000000000000000",
+ "KEY": "d89c7d808015731e79e8f3022485d4f6"
+ },
+ {
+ "NAME": "Special S02E03 That's the Way the Boys Are",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000658d05d0000000000000000",
+ "KEY": "2a91248bb9ed3c01f7ea8ce5be8aaeae"
+ },
+ {
+ "NAME": "Special S02E04 Death by a Thousand Cold Cuts",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000065a2b7c0000000000000000",
+ "KEY": "e3506cd430081b86f8af62261fd6dd1d"
+ },
+ {
+ "NAME": "Special S02E05 Ryan Joins the Crips",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006668dfc0000000000000000",
+ "KEY": "08d8de3de717312cf3145b2f2f19ffb5"
+ },
+ {
+ "NAME": "Special S02E06 Prom Queens",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000066952740000000000000000",
+ "KEY": "b4683ee4583dc0217341eb1a72e7acb9"
+ },
+ {
+ "NAME": "Special S02E07 Why Is No One Ready",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006669f840000000000000000",
+ "KEY": "7c301edf76d01e9667c023c5d17e6b56"
+ },
+ {
+ "NAME": "Special S02E08 Here's Where the Story Ends",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006665ed50000000000000000",
+ "KEY": "6c0964088fae4f93b7457e2484e361d2"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E01 Mumbai! Mumbai!",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000004e066c10000000000000000",
+ "KEY": "d32bd083f226c2be61ce3db803d9441c"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E02 Superstars vs. Superstars",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000522163b0000000000000000",
+ "KEY": "64d9911432896b08b3443e0b9867f653"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E03 Fearless Cricket",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052258290000000000000000",
+ "KEY": "b063ab9299dcf1df839bd2ceac8b1f47"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E04 Bad to Worse",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000005231d390000000000000000",
+ "KEY": "62ba451dc3da8bd488371ce50e92836e"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E05 Grudge Match",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000522bd290000000000000000",
+ "KEY": "32430cc307888c882b0c2d2ee6ebb2f0"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E06 Put Up a Fight",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000523567d0000000000000000",
+ "KEY": "d3a4ac1446020e760df151324c5f8ba9"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E07 Make or Break",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000052383590000000000000000",
+ "KEY": "da810d50b37969706455ea909b76985b"
+ },
+ {
+ "NAME": "Cricket Fever - Mumbai Indians S01E08 We Live to See Another Day",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000524050b0000000000000000",
+ "KEY": "7fa049c9466f663730dc5cbebfb706ab"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E01 View From the Top",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000641ffc80000000000000000",
+ "KEY": "fa69cadab2a385263c837d35f81c4819"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E02 Safe Harbor",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006395eae0000000000000000",
+ "KEY": "7769868385ef5037dccd40776a6075eb"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E03 Casa De Kenji",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000642cc570000000000000000",
+ "KEY": "f1dac4009d2b855cd53bf665e0b087db"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E04 Clever Girl",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000652b5350000000000000000",
+ "KEY": "0c68bc646cb92dadaa9a8ba812750d24"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E05 Eye of the Storm",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000652cece0000000000000000",
+ "KEY": "5ad0cc003d43758a22475e37178db7e8"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E06 the Long Run",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "0000000006578af20000000000000000",
+ "KEY": "21582cffb7ddb18a2c800a3f151de663"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E07 a Shock to the System",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000660d1e60000000000000000",
+ "KEY": "e0a7daf9ddb67007e9669e80a917a749"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E08 Escape From Isla Nublar",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "000000000665ed9e0000000000000000",
+ "KEY": "3ed244a48f044258939d3b67daf2b83a"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E09 Whatever It Takes",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000066bda430000000000000000",
+ "KEY": "12c202acf27651fa24458dd061b22261"
+ },
+ {
+ "NAME": "Jurassic World Camp Cretaceous S03E10 Stay on Mission",
+ "PSSH": null,
+ "ID": 1,
+ "KID": "00000000066d78c30000000000000000",
+ "KEY": "92485b3b687528b3cc6b8976bf22335a"
+ }
+]
\ No newline at end of file
diff --git a/configs/Tokens/netflix_token.json b/configs/Tokens/netflix_token.json
new file mode 100644
index 0000000..f6800e4
--- /dev/null
+++ b/configs/Tokens/netflix_token.json
@@ -0,0 +1,11 @@
+{
+ "mastertoken": {
+ "tokendata": "eyJzZXNzaW9uZGF0YSI6IkJRQ0FBQUVCRUF6SENReUt4ZklvZ3dQZ2FvMndhNGVCd0xTckZoK29QTGJHL20vWU9oQjQyZHloUUYxTmxkZm5NamNSTy96NUVKdnZJOGp4MllFYytWZk0rSlJ0RURMZFA1VTcyUWx5bS9RbnJXTmFuYlEyM3Fpa2YvbHRGYWFqbXlJU3NzdnpRU2VvL3hPL1p0TFZieGR6cWhYMG9DdmtLWlk1RFRXN3Y2aVh3dERZZlJhR0JRYXVLZjBpdERsY0ZWVVN1alExR2xSVklGZk42YVE3WEFKd3JFTFIvTlVqQmJmYnl6K2FrN1ZZVEhBZnFScHQ4WjBXZk0xa0VySjVJYjgvcE9iUU9FZHdPTlY3YW9lSjRMT2hNTnMycE9sZ3MwNkd6eUZ1Nk13RytPSHFqMURaVzdNL3hUOWdkM01ncGdKejFkY0c4ODlTU0hUdVVSc2JST0hmVy80akU2SlhySTUrSjZLT0UyeGRBdVVoNjY3TnlNMmtoOURBM25lOFBLaHRrTjlmdG1HdEszZ2l1S01xTERmdlQ3RDVGUGVaU1RKY25wenFjMk9YWW12RHBoY0JmWFVXZEhTUWRUbUtjU01zL1o4TUt5UVB3emhLMzFVVldWWllUbEIyODMzWG1WNDArSXZrK1gzdUN1MGlMUjJaVkRXYzh2T1V4dEFSWi9vM3ZEOC9heUtQMTh3UmI1WndzNkl2R0dRSkhPU2MwTHB6RS8zUmdxUXU2Z2FYVU5tWjdlMTEzWEVMdFZZQktzRmFZMktJQVViNFVvT1F1VnVkVnNMNTExUk5OQzJZYnA4Q1hvWlZlY2tNaU9ydDZNS3hNUFE9IiwicmVuZXdhbHdpbmRvdyI6MTYyNDA4NjI2Miwic2VyaWFsbnVtYmVyIjo1MDkzNTMyMzUxNTM2MjQsImV4cGlyYXRpb24iOjE2MjUyMDk0NjIsInNlcXVlbmNlbnVtYmVyIjoxfQ==",
+ "signature": "AQEAgQABASD1vbC9zQfnxwNr/7nLFkWyxRW7Z52QGWLEGk97hYBSYtNcJnM="
+ },
+ "sequence_number": 1,
+ "encryption_key": "YAeCFbGwVf/aukgoxE3tSg==",
+ "sign_key": "75QOynO/ysXBPimd9vCBSCI5/JQ7VCxAe4Ev/6hLJc4=",
+ "RSA_KEY": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAvMQdqQ7cG30cZdxYRamhySuvTWvUtsZp6EVmV4U1msqzceb5\nevK1D8rac87mdUUL9e5syaKTarVJe9bzl5lPnugSDPUEWuXS3vAynJA9pzUHEJdN\nZVkv43IdyXI+eBV+aJ4f+DB06MYvUxyDgPyfvCIKJPZ1Pj0ZHN2rhpK2bx2xnZh4\nBAoSIqlSYeChWB9O55sDYkCooAXd9zNJ7EBerqNlQr5sImY0izD1sPdfJiEfZLKj\n/+xr0PPrdTKeQmcR/r30K+4lVD1tYVPSy4MZsDVu3KgHtMBDPvx+DyaXdtdAdxpC\nkR6uqw+Q0H7KoedzdmlOMyvTVHLhgbVtxDEkuwIDAQABAoH/P6ydjoIypF12y3oE\nPDElo+f3dA14Dj/4geVauSLTCvifj1CUQpqUFeCyU9okZyhW+UvOsNqiOlyJjiwU\n9wYStIekZdNI1lhddsXRhorfSW8VoGpQf6WeWH3LK1o9I5+H0uu1eeoYXEvIP5Nm\n+iPqlKykv1+MwZsk1TTHyFLu1Afd7hG80c2UHHvvGioD0YregsrKXcLXi5OEkAS+\n5SiwKpbelwLcqK58SVN+ajnRvz6na6Fm4wjWq4wynrtX0RPD2P8+aw0X805o9fsP\nU3zRx4Dy3huazIBnadTqAEGbF73OWSA+Tow+LMRvUSqdWZMiX2ikLRwkTKFaaq+N\nObPhAoGBANqo5TbysRdRTerXxXqNlewEiYNH3Vn5pz4t1W/iRIT8BDKAD2FHcZ25\n4bfGcRmQ8wO3gcPPgVyXGf100RU0IR6lVjrcJT3w29lPs7AOhElDWMBC0fcA5JSd\nkWFMDUSobaXxZ8HYQJG6eQTEuQebm2PffppZUnVKTY2rhDaOCpmLAoGBAN0AXWiC\ngA8/6P48EYc8sQq/7KZ1g2Urxqxhc/wNU6FdKs582HMEeRYBA2PJsamYh0n/Wp5k\nfFJfb7HU4yCISzT7iHHjhLuuUR0UMmMkwY/x4YE5Ri1hlrS3SdGdfV6ufqe9jiGg\nboJ1rI0ieJmdyVWmhTK9CXuF/gB/6ik55CeRAoGBAMOr9orIfW9HY7mvY1n7T9lI\naiJf8hZtUZtT+rdHvVdgCwWCEcFU5LhnujTx0Q425zFBS0+F5taLpUdp/RzDbIv3\nGwZLMMyQOLzsFPmM1BaXvNk4MpqeYu8XXhy6qPjy3ERulhIiyg1e2KNKw+Wp+1FR\nlALdweuSFXqcrREA5T1nAoGBAIYoeou+7M5VFbN/84QNK8xCxf4myCTadjie0DHq\nRSJn1FyVHTB1PqxE4THqdpdlqHsbMH+GsJGwrbVebqKJGl6Hc0TvwNvN7h+g6xWU\ncoxXYXV4t0lFPJ9nxMAiwsB/XROm1mlDYtJ/bMggbOWUC2ybMbCjYOZDaPYUsKlm\nI0KBAoGAC0EsDBZZ6/ymQgenaNbTErN04i6Zii0U9XZ4Do72cRQTYsRELKqXyNwF\nwy//GzwqOXPFTaaY/RL0ISaV3xWU2MkI2Scmr+oGyEEKeE1uul9ZCo9l/2Jin2X9\n6gsH4QryiP+we7L1p2e1sdYmY3QWufuWjYI4e6iJ/vJX+WHM95g=\n-----END RSA PRIVATE KEY-----",
+ "expiration": 1625209462
+}
\ No newline at end of file
diff --git a/configs/__init__.py b/configs/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/configs/__pycache__/__init__.cpython-36.pyc b/configs/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..7599149
Binary files /dev/null and b/configs/__pycache__/__init__.cpython-36.pyc differ
diff --git a/configs/__pycache__/__init__.cpython-39.pyc b/configs/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..6f27701
Binary files /dev/null and b/configs/__pycache__/__init__.cpython-39.pyc differ
diff --git a/configs/__pycache__/config.cpython-36.pyc b/configs/__pycache__/config.cpython-36.pyc
new file mode 100644
index 0000000..766efc7
Binary files /dev/null and b/configs/__pycache__/config.cpython-36.pyc differ
diff --git a/configs/__pycache__/config.cpython-39.pyc b/configs/__pycache__/config.cpython-39.pyc
new file mode 100644
index 0000000..cb4822e
Binary files /dev/null and b/configs/__pycache__/config.cpython-39.pyc differ
diff --git a/configs/config.py b/configs/config.py
new file mode 100644
index 0000000..ede50f3
--- /dev/null
+++ b/configs/config.py
@@ -0,0 +1,163 @@
+import sys, os, random, string, platform
+from os.path import dirname
+from os.path import join
+from pywidevine.cdm import cdm, deviceconfig
+
+dirPath = dirname(dirname(__file__)).replace("\\", "/")
+
+class utils:
+ def __init__(self):
+ self.dir = dirPath
+
+ def random_hex(self, length: int) -> str:
+ """return {length} of random string"""
+ return "".join(random.choice("0123456789ABCDEF") for _ in range(length))
+
+utils_ = utils()
+
+#####################################(DEVICES)#####################################
+
+devices_dict = {
+ "android_general": deviceconfig.device_android_general,
+}
+
+DEVICES = {
+ "NETFLIX-MANIFEST": devices_dict["android_general"],
+ "NETFLIX-LICENSE": devices_dict["android_general"],
+}
+
+#####################################(MUXER)#####################################
+
+MUXER = {
+ "muxer_file": f"{dirPath}/bin/muxer.json",
+ "mkv_folder": None,
+ "DEFAULT": False, # to use the normal renaming. EX: Stranger Things S01E01 [1080p].mkv
+ "AUDIO": "hin", # default audio language.
+ "SUB": "None", # default subtitle language. EX: "eng" or "spa"
+ "GROUP": "Tandav", # to change the group name!. it's also possible to use this "--gr LOL", on the ripping commands.
+ "noTitle": False, # this will remove titles from the episodes EX: (The Witcher S01E01). insstead of (The Witcher S01E01 The End's Beginning).
+ "scheme": "p2p", # add/change any needed scheme naming. it's also possible to use this "--muxscheme repack", on the ripping commands.
+ "schemeslist": {
+ "p2p": "{t}.{r}.{s}.WEB-DL.{ac}.{vc}-{gr}",
+ "test": "{t}.{r}.{s}.WEB-DL-{gr}",
+ },
+ "EXTRAS": [], # extra mkvmerge.exe commands.
+ "FPS24": [],
+}
+
+#####################################(PATHS)#####################################
+
+PATHS = {
+ "DL_FOLDER": "E:/#rips", #
+ "DIR_PATH": f"{dirPath}",
+ "BINARY_PATH": f"{dirPath}/bin",
+ "COOKIES_PATH": f"{dirPath}/configs/Cookies",
+ "KEYS_PATH": f"{dirPath}/configs/KEYS",
+ "TOKENS_PATH": f"{dirPath}/configs/Tokens",
+ "JSON_PATH": f"{dirPath}/json",
+ "LOGA_PATH": f"{dirPath}/bin/tools/aria2c",
+}
+
+ARIA2C = {
+ "enable_logging": False, # True
+}
+
+SETTINGS = {
+ "skip_video_demux": [],
+}
+
+#####################################(VPN)#####################################
+
+VPN = {
+ "proxies": None, # "http://151.253.165.70:8080",
+ "nordvpn": {
+ "port": "80",
+ "email": "xxx",
+ "passwd": "xxx",
+ "http": "http://{email}:{passwd}@{ip}:{port}",
+ },
+ "private": {
+ "port": "8080",
+ "email": "abdalhmohmd8@gmail.com",
+ "passwd": "123456",
+ "http": "http://{email}:{passwd}@{ip}:{port}",
+ },
+}
+
+#####################################(BIN)#####################################
+
+BIN = {
+ "mp4decrypt_moded": f"{dirPath}/bin/tools/mp4decrypt.exe",
+ "mp4dump": f"{dirPath}/bin/tools/mp4dump.exe",
+ "ffmpeg": f"{dirPath}/bin/tools/ffmpeg.exe",
+ "ffprobe": f"{dirPath}/bin/tools/ffprobe.exe",
+ "MediaInfo": f"{dirPath}/bin/tools/MediaInfo.exe",
+ "mkvmerge": f"{dirPath}/bin/tools/mkvmerge.exe",
+ "aria2c": f"{dirPath}/bin/tools/aria2c.exe",
+ }
+
+#####################################(Config)#####################################
+
+Config = {}
+
+Config["NETFLIX"] = {
+ "cookies_file": f"{dirPath}/configs/Cookies/cookies_nf.txt",
+ "cookies_txt": f"{dirPath}/configs/Cookies/cookies.txt",
+ "keys_file": f"{dirPath}/configs/KEYS/netflix.keys",
+ "token_file": f"{dirPath}/configs/Tokens/netflix_token.json",
+ "email": "Cfklop@max07.club",
+ "password": "1111",
+ "manifest_language": "en-US",
+ "metada_language": "en",
+ "manifestEsn": "NFCDIE-03-{}".format(utils().random_hex(30)),
+ "androidEsn": "NFANDROID1-PRV-P-GOOGLEPIXEL=4=XL-8162-" + utils_.random_hex(64),
+}
+
+#####################################(DIRS & FILES)##############################
+
+def make_dirs():
+ FILES = []
+
+ DIRS = [
+ f"{dirPath}/configs/Cookies",
+ f"{dirPath}/configs/Tokens",
+ f"{dirPath}/bin/tools/aria2c",
+ ]
+
+ for dirs in DIRS:
+ if not os.path.exists(dirs):
+ os.makedirs(dirs)
+
+ for files in FILES:
+ if not os.path.isfile(files):
+ with open(files, "w") as f:
+ f.write("\n")
+
+make_dirs()
+
+#####################################(tool)#####################################
+
+class tool:
+ def config(self, service):
+ return Config[service]
+
+ def bin(self):
+ return BIN
+
+ def vpn(self):
+ return VPN
+
+ def paths(self):
+ return PATHS
+
+ def muxer(self):
+ return MUXER
+
+ def devices(self):
+ return DEVICES
+
+ def aria2c(self):
+ return ARIA2C
+
+ def video_settings(self):
+ return SETTINGS
diff --git a/helpers/Muxer.py b/helpers/Muxer.py
new file mode 100644
index 0000000..9c288c5
--- /dev/null
+++ b/helpers/Muxer.py
@@ -0,0 +1,629 @@
+
+import re, os, sys, subprocess, contextlib, json, glob
+from configs.config import tool
+from helpers.ripprocess import ripprocess
+from pymediainfo import MediaInfo
+import logging
+
+
+class Muxer(object):
+ def __init__(self, **kwargs):
+ self.logger = logging.getLogger(__name__)
+ self.CurrentName_Original = kwargs.get("CurrentName", None)
+ self.CurrentName = kwargs.get("CurrentName", None)
+ self.SeasonFolder = kwargs.get("SeasonFolder", None)
+ self.CurrentHeigh = kwargs.get("CurrentHeigh", None)
+ self.CurrentWidth = kwargs.get("CurrentWidth", None)
+ self.source_tag = kwargs.get("Source", None)
+ self.AudioProfile = self.get_audio_id() # kwargs.get("AudioProfile", None)
+ self.VideoProfile = self.get_video_id() # kwargs.get("VideoProfile", None)
+ self.mkvmerge = tool().bin()["mkvmerge"]
+ self.merge = []
+ self.muxer_settings = tool().muxer()
+
+ ##############################################################################
+ self.packer = kwargs.get("group", None)
+ self.extra_output_folder = self.packer["EXTRA_FOLDER"]
+ self.Group = (
+ self.packer["GROUP"]
+ if self.packer["GROUP"]
+ else self.muxer_settings["GROUP"]
+ )
+ self.muxer_scheme = (
+ self.packer["SCHEME"]
+ if self.packer["SCHEME"]
+ else self.muxer_settings["scheme"]
+ )
+
+ self.scheme = self.muxer_settings["schemeslist"][self.muxer_scheme]
+ self.Extras = self.muxer_settings["EXTRAS"]
+ self.fps24 = True if self.source_tag in self.muxer_settings["FPS24"] else False
+ self.default_mux = True if self.muxer_settings["DEFAULT"] else False
+ self.PrepareMuxer()
+
+ def is_extra_folder(self):
+ extra_folder = None
+ if self.extra_output_folder:
+ if not os.path.isabs(self.extra_output_folder):
+ raise ValueError("Error you should provide full path dir: {}.".format(self.extra_output_folder))
+ if not os.path.exists(self.extra_output_folder):
+ try:
+ os.makedirs(self.extra_output_folder)
+ except Exception as e:
+ raise ValueError("Error when create folder dir [{}]: {}.".format(e, self.extra_output_folder))
+ extra_folder = self.extra_output_folder
+ return extra_folder
+
+ if self.muxer_settings["mkv_folder"]:
+ if not os.path.isabs(self.muxer_settings["mkv_folder"]):
+ raise ValueError("Error you should provide full path dir: {}.".format(self.muxer_settings["mkv_folder"]))
+ if not os.path.exists(self.muxer_settings["mkv_folder"]):
+ try:
+ os.makedirs(self.muxer_settings["mkv_folder"])
+ except Exception as e:
+ raise ValueError("Error when create folder dir [{}]: {}.".format(e, self.muxer_settings["mkv_folder"]))
+ extra_folder = self.muxer_settings["mkv_folder"]
+ return extra_folder
+
+ return extra_folder
+
+ def PrepareMuxer(self):
+ if self.muxer_settings["noTitle"]:
+ self.CurrentName = self.noTitle()
+
+ extra_folder = self.is_extra_folder()
+
+ if extra_folder:
+ self.SeasonFolder = extra_folder
+ else:
+ if not self.default_mux:
+ if self.SeasonFolder:
+ self.SeasonFolder = self.setFolder()
+
+ return
+
+ def SortFilesBySize(self):
+ file_list = []
+ audio_tracks = (
+ glob.glob(f"{self.CurrentName_Original}*.eac3")
+ + glob.glob(f"{self.CurrentName_Original}*.ac3")
+ + glob.glob(f"{self.CurrentName_Original}*.aac")
+ + glob.glob(f"{self.CurrentName_Original}*.m4a")
+ + glob.glob(f"{self.CurrentName_Original}*.dts")
+ )
+
+ if audio_tracks == []:
+ raise FileNotFoundError("no audio files found")
+
+ for file in audio_tracks:
+ file_list.append({"file": file, "size": os.path.getsize(file)})
+
+ file_list = sorted(file_list, key=lambda k: int(k["size"]))
+ return file_list[-1]["file"]
+
+ def GetVideoFile(self):
+ videofiles = [
+ "{} [{}p]_Demuxed.mp4",
+ "{} [{}p]_Demuxed.mp4",
+ "{} [{}p] [UHD]_Demuxed.mp4",
+ "{} [{}p] [UHD]_Demuxed.mp4",
+ "{} [{}p] [VP9]_Demuxed.mp4",
+ "{} [{}p] [HIGH]_Demuxed.mp4",
+ "{} [{}p] [VP9]_Demuxed.mp4",
+ "{} [{}p] [HEVC]_Demuxed.mp4",
+ "{} [{}p] [HDR]_Demuxed.mp4",
+ "{} [{}p] [HDR-DV]_Demuxed.mp4",
+ ]
+
+ for videofile in videofiles:
+ filename = videofile.format(self.CurrentName_Original, self.CurrentHeigh)
+ if os.path.isfile(filename):
+ return filename
+
+ return None
+
+ def get_video_id(self):
+ video_file = self.GetVideoFile()
+ if not video_file:
+ raise ValueError("No Video file in Dir...")
+
+ media_info = MediaInfo.parse(video_file)
+ track = [track for track in media_info.tracks if track.track_type == "Video"][0]
+
+ if track.format == "AVC":
+ if track.encoding_settings:
+ return "x264"
+ return "H.264"
+ elif track.format == "HEVC":
+ if track.commercial_name == "HDR10" and track.color_primaries:
+ return "HDR.HEVC"
+ if track.commercial_name == "HEVC" and track.color_primaries:
+ return "HEVC"
+
+ return "DV.HEVC"
+
+ return None
+
+ def get_audio_id(self):
+ audio_id = None
+ media_info = MediaInfo.parse(self.SortFilesBySize())
+ track = [track for track in media_info.tracks if track.track_type == "Audio"][0]
+
+ if track.format == "E-AC-3":
+ audioCodec = "DDP"
+ elif track.format == "AC-3":
+ audioCodec = "DD"
+ elif track.format == "AAC":
+ audioCodec = "AAC"
+ elif track.format == "DTS":
+ audioCodec = "DTS"
+ elif "DTS" in track.format:
+ audioCodec = "DTS"
+ else:
+ audioCodec = "DDP"
+
+ if track.channel_s == 8:
+ channels = "7.1"
+ elif track.channel_s == 6:
+ channels = "5.1"
+ elif track.channel_s == 2:
+ channels = "2.0"
+ elif track.channel_s == 1:
+ channels = "1.0"
+ else:
+ channels = "5.1"
+
+ audio_id = (
+ f"{audioCodec}{channels}.Atmos"
+ if "Atmos" in track.commercial_name
+ else f"{audioCodec}{channels}"
+ )
+
+ return audio_id
+
+ def Heigh(self):
+ try:
+ Width = int(self.CurrentWidth)
+ Heigh = int(self.CurrentHeigh)
+ except Exception:
+ return self.CurrentHeigh
+
+ res1080p = "1080p"
+ res720p = "720p"
+ sd = ""
+
+ if Width >= 3840:
+ return "2160p"
+
+ if Width >= 2560:
+ return "1440p"
+
+ if Width > 1920:
+ if Heigh > 1440:
+ return "2160p"
+ return "1440p"
+
+ if Width == 1920:
+ return res1080p
+ elif Width == 1280:
+ return res720p
+
+ if Width >= 1400:
+ return res1080p
+
+ if Width < 1400 and Width >= 1100:
+ return res720p
+
+ if Heigh == 1080:
+ return res1080p
+ elif Heigh == 720:
+ return res720p
+
+ if Heigh >= 900:
+ return res1080p
+
+ if Heigh < 900 and Heigh >= 700:
+ return res720p
+
+ return sd
+
+ def noTitle(self):
+ regex = re.compile("(.*) [S]([0-9]+)[E]([0-9]+)")
+ if regex.search(self.CurrentName):
+ return regex.search(self.CurrentName).group(0)
+
+ return self.CurrentName
+
+ def Run(self, command):
+ self.logger.debug("muxing command: {}".format(command))
+
+ def unbuffered(proc, stream="stdout"):
+ newlines = ["\n", "\r\n", "\r"]
+ stream = getattr(proc, stream)
+ with contextlib.closing(stream):
+ while True:
+ out = []
+ last = stream.read(1)
+ # Don't loop forever
+ if last == "" and proc.poll() is not None:
+ break
+ while last not in newlines:
+ # Don't loop forever
+ if last == "" and proc.poll() is not None:
+ break
+ out.append(last)
+ last = stream.read(1)
+ out = "".join(out)
+ yield out
+
+ proc = subprocess.Popen(
+ command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ bufsize=1,
+ universal_newlines=True,
+ )
+ self.logger.info("\nStart Muxing...")
+ for line in unbuffered(proc):
+ if "Progress:" in line:
+ sys.stdout.write("\r%s" % (line))
+ sys.stdout.flush()
+ elif "Multiplexing" in line:
+ sys.stdout.write("\r%s" % (line.replace("Multiplexing", "Muxing")))
+ sys.stdout.flush()
+ elif "Error" in line:
+ sys.stdout.write("\r%s" % (line))
+ sys.stdout.flush()
+
+ self.logger.info("")
+
+ def setName(self):
+
+ outputVideo = (
+ self.scheme.replace(
+ "{t}", ripprocess().CleanMyFileNamePlease(self.CurrentName)
+ )
+ .replace("{r}", self.Heigh())
+ .replace("{s}", self.source_tag)
+ .replace("{ac}", self.AudioProfile)
+ .replace("{vc}", self.VideoProfile)
+ .replace("{gr}", self.Group)
+ )
+
+ for i in range(10):
+ outputVideo = re.sub(r"(\.\.)", ".", outputVideo)
+
+ if self.SeasonFolder:
+ outputVideo = os.path.join(os.path.abspath(self.SeasonFolder), outputVideo)
+ outputVideo = outputVideo.replace("\\", "/")
+
+ return f"{outputVideo}.mkv"
+
+ def setFolder(self):
+ folder = (
+ self.scheme.replace(
+ "{t}", ripprocess().CleanMyFileNamePlease(self.SeasonFolder)
+ )
+ .replace("{r}", self.Heigh())
+ .replace("{s}", self.source_tag)
+ .replace("{ac}", self.AudioProfile)
+ .replace("{vc}", self.VideoProfile)
+ .replace("{gr}", self.Group)
+ )
+
+ for i in range(10):
+ folder = re.sub(r"(\.\.)", ".", folder)
+
+ return folder
+
+ def LanguageList(self):
+ LanguageList = [
+ ["Hindi", "hin", "hin", "Hindi"],
+ ["Tamil", "tam", "tam", "Tamil"],
+ ["Telugu", "tel", "tel", "Telugu"],
+ ["English", "eng", "eng", "English"],
+ ["Afrikaans", "af", "afr", "Afrikaans"],
+ ["Arabic", "ara", "ara", "Arabic"],
+ ["Arabic (Syria)", "araSy", "ara", "Arabic Syria"],
+ ["Arabic (Egypt)", "araEG", "ara", "Arabic Egypt"],
+ ["Arabic (Kuwait)", "araKW", "ara", "Arabic Kuwait"],
+ ["Arabic (Lebanon)", "araLB", "ara", "Arabic Lebanon"],
+ ["Arabic (Algeria)", "araDZ", "ara", "Arabic Algeria"],
+ ["Arabic (Bahrain)", "araBH", "ara", "Arabic Bahrain"],
+ ["Arabic (Iraq)", "araIQ", "ara", "Arabic Iraq"],
+ ["Arabic (Jordan)", "araJO", "ara", "Arabic Jordan"],
+ ["Arabic (Libya)", "araLY", "ara", "Arabic Libya"],
+ ["Arabic (Morocco)", "araMA", "ara", "Arabic Morocco"],
+ ["Arabic (Oman)", "araOM", "ara", "Arabic Oman"],
+ ["Arabic (Saudi Arabia)", "araSA", "ara", "Arabic Saudi Arabia"],
+ ["Arabic (Tunisia)", "araTN", "ara", "Arabic Tunisia"],
+ [
+ "Arabic (United Arab Emirates)",
+ "araAE",
+ "ara",
+ "Arabic United Arab Emirates",
+ ],
+ ["Arabic (Yemen)", "araYE", "ara", "Arabic Yemen"],
+ ["Armenian", "hye", "arm", "Armenian"],
+ ["Assamese", "asm", "asm", "Assamese"],
+ ["Bengali", "ben", "ben", "Bengali"],
+ ["Basque", "eus", "baq", "Basque"],
+ ["British English", "enGB", "eng", "British English"],
+ ["Bulgarian", "bul", "bul", "Bulgarian"],
+ ["Cantonese", "None", "chi", "Cantonese"],
+ ["Catalan", "cat", "cat", "Catalan"],
+ ["Simplified Chinese", "zhoS", "chi", "Chinese Simplified"],
+ ["Traditional Chinese", "zhoT", "chi", "Chinese Traditional"],
+ ["Croatian", "hrv", "hrv", "Croatian"],
+ ["Czech", "ces", "cze", "Czech"],
+ ["Danish", "dan", "dan", "Danish"],
+ ["Dutch", "nld", "dut", "Dutch"],
+ ["Estonian", "est", "est", "Estonian"],
+ ["Filipino", "fil", "fil", "Filipino"],
+ ["Finnish", "fin", "fin", "Finnish"],
+ ["Flemish", "nlBE", "dut", "Flemish"],
+ ["French", "fra", "fre", "French"],
+ ["French Canadian", "caFra", "fre", "French Canadian"],
+ ["Canadian French", "caFra", "fre", "Canadian French"],
+ ["German", "deu", "ger", "German"],
+ ["Greek", "ell", "gre", "Greek"],
+ ["Gujarati", "guj", "guj", "Gujarati"],
+ ["Hebrew", "heb", "heb", "Hebrew"],
+ ["Hungarian", "hun", "hun", "Hungarian"],
+ ["Icelandic", "isl", "ice", "Icelandic"],
+ ["Indonesian", "ind", "ind", "Indonesian"],
+ ["Italian", "ita", "ita", "Italian"],
+ ["Japanese", "jpn", "jpn", "Japanese"],
+ ["Kannada (India)", "kan", "kan", "Kannada (India)"],
+ ["Khmer", "khm", "khm", "Khmer"],
+ ["Klingon", "tlh", "tlh", "Klingon"],
+ ["Korean", "kor", "kor", "Korean"],
+ ["Lithuanian", "lit", "lit", "Lithuanian"],
+ ["Latvian", "lav", "lav", "Latvian"],
+ ["Malay", "msa", "may", "Malay"],
+ ["Malayalam", "mal", "mal", "Malayalam"],
+ ["Mandarin", "None", "chi", "Mandarin"],
+ ["Mandarin Chinese (Simplified)", "zh-Hans", "chi", "Simplified"],
+ ["Mandarin Chinese (Traditional)", "zh-Hant", "chi", "Traditional"],
+ ["Yue Chinese", "yue", "chi", "(Yue Chinese)"],
+ ["Manipuri", "mni", "mni", "Manipuri"],
+ ["Marathi", "mar", "mar", "Marathi"],
+ ["No Dialogue", "zxx", "zxx", "No Dialogue"],
+ ["Norwegian", "nor", "nor", "Norwegian"],
+ ["Norwegian Bokmal", "nob", "nob", "Norwegian Bokmal"],
+ ["Persian", "fas", "per", "Persian"],
+ ["Polish", "pol", "pol", "Polish"],
+ ["Portuguese", "por", "por", "Portuguese"],
+ ["Brazilian Portuguese", "brPor", "por", "Brazilian Portuguese"],
+ ["Punjabi", "pan", "pan", "Punjabi"],
+ ["Panjabi", "pan", "pan", "Panjabi"],
+ ["Romanian", "ron", "rum", "Romanian"],
+ ["Russian", "rus", "rus", "Russian"],
+ ["Serbian", "srp", "srp", "Serbian"],
+ ["Sinhala", "sin", "sin", "Sinhala"],
+ ["Slovak", "slk", "slo", "Slovak"],
+ ["Slovenian", "slv", "slv", "Slovenian"],
+ ["Spanish", "spa", "spa", "Spanish"],
+ ["European Spanish", "euSpa", "spa", "European Spanish"],
+ ["Swedish", "swe", "swe", "Swedish"],
+ ["Thai", "tha", "tha", "Thai"],
+ ["Tagalog", "tgl", "tgl", "Tagalog"],
+ ["Turkish", "tur", "tur", "Turkish"],
+ ["Ukrainian", "ukr", "ukr", "Ukrainian"],
+ ["Urdu", "urd", "urd", "Urdu"],
+ ["Vietnamese", "vie", "vie", "Vietnamese"],
+ ]
+
+ return LanguageList
+
+ def ExtraLanguageList(self):
+ ExtraLanguageList = [
+ ["Polish - Dubbing", "pol", "pol", "Polish - Dubbing"],
+ ["Polish - Lektor", "pol", "pol", "Polish - Lektor"],
+ ]
+
+ return ExtraLanguageList
+
+ def AddChapters(self):
+ if os.path.isfile(self.CurrentName_Original + " Chapters.txt"):
+ self.merge += [
+ "--chapter-charset",
+ "UTF-8",
+ "--chapters",
+ self.CurrentName_Original + " Chapters.txt",
+ ]
+
+ return
+
+ def AddVideo(self):
+ inputVideo = None
+
+ videofiles = [
+ "{} [{}p]_Demuxed.mp4",
+ "{} [{}p]_Demuxed.mp4",
+ "{} [{}p] [UHD]_Demuxed.mp4",
+ "{} [{}p] [UHD]_Demuxed.mp4",
+ "{} [{}p] [VP9]_Demuxed.mp4",
+ "{} [{}p] [HIGH]_Demuxed.mp4",
+ "{} [{}p] [VP9]_Demuxed.mp4",
+ "{} [{}p] [HEVC]_Demuxed.mp4",
+ "{} [{}p] [HDR]_Demuxed.mp4",
+ "{} [{}p] [HDR-DV]_Demuxed.mp4",
+ ]
+
+ for videofile in videofiles:
+ filename = videofile.format(self.CurrentName_Original, self.CurrentHeigh)
+ if os.path.isfile(filename):
+ inputVideo = filename
+ break
+
+ if not inputVideo:
+ self.logger.info("cannot found video file.")
+ exit(-1)
+
+ if self.default_mux:
+ outputVideo = (
+ re.compile("|".join([".h264", ".h265", ".vp9", ".mp4"])).sub("", inputVideo)
+ + ".mkv"
+ )
+ if self.SeasonFolder:
+ outputVideo = os.path.join(
+ os.path.abspath(self.SeasonFolder), outputVideo
+ )
+ outputVideo = outputVideo.replace("\\", "/")
+ else:
+ outputVideo = self.setName()
+
+ self.outputVideo = outputVideo
+
+ if self.fps24:
+ self.merge += [
+ self.mkvmerge,
+ "--output",
+ outputVideo,
+ "--default-duration",
+ "0:24000/1001p",
+ "--language",
+ "0:und",
+ "--default-track",
+ "0:yes",
+ "(",
+ inputVideo,
+ ")",
+ ]
+ else:
+ self.merge += [
+ self.mkvmerge,
+ "--output",
+ outputVideo,
+ "--title",
+ 'RAB',
+ "(",
+ inputVideo,
+ ")",
+ ]
+
+ return
+
+ def AddAudio(self):
+
+ audiofiles = [
+ "{} {}.ac3",
+ "{} {} - Audio Description.ac3",
+ "{} {}.eac3",
+ "{} {} - Audio Description.eac3",
+ "{} {}.aac",
+ "{} {} - Audio Description.aac",
+ ]
+
+ for (audio_language, subs_language, language_id, language_name,) in (
+ self.LanguageList() + self.ExtraLanguageList()
+ ):
+ for audiofile in audiofiles:
+ filename = audiofile.format(self.CurrentName_Original, audio_language)
+ if os.path.isfile(filename):
+ self.merge += [
+ "--language",
+ f"0:{language_id}",
+ "--track-name",
+ "0:Audio Description" if 'Audio Description' in filename
+ else f"0:{language_name}",
+ "--default-track",
+ "0:yes"
+ if subs_language == self.muxer_settings["AUDIO"]
+ else "0:no",
+ "(",
+ filename,
+ ")",
+ ]
+
+ return
+
+ def AddSubtitles(self):
+
+ srts = [
+ "{} {}.srt",
+ ]
+ forceds = [
+ "{} forced-{}.srt",
+ ]
+ sdhs = [
+ "{} sdh-{}.srt",
+ ]
+
+ for (
+ audio_language,
+ subs_language,
+ language_id,
+ language_name,
+ ) in self.LanguageList():
+ for subtitle in srts:
+ filename = subtitle.format(self.CurrentName_Original, subs_language)
+ if os.path.isfile(filename):
+ self.merge += [
+ "--language",
+ f"0:{language_id}",
+ "--track-name",
+ f"0:{language_name}",
+ "--forced-track",
+ "0:no",
+ "--default-track",
+ "0:yes"
+ if subs_language == self.muxer_settings["SUB"]
+ else "0:no",
+ "--compression",
+ "0:none",
+ "(",
+ filename,
+ ")",
+ ]
+
+ for subtitle in forceds:
+ filename = subtitle.format(self.CurrentName_Original, subs_language)
+ if os.path.isfile(filename):
+ self.merge += [
+ "--language",
+ f"0:{language_id}",
+ "--track-name",
+ f"0:Forced",
+ "--forced-track",
+ "0:yes",
+ "--default-track",
+ "0:no",
+ "--compression",
+ "0:none",
+ "(",
+ filename,
+ ")",
+ ]
+
+ for subtitle in sdhs:
+ filename = subtitle.format(self.CurrentName_Original, subs_language)
+ if os.path.isfile(filename):
+ self.merge += [
+ "--language",
+ f"0:{language_id}",
+ "--track-name",
+ f"0:SDH",
+ "--forced-track",
+ "0:no",
+ "--default-track",
+ "0:no",
+ "--compression",
+ "0:none",
+ "(",
+ filename,
+ ")",
+ ]
+
+ return
+
+ def startMux(self):
+ self.AddVideo()
+ self.AddAudio()
+ self.AddSubtitles()
+ self.AddChapters()
+ if not os.path.isfile(self.outputVideo):
+ self.Run(self.merge + self.Extras)
+
+ return self.outputVideo
diff --git a/helpers/Parsers/Netflix/MSLClient.py b/helpers/Parsers/Netflix/MSLClient.py
new file mode 100644
index 0000000..f3e940a
--- /dev/null
+++ b/helpers/Parsers/Netflix/MSLClient.py
@@ -0,0 +1,551 @@
+import base64, binascii, json, os, re, random, requests, string, time, traceback, logging
+from datetime import datetime
+from Cryptodome.Cipher import AES, PKCS1_OAEP
+from Cryptodome.Util import Padding
+from Cryptodome.Hash import HMAC, SHA256
+from Cryptodome.PublicKey import RSA
+from pywidevine.cdm import cdm, deviceconfig
+from configs.config import tool
+
+class MSLClient:
+ def __init__(self, profiles=None, wv_keyexchange=True, proxies=None):
+
+ self.session = requests.session()
+ self.logger = logging.getLogger(__name__)
+ if proxies:
+ self.session.proxies.update(proxies)
+
+ self.nf_endpoints = {
+ "manifest": "https://www.netflix.com/nq/msl_v1/cadmium/pbo_manifests/^1.0.0/router",
+ "license": "https://www.netflix.com/nq/msl_v1/cadmium/pbo_licenses/^1.0.0/router",
+ }
+
+ ######################################################################
+
+ self.config = tool().config("NETFLIX")
+ self.email = self.config["email"]
+ self.password = self.config["password"]
+ self.device = tool().devices()["NETFLIX-MANIFEST"]
+ self.save_rsa_location = self.config["token_file"]
+ self.languages = self.config["manifest_language"]
+ self.license_path = None
+
+ ######################################################################
+
+ if os.path.isfile(self.save_rsa_location):
+ self.generatePrivateKey = RSA.importKey(
+ json.loads(open(self.save_rsa_location, "r").read())["RSA_KEY"]
+ )
+ else:
+ self.generatePrivateKey = RSA.generate(2048)
+
+ if wv_keyexchange:
+ self.wv_keyexchange = True
+ self.cdm = cdm.Cdm()
+ self.cdm_session = None
+ else:
+ self.wv_keyexchange = False
+ self.cdm = None
+ self.cdm_session = None
+
+ self.manifest_challenge = '' # set desired wv data to overide wvexchange data
+
+ self.profiles = profiles
+
+ self.logger.debug("Using profiles: {}".format(self.profiles))
+
+ esn = self.config["androidEsn"]
+ if esn is None:
+ self.logger.error(
+ '\nandroid esn not found, set esn with cdm systemID in config.py'
+ )
+ else:
+ self.esn = esn
+
+ self.logger.debug("Using esn: " + self.esn)
+
+ self.messageid = random.randint(0, 2 ** 52)
+ self.session_keys = {} #~
+ self.header = {
+ "sender": self.esn,
+ "handshake": True,
+ "nonreplayable": 2,
+ "capabilities": {"languages": [], "compressionalgos": []},
+ "recipient": "Netflix",
+ "renewable": True,
+ "messageid": self.messageid,
+ "timestamp": time.time(),
+ }
+
+ self.setRSA()
+
+ def get_header_extra(self):
+
+ if self.wv_keyexchange:
+ self.cdm_session = self.cdm.open_session(
+ None,
+ deviceconfig.DeviceConfig(self.device),
+ b"\x0A\x7A\x00\x6C\x38\x2B",
+ True,
+ )
+ wv_request = base64.b64encode(
+ self.cdm.get_license_request(self.cdm_session)
+ ).decode("utf-8")
+
+ self.header["keyrequestdata"] = [
+ {
+ "scheme": "WIDEVINE",
+ "keydata": {
+ "keyrequest": wv_request
+ }
+ }
+ ]
+
+ else:
+ self.header["keyrequestdata"] = [
+ {
+ "scheme": "ASYMMETRIC_WRAPPED",
+ "keydata": {
+ "publickey": base64.b64encode(
+ self.generatePrivateKey.publickey().exportKey("DER")
+ ).decode("utf8"),
+ "mechanism": "JWK_RSA",
+ "keypairid": "rsaKeypairId",
+ },
+ }
+ ]
+
+ return self.header
+
+ def setRSA(self):
+ if os.path.isfile(self.save_rsa_location):
+ master_token = self.load_tokens()
+ expires = master_token["expiration"]
+ valid_until = datetime.utcfromtimestamp(int(expires))
+ present_time = datetime.now()
+
+ difference = valid_until - present_time
+ difference = difference.total_seconds() / 60 / 60
+ if difference < 10:
+ self.logger.debug("rsa file found. expired soon")
+ self.session_keys["session_keys"] = self.generate_handshake()
+ else:
+ self.logger.debug("rsa file found")
+ self.session_keys["session_keys"] = {
+ "mastertoken": master_token["mastertoken"],
+ "sequence_number": master_token["sequence_number"],
+ "encryption_key": master_token["encryption_key"],
+ "sign_key": master_token["sign_key"],
+ }
+ else:
+ self.logger.debug("rsa file not found")
+ self.session_keys["session_keys"] = self.generate_handshake()
+
+ def load_playlist(self, viewable_id):
+
+ payload = {
+ "version": 2,
+ "url": "/manifest", #"/licensedManifest"
+ "id": int(time.time()),
+ "languages": self.languages,
+ "params": {
+ #"challenge": self.manifest_challenge,
+ "type": "standard",
+ "viewableId": viewable_id,
+ "profiles": self.profiles,
+ "flavor": "STANDARD", #'PRE_FETCH'
+ "drmType": "widevine",
+ "usePsshBox": True,
+ "useHttpsStreams": True,
+ "supportsPreReleasePin": True,
+ "supportsWatermark": True,
+ 'supportsUnequalizedDownloadables': True,
+ 'requestEligibleABTests': True,
+ "isBranching": False,
+ 'isNonMember': False,
+ 'isUIAutoPlay': False,
+ "imageSubtitleHeight": 1080,
+ "uiVersion": "shakti-v4bf615c3",
+ 'uiPlatform': 'SHAKTI',
+ "clientVersion": "6.0026.291.011",
+ 'desiredVmaf': 'plus_lts', # phone_plus_exp
+ "showAllSubDubTracks": True,
+ #"preferredTextLocale": "ar",
+ #"preferredAudioLocale": "ar",
+ #"maxSupportedLanguages": 2,
+ "preferAssistiveAudio": False,
+ "deviceSecurityLevel": "3000",
+ 'licenseType': 'standard',
+ 'titleSpecificData': {
+ str(viewable_id): {
+ 'unletterboxed': True
+ }
+ },
+ "videoOutputInfo": [
+ {
+ "type": "DigitalVideoOutputDescriptor",
+ "outputType": "unknown",
+ "supportedHdcpVersions": ['2.2'],
+ "isHdcpEngaged": True,
+ }
+ ],
+ },
+ }
+
+ request_data = self.msl_request(payload)
+ response = self.session.post(self.nf_endpoints["manifest"], data=request_data)
+ manifest = json.loads(json.dumps(self.decrypt_response(response.text)))
+
+ if manifest.get("result"):
+ #with open('videoTraks.json', 'w', encoding='utf-8') as d:
+ #["result"]["video_tracks"]
+ # d.write(json.dumps(manifest, indent=2))
+ self.license_path = manifest["result"]["links"]["license"]["href"]
+ return manifest
+
+ if manifest.get("errormsg"):
+ self.logger.info(manifest["errormsg"])
+ return None
+ else:
+ self.logger.info(manifest)
+ return None
+
+ def decrypt_response(self, payload):
+ errored = False
+ try:
+ p = json.loads(payload)
+ if p.get("errordata"):
+ return json.loads(base64.b64decode(p["errordata"]).decode())
+ except:
+ payloads = re.split(
+ r',"signature":"[0-9A-Za-z/+=]+"}', payload.split("}}")[1]
+ )
+ payloads = [x + "}" for x in payloads]
+ new_payload = payloads[:-1]
+
+ chunks = []
+ for chunk in new_payload:
+ try:
+ payloadchunk = json.loads(chunk)["payload"]
+ encryption_envelope = payloadchunk
+ cipher = AES.new(
+ self.session_keys["session_keys"]["encryption_key"],
+ AES.MODE_CBC,
+ base64.b64decode(
+ json.loads(
+ base64.b64decode(encryption_envelope).decode("utf8")
+ )["iv"]
+ ),
+ )
+
+ plaintext = cipher.decrypt(
+ base64.b64decode(
+ json.loads(
+ base64.b64decode(encryption_envelope).decode("utf8")
+ )["ciphertext"]
+ )
+ )
+
+ plaintext = json.loads(Padding.unpad(plaintext, 16).decode("utf8"))
+
+ data = plaintext["data"]
+ data = base64.b64decode(data).decode("utf8")
+ chunks.append(data)
+ except:
+ continue
+
+ decrypted_payload = "".join(chunks)
+ try:
+ return json.loads(decrypted_payload)
+ except:
+ traceback.print_exc()
+ self.logger.info("Unable to decrypt payloads...exiting")
+ exit(-1)
+
+ def generate_handshake(self):
+ self.logger.debug("generate_handshake")
+ header = self.get_header_extra()
+
+ request = {
+ "entityauthdata": {
+ "scheme": "NONE",
+ "authdata": {"identity": self.esn,}
+ },
+ "signature": "",
+ "headerdata": base64.b64encode(json.dumps(header).encode("utf8")).decode("utf8"),
+ }
+ response = self.session.post(
+ url=self.nf_endpoints["manifest"],
+ json=request,
+ )
+ try:
+ if response.json().get("errordata"):
+ self.logger.info("ERROR")
+ self.logger.info(
+ base64.b64decode(response.json()["errordata"]).decode()
+ )
+ exit(-1)
+ handshake = self.parse_handshake(response=response.json())
+ return handshake
+ except:
+ traceback.print_exc()
+ self.logger.info(response.text)
+ exit(-1)
+
+ def load_tokens(self):
+
+ with open(self.save_rsa_location, "r", encoding='utf-8') as f:
+ tokens_data = json.loads(f.read())
+
+ data = {
+ "mastertoken": tokens_data["mastertoken"],
+ "sequence_number": tokens_data["sequence_number"],
+ "encryption_key": base64.standard_b64decode(tokens_data["encryption_key"]),
+ "sign_key": base64.standard_b64decode(tokens_data["sign_key"]),
+ "RSA_KEY": tokens_data["RSA_KEY"],
+ "expiration": tokens_data["expiration"],
+ }
+
+ return data
+
+ def save_tokens(self, tokens_data):
+
+ data = {
+ "mastertoken": tokens_data["mastertoken"],
+ "sequence_number": tokens_data["sequence_number"],
+ "encryption_key": base64.standard_b64encode(
+ tokens_data["encryption_key"]
+ ).decode("utf-8"),
+ "sign_key": base64.standard_b64encode(tokens_data["sign_key"]).decode(
+ "utf-8"
+ ),
+ "RSA_KEY": tokens_data["RSA_KEY"],
+ "expiration": tokens_data["expiration"],
+ }
+
+ with open(self.save_rsa_location, 'w', encoding='utf-8') as f:
+ f.write(json.dumps(data, indent=2))
+
+ def parse_handshake(self, response):
+ headerdata = json.loads(base64.b64decode(response["headerdata"]).decode("utf8"))
+
+ keyresponsedata = headerdata["keyresponsedata"]
+ mastertoken = headerdata["keyresponsedata"]["mastertoken"]
+ sequence_number = json.loads(
+ base64.b64decode(mastertoken["tokendata"]).decode("utf8")
+ )["sequencenumber"]
+
+ if self.wv_keyexchange:
+ expected_scheme = "WIDEVINE"
+ else:
+ expected_scheme = "ASYMMETRIC_WRAPPED"
+
+ scheme = keyresponsedata["scheme"]
+
+ if scheme != expected_scheme:
+ self.logger.info("Key Exchange failed:")
+ return False
+
+ keydata = keyresponsedata["keydata"]
+
+ if self.wv_keyexchange:
+ encryption_key, sign_key = self.__process_wv_keydata(keydata)
+ else:
+ encryption_key, sign_key = self.__parse_rsa_wrapped_crypto_keys(keydata)
+
+ tokens_data = {
+ "mastertoken": mastertoken,
+ "sequence_number": sequence_number,
+ "encryption_key": encryption_key,
+ "sign_key": sign_key,
+ }
+
+ tokens_data_save = tokens_data
+ tokens_data_save.update(
+ {"RSA_KEY": self.generatePrivateKey.exportKey().decode()}
+ )
+ tokens_data_save.update(
+ {
+ "expiration": json.loads(
+ base64.b64decode(
+ json.loads(base64.b64decode(response["headerdata"]))[
+ "keyresponsedata"
+ ]["mastertoken"]["tokendata"]
+ )
+ )["expiration"]
+ }
+ )
+ self.save_tokens(tokens_data_save)
+ return tokens_data
+
+ def __process_wv_keydata(self, keydata):
+
+ wv_response_b64 = keydata["cdmkeyresponse"] # pass as b64
+ encryptionkeyid = base64.standard_b64decode(keydata["encryptionkeyid"])
+ hmackeyid = base64.standard_b64decode(keydata["hmackeyid"])
+ self.cdm.provide_license(self.cdm_session, wv_response_b64)
+ keys = self.cdm.get_keys(self.cdm_session)
+ self.logger.debug("wv key exchange: obtained wv key exchange keys %s" % keys)
+ return (
+ self.__find_wv_key(encryptionkeyid, keys, ["AllowEncrypt", "AllowDecrypt"]),
+ self.__find_wv_key(hmackeyid, keys, ["AllowSign", "AllowSignatureVerify"]),
+ )
+
+ def __find_wv_key(self, kid, keys, permissions):
+ for key in keys:
+ if key.kid != kid:
+ continue
+ if key.type != "OPERATOR_SESSION":
+ self.logger.debug(
+ "wv key exchange: Wrong key type (not operator session) key %s"
+ % key
+ )
+ continue
+
+ if not set(permissions) <= set(key.permissions):
+ self.logger.debug(
+ "wv key exchange: Incorrect permissions, key %s, needed perms %s"
+ % (key, permissions)
+ )
+ continue
+ return key.key
+
+ return None
+
+ def __parse_rsa_wrapped_crypto_keys(self, keydata):
+ # Init Decryption
+ encrypted_encryption_key = base64.b64decode(keydata["encryptionkey"])
+
+ encrypted_sign_key = base64.b64decode(keydata["hmackey"])
+
+ oaep_cipher = PKCS1_OAEP.new(self.generatePrivateKey)
+ encryption_key_data = json.loads(
+ oaep_cipher.decrypt(encrypted_encryption_key).decode("utf8")
+ )
+
+ encryption_key = self.base64_check(encryption_key_data["k"])
+
+ sign_key_data = json.loads(
+ oaep_cipher.decrypt(encrypted_sign_key).decode("utf8")
+ )
+
+ sign_key = self.base64_check(sign_key_data["k"])
+ return (encryption_key, sign_key)
+
+ def base64key_decode(self, payload):
+ l = len(payload) % 4
+ if l == 2:
+ payload += "=="
+ elif l == 3:
+ payload += "="
+ elif l != 0:
+ raise ValueError("Invalid base64 string")
+ return base64.urlsafe_b64decode(payload.encode("utf-8"))
+
+ def base64_check(self, string):
+
+ while len(string) % 4 != 0:
+ string = string + "="
+ return base64.urlsafe_b64decode(string.encode())
+
+ def msl_request(self, data, is_handshake=False):
+
+ header = self.header.copy()
+ header["handshake"] = is_handshake
+ header["userauthdata"] = {
+ "scheme": "EMAIL_PASSWORD",
+ "authdata": {"email": self.email, "password": self.password},
+ }
+
+ header_envelope = self.msl_encrypt(self.session_keys, json.dumps(header))
+
+ header_signature = HMAC.new(
+ self.session_keys["session_keys"]["sign_key"], header_envelope, SHA256
+ ).digest()
+
+ encrypted_header = {
+ "headerdata": base64.b64encode(header_envelope).decode("utf8"),
+ "signature": base64.b64encode(header_signature).decode("utf8"),
+ "mastertoken": self.session_keys["session_keys"]["mastertoken"],
+ }
+
+ payload = {
+ "messageid": self.messageid,
+ "data": base64.b64encode(json.dumps(data).encode()).decode("utf8"),
+ "sequencenumber": 1,
+ "endofmsg": True,
+ }
+
+ payload_envelope = self.msl_encrypt(self.session_keys, json.dumps(payload))
+
+ payload_signature = HMAC.new(
+ self.session_keys["session_keys"]["sign_key"], payload_envelope, SHA256
+ ).digest()
+
+ payload_chunk = {
+ "payload": base64.b64encode(payload_envelope).decode("utf8"),
+ "signature": base64.b64encode(payload_signature).decode("utf8"),
+ }
+ return json.dumps(encrypted_header) + json.dumps(payload_chunk)
+
+ def msl_encrypt(self, msl_session, plaintext):
+
+ cbc_iv = os.urandom(16)
+ encryption_envelope = {
+ "keyid": "%s_%s"
+ % (self.esn, msl_session["session_keys"]["sequence_number"]),
+ "sha256": "AA==",
+ "iv": base64.b64encode(cbc_iv).decode("utf8"),
+ }
+
+ plaintext = Padding.pad(plaintext.encode("utf8"), 16)
+ cipher = AES.new(
+ msl_session["session_keys"]["encryption_key"], AES.MODE_CBC, cbc_iv
+ )
+
+ ciphertext = cipher.encrypt(plaintext)
+
+ encryption_envelope["ciphertext"] = base64.b64encode(ciphertext).decode("utf8")
+
+ return json.dumps(encryption_envelope).encode("utf8")
+
+ def get_license(self, challenge, session_id):
+
+ if not isinstance(challenge, bytes):
+ raise TypeError("challenge must be of type bytes")
+
+ if not isinstance(session_id, str):
+ raise TypeError("session_id must be of type string")
+
+ timestamp = int(time.time() * 10000)
+
+ license_request_data = {
+ "version": 2,
+ "url": self.license_path,
+ "id": timestamp,
+ "languages": "en_US",
+ "echo": "drmsessionId",
+ "params": [
+ {
+ "drmSessionId": session_id,
+ "clientTime": int(timestamp / 10000),
+ "challengeBase64": base64.b64encode(challenge).decode("utf8"),
+ "xid": str(timestamp + 1610),
+ }
+ ]
+ }
+
+ request_data = self.msl_request(license_request_data)
+
+ resp = self.session.post(url=self.nf_endpoints["license"],data=request_data)
+
+ try:
+ resp.json()
+
+ except ValueError:
+ msl_license_data = json.loads(json.dumps(self.decrypt_response(resp.text)))
+ if msl_license_data.get("result"):
+ return msl_license_data
+ if msl_license_data.get("errormsg"):
+ raise ValueError(msl_license_data["errormsg"])
+ raise ValueError(msl_license_data)
diff --git a/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-36.pyc b/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-36.pyc
new file mode 100644
index 0000000..aadc782
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-36.pyc differ
diff --git a/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-39.pyc b/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-39.pyc
new file mode 100644
index 0000000..30ab199
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/MSLClient.cpython-39.pyc differ
diff --git a/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-36.pyc b/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-36.pyc
new file mode 100644
index 0000000..82ab2e0
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-36.pyc differ
diff --git a/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-39.pyc b/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-39.pyc
new file mode 100644
index 0000000..b586ef1
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/get_keys.cpython-39.pyc differ
diff --git a/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-36.pyc b/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-36.pyc
new file mode 100644
index 0000000..074b490
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-36.pyc differ
diff --git a/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-39.pyc b/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-39.pyc
new file mode 100644
index 0000000..126cc6c
Binary files /dev/null and b/helpers/Parsers/Netflix/__pycache__/get_manifest.cpython-39.pyc differ
diff --git a/helpers/Parsers/Netflix/get_keys.py b/helpers/Parsers/Netflix/get_keys.py
new file mode 100644
index 0000000..a61206e
--- /dev/null
+++ b/helpers/Parsers/Netflix/get_keys.py
@@ -0,0 +1,159 @@
+import time, os, json, logging, base64
+from helpers.Parsers.Netflix.MSLClient import MSLClient
+from configs.config import tool
+from pywidevine.decrypt.wvdecryptcustom import WvDecrypt
+
+logger = logging.getLogger(__name__)
+
+''' "av1-main-L20-dash-cbcs-prk",
+ "av1-main-L21-dash-cbcs-prk",
+ "av1-main-L30-dash-cbcs-prk",
+ "av1-main-L31-dash-cbcs-prk",
+ "av1-main-L40-dash-cbcs-prk",
+ "av1-main-L41-dash-cbcs-prk",
+ "av1-main-L50-dash-cbcs-prk",
+ "av1-main-L51-dash-cbcs-prk",'''
+
+''' "vp9-profile0-L21-dash-cenc",
+ "vp9-profile0-L30-dash-cenc",
+ "vp9-profile0-L31-dash-cenc",
+ "vp9-profile0-L40-dash-cenc",
+ "vp9-profile2-L30-dash-cenc-prk",
+ "vp9-profile2-L31-dash-cenc-prk",
+ "vp9-profile2-L40-dash-cenc-prk",
+ "vp9-profile2-L50-dash-cenc-prk",
+ "vp9-profile2-L51-dash-cenc-prk"'''
+
+def from_kid(kid):
+ array_of_bytes = bytearray(b"\x00\x00\x002pssh\x00\x00\x00\x00")
+ array_of_bytes.extend(bytes.fromhex("edef8ba979d64acea3c827dcd51d21ed"))
+ array_of_bytes.extend(b"\x00\x00\x00\x12\x12\x10")
+ array_of_bytes.extend(bytes.fromhex(kid.replace("-", "")))
+ pssh = base64.b64encode(bytes.fromhex(array_of_bytes.hex()))
+ return pssh.decode()
+
+def __profiles(profile, addHEVCDO=False):
+
+ profiles = [
+ "heaac-2-dash",
+ "dfxp-ls-sdh",
+ "webvtt-lssdh-ios8",
+ "BIF240",
+ "BIF320",
+ ]
+
+ if profile == "High KEYS":
+ profiles += [
+ "playready-h264hpl22-dash",
+ "playready-h264hpl30-dash",
+ "playready-h264hpl31-dash",
+ #'playready-h264hpl40-dash'
+ ]
+
+ elif profile == "Main KEYS":
+ profiles += [
+ "playready-h264mpl30-dash",
+ ]
+
+ elif profile == "HEVC KEYS":
+ profiles += [
+ "hevc-main-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc-prk",
+ "hevc-main-L31-dash-cenc"
+ "hevc-main10-L31-dash-cenc",
+ "hevc-main10-L31-dash-cenc-prk",
+ "hevc-main-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc-prk",
+ "hevc-main-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc-prk"
+ ]
+ if addHEVCDO:
+ profiles += [
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L40-dash-cenc-prk-do",
+ "hevc-main10-L41-dash-cenc-prk-do",
+ ]
+
+ elif profile == 'HDR-10 KEYS':
+ profiles += [
+ "hevc-hdr-main10-L30-dash-cenc",
+ "hevc-hdr-main10-L30-dash-cenc-prk",
+ "hevc-hdr-main10-L31-dash-cenc",
+ "hevc-hdr-main10-L31-dash-cenc-prk",
+ "hevc-hdr-main10-L40-dash-cenc",
+ "hevc-hdr-main10-L41-dash-cenc",
+ "hevc-hdr-main10-L40-dash-cenc-prk",
+ "hevc-hdr-main10-L41-dash-cenc-prk"
+ ]
+ else:
+ profiles += [
+ "playready-h264mpl30-dash",
+ ]
+
+ return profiles
+
+def GettingKEYS_Netflixv2(nfID, profile): #
+
+ KEYS = []
+
+ available_profiles = [
+ "High KEYS",
+ "HEVC KEYS",
+ "HDR-10 KEYS",
+ "Main KEYS"
+ ]
+
+ if not profile in available_profiles:
+ logger.info("Error: Unknown profile: {}".format(profile))
+ exit(1)
+
+ logger.info(f"\nGetting {profile}...")
+
+ profiles = __profiles(profile)
+
+ try:
+ client = MSLClient(profiles=profiles)
+ resp = client.load_playlist(int(nfID))
+ if resp is None:
+ if profile == 'HEVC KEYS':
+ profiles = __profiles(profile, addHEVCDO=True)
+ client = MSLClient(profiles=profiles)
+ resp = client.load_playlist(int(nfID))
+
+ except Exception as e:
+ logger.error("Manifest Error: {}".format(e))
+ return KEYS
+
+ try:
+ #init_data_b64 = from_kid('0000000005edabd50000000000000000')
+ init_data_b64 = resp["result"]["video_tracks"][0]["drmHeader"]["bytes"]
+ except KeyError:
+ logger.error("cannot get pssh, {}".format(resp))
+ return KEYS
+
+ cert_data_b64 = "CAUSwwUKvQIIAxIQ5US6QAvBDzfTtjb4tU/7QxiH8c+TBSKOAjCCAQoCggEBAObzvlu2hZRsapAPx4Aa4GUZj4/GjxgXUtBH4THSkM40x63wQeyVxlEEo1D/T1FkVM/S+tiKbJiIGaT0Yb5LTAHcJEhODB40TXlwPfcxBjJLfOkF3jP6wIlqbb6OPVkDi6KMTZ3EYL6BEFGfD1ag/LDsPxG6EZIn3k4S3ODcej6YSzG4TnGD0szj5m6uj/2azPZsWAlSNBRUejmP6Tiota7g5u6AWZz0MsgCiEvnxRHmTRee+LO6U4dswzF3Odr2XBPD/hIAtp0RX8JlcGazBS0GABMMo2qNfCiSiGdyl2xZJq4fq99LoVfCLNChkn1N2NIYLrStQHa35pgObvhwi7ECAwEAAToQdGVzdC5uZXRmbGl4LmNvbRKAA4TTLzJbDZaKfozb9vDv5qpW5A/DNL9gbnJJi/AIZB3QOW2veGmKT3xaKNQ4NSvo/EyfVlhc4ujd4QPrFgYztGLNrxeyRF0J8XzGOPsvv9Mc9uLHKfiZQuy21KZYWF7HNedJ4qpAe6gqZ6uq7Se7f2JbelzENX8rsTpppKvkgPRIKLspFwv0EJQLPWD1zjew2PjoGEwJYlKbSbHVcUNygplaGmPkUCBThDh7p/5Lx5ff2d/oPpIlFvhqntmfOfumt4i+ZL3fFaObvkjpQFVAajqmfipY0KAtiUYYJAJSbm2DnrqP7+DmO9hmRMm9uJkXC2MxbmeNtJHAHdbgKsqjLHDiqwk1JplFMoC9KNMp2pUNdX9TkcrtJoEDqIn3zX9p+itdt3a9mVFc7/ZL4xpraYdQvOwP5LmXj9galK3s+eQJ7bkX6cCi+2X+iBmCMx4R0XJ3/1gxiM5LiStibCnfInub1nNgJDojxFA3jH/IuUcblEf/5Y0s1SzokBnR8V0KbA=="
+
+ device = tool().devices()["NETFLIX-LICENSE"]
+
+ wvdecrypt = WvDecrypt(
+ init_data_b64=init_data_b64, cert_data_b64=cert_data_b64, device=device
+ )
+ challenge = wvdecrypt.get_challenge()
+ current_sessionId = str(time.time()).replace(".", "")[0:-2]
+ data = client.get_license(challenge, current_sessionId)
+
+ try:
+ license_b64 = data["result"][0]["licenseResponseBase64"]
+ except Exception:
+ logger.error("MSL LICENSE Error Message: {}".format(data))
+ return KEYS
+
+ wvdecrypt.update_license(license_b64)
+ Correct, keyswvdecrypt = wvdecrypt.start_process()
+ KEYS = keyswvdecrypt
+
+ return KEYS
\ No newline at end of file
diff --git a/helpers/Parsers/Netflix/get_manifest.py b/helpers/Parsers/Netflix/get_manifest.py
new file mode 100644
index 0000000..8f1e14b
--- /dev/null
+++ b/helpers/Parsers/Netflix/get_manifest.py
@@ -0,0 +1,736 @@
+from helpers.ripprocess import ripprocess
+from helpers.Parsers.Netflix.MSLClient import MSLClient
+from configs.config import tool
+import re, os, json, logging
+
+def MSLprofiles():
+ PROFILES = {
+ "BASICS": ["BIF240", "BIF320", "webvtt-lssdh-ios8", "dfxp-ls-sdh"],
+ "MAIN": {
+ "SD": [
+ "playready-h264bpl30-dash",
+ "playready-h264mpl22-dash",
+ "playready-h264mpl30-dash",
+ ],
+ "HD": [
+ "playready-h264bpl30-dash",
+ "playready-h264mpl22-dash",
+ "playready-h264mpl30-dash",
+ "playready-h264mpl31-dash",
+ ],
+ "FHD": [
+ "playready-h264bpl30-dash",
+ "playready-h264mpl22-dash",
+ "playready-h264mpl30-dash",
+ "playready-h264mpl31-dash",
+ "playready-h264mpl40-dash",
+ ],
+ "ALL": [
+ "playready-h264bpl30-dash",
+ "playready-h264mpl22-dash",
+ "playready-h264mpl30-dash",
+ "playready-h264mpl31-dash",
+ "playready-h264mpl40-dash",
+ ],
+ },
+ "HIGH": {
+ "SD": [
+ "playready-h264hpl22-dash",
+ "playready-h264hpl30-dash",
+ ],
+ "HD": [
+ "playready-h264hpl22-dash",
+ "playready-h264hpl30-dash",
+ "playready-h264hpl31-dash",
+ ],
+ "FHD": [
+ "playready-h264hpl22-dash",
+ "playready-h264hpl30-dash",
+ "playready-h264hpl31-dash",
+ "playready-h264hpl40-dash",
+ ],
+ "ALL": [
+ "playready-h264hpl22-dash",
+ "playready-h264hpl30-dash",
+ "playready-h264hpl31-dash",
+ "playready-h264hpl40-dash",
+ ],
+ },
+ "HEVC": {
+ "SD": [
+ "hevc-main-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc-prk",
+ ],
+ "HD": [
+ "hevc-main-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc-prk",
+ "hevc-main-L31-dash-cenc",
+ "hevc-main10-L31-dash-cenc",
+ "hevc-main10-L31-dash-cenc-prk",
+ ],
+ "FHD": [
+ "hevc-main-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc-prk",
+ "hevc-main-L31-dash-cenc"
+ "hevc-main10-L31-dash-cenc",
+ "hevc-main10-L31-dash-cenc-prk",
+ "hevc-main-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc-prk",
+ "hevc-main-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc-prk",
+ ],
+ "ALL": [
+ "hevc-main-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc",
+ "hevc-main10-L30-dash-cenc-prk",
+ "hevc-main-L31-dash-cenc"
+ "hevc-main10-L31-dash-cenc",
+ "hevc-main10-L31-dash-cenc-prk",
+ "hevc-main-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc",
+ "hevc-main10-L40-dash-cenc-prk",
+ "hevc-main-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc",
+ "hevc-main10-L41-dash-cenc-prk",
+ ],
+ },
+ "HEVCDO": {
+ "SD": [
+ "hevc-main10-L30-dash-cenc-prk-do",
+ ],
+ "HD": [
+ "hevc-main10-L30-dash-cenc-prk-do",
+ "hevc-main10-L31-dash-cenc-prk-do"
+ ],
+ "FHD": [
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L40-dash-cenc-prk-do",
+ "hevc-main10-L41-dash-cenc-prk-do",
+ ],
+ "ALL": [
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L31-dash-cenc-prk-do",
+ "hevc-main10-L40-dash-cenc-prk-do",
+ "hevc-main10-L41-dash-cenc-prk-do",
+ ],
+ },
+ "HDR": {
+ "SD": [
+ "hevc-hdr-main10-L30-dash-cenc",
+ "hevc-hdr-main10-L30-dash-cenc-prk",
+ ],
+ "HD": [
+ "hevc-hdr-main10-L30-dash-cenc",
+ "hevc-hdr-main10-L30-dash-cenc-prk",
+ "hevc-hdr-main10-L31-dash-cenc",
+ "hevc-hdr-main10-L31-dash-cenc-prk",
+ ],
+ "FHD": [
+ "hevc-hdr-main10-L30-dash-cenc",
+ "hevc-hdr-main10-L30-dash-cenc-prk",
+ "hevc-hdr-main10-L31-dash-cenc",
+ "hevc-hdr-main10-L31-dash-cenc-prk",
+ "hevc-hdr-main10-L40-dash-cenc",
+ "hevc-hdr-main10-L41-dash-cenc",
+ "hevc-hdr-main10-L40-dash-cenc-prk",
+ "hevc-hdr-main10-L41-dash-cenc-prk",
+ ],
+ "ALL": [
+ "hevc-hdr-main10-L30-dash-cenc",
+ "hevc-hdr-main10-L30-dash-cenc-prk",
+ "hevc-hdr-main10-L31-dash-cenc",
+ "hevc-hdr-main10-L31-dash-cenc-prk",
+ "hevc-hdr-main10-L40-dash-cenc",
+ "hevc-hdr-main10-L41-dash-cenc",
+ "hevc-hdr-main10-L40-dash-cenc-prk",
+ "hevc-hdr-main10-L41-dash-cenc-prk",
+ ],
+ },
+ }
+
+ return PROFILES
+
+class get_manifest:
+
+ def __init__(self, args, nfid):
+ self.logger = logging.getLogger(__name__)
+ self.args = args
+ self.nfid = nfid
+ self.ripprocess = ripprocess()
+ self.profiles = MSLprofiles()
+ self.config = tool().config("NETFLIX")
+
+ def LoadProfies(self, addHEVCDO=False):
+ getHigh = False
+ profiles = self.profiles["BASICS"]
+
+ if self.args.video_main:
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["MAIN"]["FHD"]
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["MAIN"]["HD"]
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["MAIN"]["SD"]
+ else:
+ profiles += self.profiles["MAIN"]["ALL"]
+ else:
+ if self.args.video_high:
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["HIGH"]["FHD"]
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["HIGH"]["HD"]
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["HIGH"]["SD"]
+ else:
+ profiles += self.profiles["HIGH"]["ALL"]
+ else:
+ if self.args.hdr:
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["HDR"]["FHD"]
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["HDR"]["HD"]
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["HDR"]["SD"]
+ else:
+ profiles += self.profiles["HDR"]["ALL"]
+
+ elif self.args.hevc:
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["HEVC"]["FHD"]
+ if addHEVCDO:
+ profiles += self.profiles['HEVCDO']['FHD']
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["HEVC"]["HD"]
+ if addHEVCDO:
+ profiles += self.profiles['HEVCDO']['HD']
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["HEVC"]["SD"]
+ if addHEVCDO:
+ profiles += self.profiles['HEVCDO']['SD']
+ else:
+ profiles += self.profiles["HEVC"]["ALL"]
+ if addHEVCDO:
+ profiles += self.profiles['HEVCDO']['ALL']
+
+ else:
+ getHigh = True
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["MAIN"]["FHD"]
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["MAIN"]["HD"]
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["MAIN"]["SD"]
+ else:
+ profiles += self.profiles["MAIN"]["ALL"]
+
+ if self.args.aformat_2ch:
+ if str(self.args.aformat_2ch[0]) == "aac":
+ profiles.append("heaac-2-dash")
+ profiles.append("heaac-2hq-dash")
+ elif str(self.args.aformat_2ch[0]) == "eac3":
+ profiles.append("ddplus-2.0-dash")
+ elif str(self.args.aformat_2ch[0]) == "ogg":
+ profiles.append("playready-oggvorbis-2-dash")
+ else:
+ if self.args.only_2ch_audio:
+ profiles.append("ddplus-2.0-dash")
+ else:
+ if self.args.aformat_51ch:
+ if str(self.args.aformat_51ch[0]) == "aac":
+ profiles.append("heaac-5.1-dash")
+ profiles.append("heaac-5.1hq-dash")
+ elif str(self.args.aformat_51ch[0]) == "eac3":
+ profiles.append("ddplus-5.1-dash")
+ profiles.append("ddplus-5.1hq-dash")
+ elif str(self.args.aformat_51ch[0]) == "ac3":
+ profiles.append("dd-5.1-dash")
+ elif str(self.args.aformat_51ch[0]) == "atmos":
+ profiles.append("dd-5.1-dash")
+ profiles.append("ddplus-atmos-dash")
+ else:
+ profiles.append("dd-5.1-dash")
+ profiles.append("ddplus-5.1-dash")
+ profiles.append("ddplus-5.1hq-dash")
+ else:
+ profiles.append("ddplus-2.0-dash")
+ profiles.append("dd-5.1-dash")
+ profiles.append("ddplus-5.1-dash")
+ profiles.append("ddplus-5.1hq-dash")
+ profiles.append("ddplus-atmos-dash")
+
+ return list(set(profiles)), getHigh
+
+ def PyMSL(self, profiles):
+
+ client = MSLClient(profiles=profiles)
+
+ try:
+ resp = client.load_playlist(int(self.nfid))
+ return resp
+
+ except Exception as e:
+ self.logger.error("Manifest Error: {}".format(e))
+
+ return None
+
+ def HighVideoMSL(self):
+ # for bitrate compare with main ~
+
+ self.logger.info("Getting High Profile Manifest...")
+
+ profiles = self.profiles["BASICS"]
+
+ if self.args.customquality:
+ if int(self.args.customquality[0]) == 1080:
+ profiles += self.profiles["HIGH"]["FHD"]
+ elif (
+ int(self.args.customquality[0]) < 1080
+ and int(self.args.customquality[0]) >= 720
+ ):
+ profiles += self.profiles["HIGH"]["HD"]
+ elif int(self.args.customquality[0]) < 720:
+ profiles += self.profiles["HIGH"]["SD"]
+ else:
+ profiles += self.profiles["HIGH"]["ALL"]
+
+ resp = self.PyMSL(profiles=profiles)
+
+ VideoList = list()
+
+ manifest = resp["result"]
+
+ for video_track in manifest["video_tracks"]:
+ for downloadable in video_track["streams"]:
+ size_in_bytes = int(float(downloadable["size"]))
+ vid_size = (
+ f"{size_in_bytes/1048576:0.2f} MiB"
+ if size_in_bytes < 1073741824
+ else f"{size_in_bytes/1073741824:0.2f} GiB"
+ )
+ vid_url = downloadable["urls"][0]["url"]
+ L3 = 'L3' if 'SEGMENT_MAP_2KEY' in str(downloadable['tags']) else '' #
+
+ VideoList.append(
+ {
+ "Type": "video",
+ "Drm": downloadable["isDrm"],
+ "vmaf": downloadable["vmaf"],
+ "FrameRate": downloadable["framerate_value"],
+ "Height": downloadable["res_h"],
+ "Width": downloadable["res_w"],
+ "Size": vid_size,
+ "Url": vid_url,
+ "Bitrate": str(downloadable["bitrate"]),
+ "Profile": downloadable["content_profile"],
+ "L3": L3 #
+ }
+ )
+
+ VideoList = sorted(VideoList, key=lambda k: int(k["Bitrate"]))
+
+ if self.args.customquality:
+ inp_height = int(self.args.customquality[0])
+ top_height = sorted(VideoList, key=lambda k: int(k["Height"]))[-1]["Height"]
+
+ if top_height >= inp_height:
+ height = [x for x in VideoList if int(x["Height"]) >= inp_height]
+ if not height == []:
+ VideoList = height
+
+ return VideoList
+
+ def ParseVideo(self, resp, getHigh):
+ manifest = resp["result"]
+ VideoList = []
+ checkerinfo = ""
+
+ for video_track in manifest["video_tracks"]:
+ for downloadable in video_track["streams"]:
+ size_in_bytes = int(float(downloadable["size"]))
+ vid_size = (
+ f"{size_in_bytes/1048576:0.2f} MiB"
+ if size_in_bytes < 1073741824
+ else f"{size_in_bytes/1073741824:0.2f} GiB"
+ )
+ vid_url = downloadable["urls"][0]["url"]
+
+ VideoList.append(
+ {
+ "Type": "video",
+ "Drm": downloadable["isDrm"],
+ "vmaf": downloadable["vmaf"],
+ "FrameRate": downloadable["framerate_value"],
+ "Height": downloadable["res_h"],
+ "Width": downloadable["res_w"],
+ "Size": vid_size,
+ "Url": vid_url,
+ "Bitrate": str(downloadable["bitrate"]),
+ "Profile": downloadable["content_profile"],
+ }
+ )
+
+ VideoList = sorted(VideoList, key=lambda k: int(k["Bitrate"]))
+ self.logger.debug("VideoList: {}".format(VideoList))
+
+ if self.args.customquality:
+ inp_height = int(self.args.customquality[0])
+ top_height = sorted(VideoList, key=lambda k: int(k["Height"]))[-1]["Height"]
+
+ if top_height >= inp_height:
+ height = [x for x in VideoList if int(x["Height"]) >= inp_height]
+ if not height == []:
+ VideoList = height
+
+ if getHigh:
+ HighVideoList = self.HighVideoMSL()
+ if not HighVideoList == []:
+ checkerinfo = "\nNetflix Profile Checker v1.0\nMAIN: {}kbps | {}\nHIGH: {}kbps | {}\n\n{}\n"
+ checkerinfo = checkerinfo.format(
+ str(dict(VideoList[-1])["Bitrate"]),
+ str(dict(VideoList[-1])["Profile"]),
+ str(dict(HighVideoList[-1])["Bitrate"]),
+ str(dict(HighVideoList[-1])["Profile"]),
+ "result: MAIN is Better"
+ if int(dict(VideoList[-1])["Bitrate"])
+ >= int(dict(HighVideoList[-1])["Bitrate"])
+ else "result: HIGH is Better",
+ )
+
+ VideoList += HighVideoList
+ self.logger.debug("HighVideoList: {}".format(HighVideoList))
+
+ VideoList = sorted(VideoList, key=lambda k: int(k["Bitrate"]))
+
+ return VideoList, checkerinfo
+
+ def ParseAudioSubs(self, resp):
+
+ def remove_dups(List, keyword=""):
+ # function to remove all dups based on list items ~
+ Added_ = set()
+ Proper_ = []
+ for L in List:
+ if L[keyword] not in Added_:
+ Proper_.append(L)
+ Added_.add(L[keyword])
+
+ return Proper_
+
+ def isOriginal(language_text):
+ # function to detect the original audio ~
+ if "Original" in language_text:
+ return True
+
+ brackets = re.search(r"\[(.*)\]", language_text)
+ if brackets:
+ return True
+
+ return False
+
+ def noOriginal(language_text):
+ # function to remove (original) from audio language to be detected in --alang ~
+ brackets = re.search(r"\[(.*)\]", language_text)
+ if brackets:
+ return language_text.replace(brackets[0], "").strip()
+
+ return language_text
+
+ # start audio, subs parsing ~
+
+ manifest = resp["result"]
+
+ AudioList, SubtitleList, ForcedList = list(), list(), list()
+
+ # parse audios and return all (AD, non AD) as a list
+ for audio_track in manifest["audio_tracks"]:
+ AudioDescription = 'Audio Description' if "audio description" in \
+ audio_track["languageDescription"].lower() else 'Audio'
+ Original = isOriginal(audio_track["languageDescription"])
+ LanguageName, LanguageCode = self.ripprocess.countrycode(
+ audio_track["language"]
+ )
+ LanguageName = noOriginal(audio_track["languageDescription"])
+
+ for downloadable in audio_track["streams"]:
+ aud_url = downloadable["urls"][0]["url"]
+ size = (
+ str(format(float(int(downloadable["size"])) / 1058816, ".2f"))
+ + " MiB"
+ )
+
+ audioDict = {
+ "Type": AudioDescription,
+ "Drm": downloadable["isDrm"],
+ "Original": Original,
+ "Language": LanguageName,
+ "langAbbrev": LanguageCode,
+ "Size": size,
+ "Url": aud_url,
+ "channels": str(downloadable["channels"]),
+ "Bitrate": str(downloadable["bitrate"]),
+ "Profile": downloadable["content_profile"],
+ }
+
+ if self.args.custom_audio_bitrate:
+ # only append the audio langs with the given bitrate
+ if int(downloadable["bitrate"]) <= \
+ int(self.args.custom_audio_bitrate[0]):
+ AudioList.append(audioDict)
+ else:
+ AudioList.append(audioDict)
+
+ AudioList = sorted(AudioList, key=lambda k: int(k["Bitrate"]), reverse=True)
+
+ self.logger.debug("AudioList: {}".format(AudioList))
+
+ #################################################################################
+
+ AudioList = sorted( # keep only highest bitrate for every language
+ remove_dups(AudioList, keyword="Language"),
+ key=lambda k: int(k["Bitrate"]),
+ reverse=True,
+ )
+
+ OriginalAudioList = ( # for detect automatically forced subs ~
+ AudioList
+ if len(AudioList) == 1
+ else [x for x in AudioList if x["Original"]]
+ )
+
+ #################################################################################
+
+ # now parser AudioList based on user input to
+ # --alang X X --AD X X or original if none
+
+ if self.args.AD:
+ ADlist = list()
+ UserLanguagesLower = list(map(lambda x: x.lower(), self.args.AD))
+ for aud in AudioList:
+ if aud['Type'] == 'Audio':
+ if self.args.allaudios:
+ ADlist.append(aud)
+ else:
+ if aud["Original"]:
+ ADlist.append(aud)
+
+ if aud['Type'] == 'Audio Description':
+ if (
+ aud["Language"].lower() in UserLanguagesLower
+ or aud["langAbbrev"].lower() in UserLanguagesLower
+ ):
+ ADlist.append(aud)
+
+ AudioList = ADlist
+
+ if self.args.audiolang:
+ NewAudioList = list()
+ UserLanguagesLower = list(map(lambda x: x.lower(), self.args.audiolang))
+ for aud in AudioList:
+ if self.args.AD:
+ # I already have AD langs parsed
+ if aud['Type'] == 'Audio Description':
+ NewAudioList.append(aud)
+ if aud['Type'] == 'Audio':
+ if (
+ aud["Language"].lower() in UserLanguagesLower
+ or aud["langAbbrev"].lower() in UserLanguagesLower
+ ):
+ NewAudioList.append(aud)
+
+ AudioList = NewAudioList
+
+ else:
+ # so I know have the complete Audiolist
+ if self.args.allaudios: # remove AD tracks if not --AD X X
+ AllaudiosList = list()
+ if self.args.AD:
+ for aud in AudioList:
+ AllaudiosList.append(aud)
+ AudioList = AllaudiosList
+ else:
+ for aud in AudioList:
+ if aud['Type'] == 'Audio':
+ AllaudiosList.append(aud)
+ AudioList.clear()
+ AudioList = AllaudiosList
+
+ else:
+ if self.args.AD:
+ AudioList = AudioList # I mean the ADlist
+ else:
+ # I mean no audio options are given, so we go with the original
+ AudioList = [x for x in AudioList if x["Original"] or len(AudioList) == 1]
+
+ #####################################(Subtitles)#####################################
+
+ for text_track in manifest["timedtexttracks"]:
+ if (
+ not text_track["languageDescription"] == "Off"
+ and text_track["language"] is not None
+ ):
+ Language, langAbbrev = self.ripprocess.countrycode(
+ text_track["language"]
+ )
+ Language = text_track["languageDescription"]
+ Type = text_track["trackType"]
+ rawTrackType = (
+ text_track["rawTrackType"]
+ .replace("closedcaptions", "CC")
+ .replace("subtitles", "SUB")
+ )
+ isForced = "NO"
+
+ if (
+ "CC" in rawTrackType
+ and langAbbrev != "ara"
+ and "dfxp-ls-sdh" in str(text_track["ttDownloadables"])
+ ):
+ Profile = "dfxp-ls-sdh"
+ Url = next(
+ iter(
+ text_track["ttDownloadables"]["dfxp-ls-sdh"][
+ "downloadUrls"
+ ].values()
+ )
+ )
+ else:
+ Profile = "webvtt-lssdh-ios8"
+ Url = next(
+ iter(
+ text_track["ttDownloadables"]["webvtt-lssdh-ios8"][
+ "downloadUrls"
+ ].values()
+ )
+ )
+
+ SubtitleList.append(
+ {
+ "Type": Type,
+ "rawTrackType": rawTrackType,
+ "Language": Language,
+ "isForced": isForced,
+ "langAbbrev": langAbbrev,
+ "Url": Url,
+ "Profile": Profile,
+ }
+ )
+
+ self.logger.debug("SubtitleList: {}".format(SubtitleList))
+ SubtitleList = remove_dups(SubtitleList, keyword="Language")
+
+ if self.args.sublang:
+ NewSubtitleList = list()
+ UserLanguagesLower = list(map(lambda x: x.lower(), self.args.sublang))
+ for sub in SubtitleList:
+ if (
+ sub["Language"].lower() in UserLanguagesLower
+ or sub["langAbbrev"].lower() in UserLanguagesLower
+ ):
+ NewSubtitleList.append(sub)
+ SubtitleList = remove_dups(NewSubtitleList, keyword="Language")
+
+ #####################################(Forced Subtitles)###############################
+
+ for text_track in manifest["timedtexttracks"]:
+ if text_track["isForcedNarrative"] and text_track["language"] is not None:
+ LanguageName, LanguageCode = self.ripprocess.countrycode(
+ text_track["language"]
+ )
+ # LanguageName = text_track["languageDescription"] # no i will use pycountry instead bcs it's off dude.
+ ForcedList.append(
+ {
+ "Type": text_track["trackType"],
+ "rawTrackType": text_track["rawTrackType"]
+ .replace("closedcaptions", "CC ")
+ .replace("subtitles", "SUB"),
+ "Language": LanguageName,
+ "isForced": "YES",
+ "langAbbrev": LanguageCode,
+ "Url": next(
+ iter(
+ text_track["ttDownloadables"]["webvtt-lssdh-ios8"][
+ "downloadUrls"
+ ].values()
+ )
+ ),
+ "Profile": "webvtt-lssdh-ios8",
+ }
+ )
+
+ ForcedList = remove_dups(ForcedList, keyword="Language")
+
+ if self.args.forcedlang:
+ NewForcedList = []
+ UserLanguagesLower = list(map(lambda x: x.lower(), self.args.forcedlang))
+ for sub in ForcedList:
+ if (
+ sub["Language"].lower() in UserLanguagesLower
+ or sub["langAbbrev"].lower() in UserLanguagesLower
+ ):
+ NewForcedList.append(sub)
+ ForcedList = remove_dups(NewForcedList, keyword="Language")
+ else:
+ if not self.args.allforcedlang:
+ if len(OriginalAudioList) != 0:
+ OriginalLanguage = OriginalAudioList[0]["langAbbrev"]
+ ForcedList = [
+ x for x in ForcedList if x["langAbbrev"] == OriginalLanguage
+ ]
+
+ return AudioList, SubtitleList, ForcedList
+
+ def LoadManifest(self):
+
+ profiles, getHigh = self.LoadProfies()
+
+ if self.args.hevc:
+ self.logger.info("Getting HEVC Manifest...")
+ elif self.args.hdr:
+ self.logger.info("Getting HDR-10 Manifest...")
+ elif self.args.video_high:
+ self.logger.info("Getting High Profile Manifest...")
+ else:
+ self.logger.info("Getting Main Profile Manifest...")
+
+ resp = self.PyMSL(profiles=profiles)
+
+ if not resp:
+ if self.args.hevc:
+ profiles, getHigh = self.LoadProfies(addHEVCDO=True)
+ self.logger.info('\nGetting HEVC DO Manifest...')
+ resp = self.PyMSL(profiles=profiles)
+
+ if not resp:
+ self.logger.info("Failed getting Manifest")
+ exit(-1)
+
+ VideoList, checkerinfo = self.ParseVideo(resp, getHigh)
+ AudioList, SubtitleList, ForcedList = self.ParseAudioSubs(resp)
+
+ return VideoList, AudioList, SubtitleList, ForcedList, checkerinfo
diff --git a/helpers/__init__.py b/helpers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/helpers/__pycache__/Muxer.cpython-36.pyc b/helpers/__pycache__/Muxer.cpython-36.pyc
new file mode 100644
index 0000000..85a6a06
Binary files /dev/null and b/helpers/__pycache__/Muxer.cpython-36.pyc differ
diff --git a/helpers/__pycache__/Muxer.cpython-39.pyc b/helpers/__pycache__/Muxer.cpython-39.pyc
new file mode 100644
index 0000000..94e1ec7
Binary files /dev/null and b/helpers/__pycache__/Muxer.cpython-39.pyc differ
diff --git a/helpers/__pycache__/__init__.cpython-36.pyc b/helpers/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..b94936e
Binary files /dev/null and b/helpers/__pycache__/__init__.cpython-36.pyc differ
diff --git a/helpers/__pycache__/__init__.cpython-39.pyc b/helpers/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..cad0320
Binary files /dev/null and b/helpers/__pycache__/__init__.cpython-39.pyc differ
diff --git a/helpers/__pycache__/aria2.cpython-36.pyc b/helpers/__pycache__/aria2.cpython-36.pyc
new file mode 100644
index 0000000..7699647
Binary files /dev/null and b/helpers/__pycache__/aria2.cpython-36.pyc differ
diff --git a/helpers/__pycache__/aria2.cpython-39.pyc b/helpers/__pycache__/aria2.cpython-39.pyc
new file mode 100644
index 0000000..d6e5da1
Binary files /dev/null and b/helpers/__pycache__/aria2.cpython-39.pyc differ
diff --git a/helpers/__pycache__/dfxp_to_srt.cpython-36.pyc b/helpers/__pycache__/dfxp_to_srt.cpython-36.pyc
new file mode 100644
index 0000000..b556834
Binary files /dev/null and b/helpers/__pycache__/dfxp_to_srt.cpython-36.pyc differ
diff --git a/helpers/__pycache__/dfxp_to_srt.cpython-39.pyc b/helpers/__pycache__/dfxp_to_srt.cpython-39.pyc
new file mode 100644
index 0000000..f7fa32f
Binary files /dev/null and b/helpers/__pycache__/dfxp_to_srt.cpython-39.pyc differ
diff --git a/helpers/__pycache__/keyloader.cpython-36.pyc b/helpers/__pycache__/keyloader.cpython-36.pyc
new file mode 100644
index 0000000..5c2e9a5
Binary files /dev/null and b/helpers/__pycache__/keyloader.cpython-36.pyc differ
diff --git a/helpers/__pycache__/keyloader.cpython-39.pyc b/helpers/__pycache__/keyloader.cpython-39.pyc
new file mode 100644
index 0000000..9675e7b
Binary files /dev/null and b/helpers/__pycache__/keyloader.cpython-39.pyc differ
diff --git a/helpers/__pycache__/proxy_environ.cpython-36.pyc b/helpers/__pycache__/proxy_environ.cpython-36.pyc
new file mode 100644
index 0000000..54e2150
Binary files /dev/null and b/helpers/__pycache__/proxy_environ.cpython-36.pyc differ
diff --git a/helpers/__pycache__/proxy_environ.cpython-39.pyc b/helpers/__pycache__/proxy_environ.cpython-39.pyc
new file mode 100644
index 0000000..c224e4d
Binary files /dev/null and b/helpers/__pycache__/proxy_environ.cpython-39.pyc differ
diff --git a/helpers/__pycache__/ripprocess.cpython-36.pyc b/helpers/__pycache__/ripprocess.cpython-36.pyc
new file mode 100644
index 0000000..9878c94
Binary files /dev/null and b/helpers/__pycache__/ripprocess.cpython-36.pyc differ
diff --git a/helpers/__pycache__/ripprocess.cpython-39.pyc b/helpers/__pycache__/ripprocess.cpython-39.pyc
new file mode 100644
index 0000000..a79cd23
Binary files /dev/null and b/helpers/__pycache__/ripprocess.cpython-39.pyc differ
diff --git a/helpers/__pycache__/vpn.cpython-36.pyc b/helpers/__pycache__/vpn.cpython-36.pyc
new file mode 100644
index 0000000..b2babd4
Binary files /dev/null and b/helpers/__pycache__/vpn.cpython-36.pyc differ
diff --git a/helpers/__pycache__/vpn.cpython-39.pyc b/helpers/__pycache__/vpn.cpython-39.pyc
new file mode 100644
index 0000000..24b65ce
Binary files /dev/null and b/helpers/__pycache__/vpn.cpython-39.pyc differ
diff --git a/helpers/aria2.py b/helpers/aria2.py
new file mode 100644
index 0000000..1e3d012
--- /dev/null
+++ b/helpers/aria2.py
@@ -0,0 +1,369 @@
+import os
+import shutil
+import subprocess
+import sys
+import re
+import logging
+from configs.config import tool
+from helpers.ripprocess import ripprocess
+
+
+class aria2Error(Exception):
+ pass
+
+
+class aria2_moded:
+ def __init__(self, aria2_download_command):
+ self.logger = logging.getLogger(__name__)
+ self.aria2_download_command = aria2_download_command
+ self.env = self.aria2DisableProxies()
+ self.ripprocess = ripprocess()
+ self.tool = tool()
+ self.LOGA_PATH = self.tool.paths()["LOGA_PATH"]
+ self.bin = self.tool.bin()
+ self.aria2c_exe = self.bin["aria2c"]
+ self.last_message_printed = 0
+ self.speed_radar = "0kbps"
+
+ def aria2DisableProxies(self):
+ env = os.environ.copy()
+
+ if env.get("http_proxy"):
+ del env["http_proxy"]
+
+ if env.get("HTTP_PROXY"):
+ del env["HTTP_PROXY"]
+
+ if env.get("https_proxy"):
+ del env["https_proxy"]
+
+ if env.get("HTTPS_PROXY"):
+ del env["HTTPS_PROXY"]
+
+ return env
+
+ def read_stdout(self, line):
+ speed = re.search(r"DL:(.+?)ETA", line)
+ eta = re.search(r"ETA:(.+?)]", line)
+ connection = re.search(r"CN:(.+?)DL", line)
+ percent = re.search(r"\((.*?)\)", line)
+ size = re.search(r" (.*?)/(.*?)\(", line)
+
+ if speed and eta and connection and percent and size:
+ percent = percent.group().strip().replace(")", "").replace("(", "")
+ size = size.group().strip().replace(")", "").replace("(", "")
+ complete, total = size.split("/")
+ connection = connection.group(1).strip()
+ eta = eta.group(1).strip()
+ speed = speed.group(1).strip()
+ self.speed_radar = speed
+
+ stdout_data = {
+ "percent": str(percent),
+ "size": str(total),
+ "complete": str(complete),
+ "total": str(total),
+ "connection": str(connection),
+ "eta": str(eta),
+ "speed": str(speed),
+ }
+
+ return stdout_data
+
+ return None
+
+ def if_errors(self, line):
+ if "exception" in str(line).lower() or "errorcode" in str(line).lower():
+ return line
+ return None
+
+ def delete_last_message_printed(self):
+ print(" " * len(str(self.last_message_printed)), end="\r")
+
+ def get_status(self, stdout_data: dict):
+ return "Aria2c_Status; Size: {Size} | Speed: {Speed} | ETA: {ETA} | Progress: {Complete} -> {Total} ({Percent})".format(
+ Size=stdout_data.get("size"),
+ Speed=stdout_data.get("speed"),
+ ETA=stdout_data.get("eta"),
+ Complete=stdout_data.get("complete"),
+ Total=stdout_data.get("total"),
+ Percent=stdout_data.get("percent"),
+ )
+
+ def is_download_completed(self, line):
+ if "(ok):download completed." in str(line).lower():
+ return "Download completed: (OK) ({}\\s)".format(self.speed_radar)
+ return None
+
+ def start_download(self):
+ proc = subprocess.Popen(
+ self.aria2_download_command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ bufsize=1,
+ universal_newlines=True,
+ env=self.env,
+ )
+
+ check_errors = True
+ for line in getattr(proc, "stdout"):
+ if check_errors:
+ if self.if_errors(line):
+ raise aria2Error("Aria2c Error {}".format(self.if_errors(line)))
+ check_errors = False
+ stdout_data = self.read_stdout(line)
+ if stdout_data:
+ status_text = self.get_status(stdout_data)
+ self.delete_last_message_printed()
+ print(status_text, end="\r", flush=True)
+ self.last_message_printed = status_text
+ else:
+ download_finished = self.is_download_completed(line)
+ if download_finished:
+ self.delete_last_message_printed()
+ print(download_finished, end="\r", flush=True)
+ self.last_message_printed = download_finished
+ self.logger.info("")
+ return
+
+
+class aria2:
+ def __init__(self,):
+ self.env = self.aria2DisableProxies()
+ self.ripprocess = ripprocess()
+ self.tool = tool()
+ self.bin = self.tool.bin()
+ self.LOGA_PATH = self.tool.paths()["LOGA_PATH"]
+ self.config = self.tool.aria2c()
+ self.aria2c_exe = self.bin["aria2c"]
+ self.logger = logging.getLogger(__name__)
+
+ def convert_args(self, arg):
+ if arg is True:
+ return "true"
+ elif arg is False:
+ return "false"
+ elif arg is None:
+ return "none"
+ else:
+ return str(arg)
+
+ def append_commands(self, command, option_define, option):
+ if option == "skip":
+ return []
+
+ return ["{}{}".format(option_define, option)]
+
+ def append_two_commands(self, command, cmd1, cmd2):
+ if cmd2 == "skip":
+ return []
+
+ return [cmd1] + [cmd2]
+
+ def aria2Options(
+ self,
+ allow_overwrite=True,
+ file_allocation=None,
+ auto_file_renaming=False,
+ async_dns=False,
+ retry_wait=5,
+ summary_interval=0,
+ enable_color=False,
+ connection=16,
+ concurrent_downloads=16,
+ split=16,
+ header="skip",
+ user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
+ uri_selector="inorder",
+ console_log_level="skip",
+ download_result="hide",
+ quiet="false",
+ extra_commands=[],
+ ):
+
+ options = [] + extra_commands
+ allow_overwrite = self.convert_args(allow_overwrite)
+ quiet = self.convert_args(quiet)
+ file_allocation = self.convert_args(file_allocation)
+ auto_file_renaming = self.convert_args(auto_file_renaming)
+ async_dns = self.convert_args(async_dns)
+ retry_wait = self.convert_args(retry_wait)
+ enable_color = self.convert_args(enable_color)
+ connection = self.convert_args(connection)
+ concurrent_downloads = self.convert_args(concurrent_downloads)
+ split = self.convert_args(split)
+ header = self.convert_args(header)
+ uri_selector = self.convert_args(uri_selector)
+ console_log_level = self.convert_args(console_log_level)
+ download_result = self.convert_args(download_result)
+
+ ##############################################################################
+
+ options += self.append_commands(options, "--allow-overwrite=", allow_overwrite)
+ options += self.append_commands(options, "--quiet=", quiet)
+ options += self.append_commands(options, "--file-allocation=", file_allocation)
+ options += self.append_commands(
+ options, "--auto-file-renaming=", auto_file_renaming
+ )
+ options += self.append_commands(options, "--async-dns=", async_dns)
+ options += self.append_commands(options, "--retry-wait=", retry_wait)
+ options += self.append_commands(options, "--enable-color=", enable_color)
+
+ options += self.append_commands(
+ options, "--max-connection-per-server=", connection
+ )
+
+ options += self.append_commands(
+ options, "--max-concurrent-downloads=", concurrent_downloads
+ )
+ options += self.append_commands(options, "--split=", split)
+ options += self.append_commands(options, "--header=", header)
+ options += self.append_commands(options, "--uri-selector=", uri_selector)
+ options += self.append_commands(
+ options, "--console-log-level=", console_log_level
+ )
+ options += self.append_commands(options, "--download-result=", download_result)
+
+ return options
+
+ def aria2DisableProxies(self):
+ env = os.environ.copy()
+
+ if env.get("http_proxy"):
+ del env["http_proxy"]
+
+ if env.get("HTTP_PROXY"):
+ del env["HTTP_PROXY"]
+
+ if env.get("https_proxy"):
+ del env["https_proxy"]
+
+ if env.get("HTTPS_PROXY"):
+ del env["HTTPS_PROXY"]
+
+ return env
+
+ def aria2DownloadUrl(self, url, output, options, debug=False, moded=False):
+ self.debug = debug
+ aria2_download_command = [self.aria2c_exe] + options
+
+ if self.config["enable_logging"]:
+ LogFile = os.path.join(self.LOGA_PATH, output.replace(".mp4", ".log"))
+ if os.path.isfile(LogFile):
+ os.remove(LogFile)
+ aria2_download_command.append("--log={}".format(LogFile))
+
+ if not url.startswith("http"):
+ raise aria2Error("Url does not start with http/https: {}".format(url))
+
+ aria2_download_command.append(url)
+ aria2_download_command += self.append_two_commands(
+ aria2_download_command, "-o", output
+ )
+
+ self.aria2Debug("Sending Commands to aria2c...")
+ self.aria2Debug(aria2_download_command)
+ self.logger.debug("aria2_download_command: {}".format(aria2_download_command))
+
+ if moded:
+ aria2_moded_download = aria2_moded(aria2_download_command)
+ aria2_moded_download.start_download()
+ else:
+ try:
+ aria = subprocess.call(aria2_download_command, env=self.env)
+ except FileNotFoundError:
+ self.logger.info("UNABLE TO FIND {}".format(self.aria2c_exe))
+ exit(-1)
+ if aria != 0:
+ raise aria2Error("Aria2c exited with code {}".format(aria))
+
+ return
+
+ def aria2DownloadDash(
+ self, segments, output, options, debug=False, moded=False, fixbytes=False
+ ):
+ self.debug = debug
+ aria2_download_command = [self.aria2c_exe] + options
+
+ if self.config["enable_logging"]:
+ LogFile = os.path.join(self.LOGA_PATH, output.replace(".mp4", ".log"))
+ if os.path.isfile(LogFile):
+ os.remove(LogFile)
+ aria2_download_command.append("--log={}".format(LogFile))
+
+ if not isinstance(segments, list) or segments == []:
+ raise aria2Error("invalid list of urls: {}".format(segments))
+
+ if moded:
+ raise aria2Error("moded version not supported for dash downloads atm...")
+
+ txt = output.replace(".mp4", ".txt")
+ folder = output.replace(".mp4", "")
+ segments = list(dict.fromkeys(segments))
+
+ if os.path.exists(folder):
+ shutil.rmtree(folder)
+ if not os.path.exists(folder):
+ os.makedirs(folder)
+
+ segments_location = []
+
+ opened_txt = open(txt, "w+")
+ for num, url in enumerate(segments, start=1):
+ segment_name = str(num).zfill(5) + ".mp4"
+ segments_location.append(os.path.join(*[os.getcwd(), folder, segment_name]))
+ opened_txt.write(url + f"\n out={segment_name}" + f"\n dir={folder}" + "\n")
+ opened_txt.close()
+
+ aria2_download_command += self.append_commands(
+ aria2_download_command, "--input-file=", txt
+ )
+
+ try:
+ aria = subprocess.call(aria2_download_command, env=self.env)
+ except FileNotFoundError:
+ self.logger.info("UNABLE TO FIND {}".format(self.aria2c_exe))
+ exit(-1)
+ if aria != 0:
+ raise aria2Error("Aria2c exited with code {}".format(aria))
+
+ self.logger.info("\nJoining files...")
+ openfile = open(output, "wb")
+ total = int(len(segments_location))
+ for current, fragment in enumerate(segments_location):
+ if os.path.isfile(fragment):
+ if fixbytes:
+ with open(fragment, "rb") as f:
+ wvdll = f.read()
+ if (
+ re.search(
+ b"tfhd\x00\x02\x00\x1a\x00\x00\x00\x01\x00\x00\x00\x02",
+ wvdll,
+ re.MULTILINE | re.DOTALL,
+ )
+ is not None
+ ):
+ fw = open(fragment, "wb")
+ m = re.search(
+ b"tfhd\x00\x02\x00\x1a\x00\x00\x00\x01\x00\x00\x00",
+ wvdll,
+ re.MULTILINE | re.DOTALL,
+ )
+ segment_fixed = (
+ wvdll[: m.end()] + b"\x01" + wvdll[m.end() + 1 :]
+ )
+ fw.write(segment_fixed)
+ fw.close()
+ shutil.copyfileobj(open(fragment, "rb"), openfile)
+ os.remove(fragment)
+ self.ripprocess.updt(total, current + 1)
+ openfile.close()
+
+ if os.path.isfile(txt):
+ os.remove(txt)
+ if os.path.exists(folder):
+ shutil.rmtree(folder)
+
+ def aria2Debug(self, txt):
+ if self.debug:
+ self.logger.info(txt)
diff --git a/helpers/dfxp_to_srt.py b/helpers/dfxp_to_srt.py
new file mode 100644
index 0000000..12486e5
--- /dev/null
+++ b/helpers/dfxp_to_srt.py
@@ -0,0 +1,116 @@
+import codecs
+import math
+import os
+import re
+
+
+class dfxp_to_srt:
+ def __init__(self):
+ self.__replace__ = "empty_line"
+
+ def leading_zeros(self, value, digits=2):
+ value = "000000" + str(value)
+ return value[-digits:]
+
+ def convert_time(self, raw_time):
+ if int(raw_time) == 0:
+ return "{}:{}:{},{}".format(0, 0, 0, 0)
+
+ ms = "000"
+ if len(raw_time) > 4:
+ ms = self.leading_zeros(int(raw_time[:-4]) % 1000, 3)
+ time_in_seconds = int(raw_time[:-7]) if len(raw_time) > 7 else 0
+ second = self.leading_zeros(time_in_seconds % 60)
+ minute = self.leading_zeros(int(math.floor(time_in_seconds / 60)) % 60)
+ hour = self.leading_zeros(int(math.floor(time_in_seconds / 3600)))
+ return "{}:{}:{},{}".format(hour, minute, second, ms)
+
+ def xml_id_display_align_before(self, text):
+
+ align_before_re = re.compile(
+ u''
+ )
+ has_align_before = re.search(align_before_re, text)
+ if has_align_before:
+ return has_align_before.group(1)
+ return u""
+
+ def xml_to_srt(self, text):
+ def append_subs(start, end, prev_content, format_time):
+ subs.append(
+ {
+ "start_time": self.convert_time(start) if format_time else start,
+ "end_time": self.convert_time(end) if format_time else end,
+ "content": u"\n".join(prev_content),
+ }
+ )
+
+ display_align_before = self.xml_id_display_align_before(text)
+ begin_re = re.compile(u"\s*
(.*)
')
+
+ # span tags are only used for italics, so we'll get rid of them
+ # and replace them by and , which is the standard for .srt files
+ span_start_re = re.compile(u'()+')
+ span_end_re = re.compile(u"()+")
+ br_re = re.compile(u"(
)+")
+ fmt_t = True
+ for s in sub_lines:
+ span_start_tags = re.search(span_start_re, s)
+ if span_start_tags:
+ s = u"".join(s.split(span_start_tags.group()))
+ string_region_re = (
+ r'(.*)
'
+ )
+ s = re.sub(string_region_re, r"{\\an8}\2
", s)
+ content = re.search(content_re, s).group(1)
+
+ br_tags = re.search(br_re, content)
+ if br_tags:
+ content = u"\n".join(content.split(br_tags.group()))
+
+ span_end_tags = re.search(span_end_re, content)
+ if span_end_tags:
+ content = u"".join(content.split(span_end_tags.group()))
+
+ prev_start = prev_time["start"]
+ start = re.search(start_re, s).group(1)
+ end = re.search(end_re, s).group(1)
+ if len(start.split(":")) > 1:
+ fmt_t = False
+ start = start.replace(".", ",")
+ end = end.replace(".", ",")
+ if (prev_start == start and prev_time["end"] == end) or not prev_start:
+ # Fix for multiple lines starting at the same time
+ prev_time = {"start": start, "end": end}
+ prev_content.append(content)
+ continue
+ append_subs(prev_time["start"], prev_time["end"], prev_content, fmt_t)
+ prev_time = {"start": start, "end": end}
+ prev_content = [content]
+ append_subs(start, end, prev_content, fmt_t)
+
+ lines = (
+ u"{}\n{} --> {}\n{}\n".format(
+ s + 1, subs[s]["start_time"], subs[s]["end_time"], subs[s]["content"]
+ )
+ for s in range(len(subs))
+ )
+ return u"\n".join(lines)
+
+ def convert(self, Input, Output):
+
+ with codecs.open(Input, "rb", "utf-8") as f:
+ text = f.read()
+
+ with codecs.open(Output, "wb", "utf-8") as f:
+ f.write(self.xml_to_srt(text))
+
+ return
diff --git a/helpers/keyloader.py b/helpers/keyloader.py
new file mode 100644
index 0000000..de1b42b
--- /dev/null
+++ b/helpers/keyloader.py
@@ -0,0 +1,76 @@
+import os, json, sys
+from helpers.ripprocess import ripprocess
+
+
+class keysaver:
+ def __init__(self, **kwargs):
+ self.keys_file = kwargs.get("keys_file", None)
+ self.stored = self.get_stored()
+
+ def read_(self):
+ with open(self.keys_file, "r") as fr:
+ return json.load(fr)
+
+ def write_(self, data):
+ with open(self.keys_file, "w") as fr:
+ fr.write(json.dumps(data, indent=4))
+
+ def get_stored(self):
+ stored = []
+ if os.path.isfile(self.keys_file):
+ return self.read_()
+ return stored
+
+ def formatting(self, keys_list, pssh, name):
+ return [
+ {
+ "NAME": name,
+ "PSSH": pssh,
+ "ID": idx,
+ "KID": key.split(":")[0],
+ "KEY": key.split(":")[1],
+ }
+ for idx, key in enumerate(keys_list, start=1)
+ ]
+
+ def dump_keys(self, keys, pssh=None, name=None):
+ old_keys = list(self.stored)
+ new_keys = list(self.formatting(keys, pssh, name))
+ self.write_(old_keys + new_keys)
+ self.stored = self.get_stored() # to update stored keys
+
+ return new_keys
+
+ def get_key_by_pssh(self, pssh):
+ keys = []
+ added = set()
+ for key in self.get_stored(): # read file again...
+ if key["PSSH"]:
+ if not key["KEY"] in added and pssh in key["PSSH"]:
+ keys.append(key)
+ added.add(key["KEY"])
+
+ return keys
+
+ def get_key_by_kid(self, kid):
+ keys = []
+ added = set()
+ for key in self.get_stored(): # read file again...
+ if not key["KEY"] in added and key["KID"] == kid:
+ keys.append(key)
+ added.add(key["KEY"])
+
+ return keys
+
+ def generate_kid(self, encrypted_file):
+ return ripprocess().getKeyId(encrypted_file)
+
+ def set_keys(self, keys, no_kid=False):
+ command_keys = []
+ for key in keys:
+ command_keys.append("--key")
+ command_keys.append(
+ "{}:{}".format(key["ID"] if no_kid else key["KID"], key["KEY"])
+ )
+
+ return command_keys
diff --git a/helpers/proxy_environ.py b/helpers/proxy_environ.py
new file mode 100644
index 0000000..d1f026d
--- /dev/null
+++ b/helpers/proxy_environ.py
@@ -0,0 +1,112 @@
+import os
+import requests
+import sys, json
+import random
+from configs.config import tool
+from helpers.vpn import connect
+import logging
+
+
+class hold_proxy(object):
+ def __init__(self):
+ self.proxy = os.environ.get("http_proxy")
+ self.logger = logging.getLogger(__name__)
+
+ def disable(self):
+ os.environ["http_proxy"] = ""
+ os.environ["HTTP_PROXY"] = ""
+ os.environ["https_proxy"] = ""
+ os.environ["HTTPS_PROXY"] = ""
+
+ def enable(self):
+ if self.proxy:
+ os.environ["http_proxy"] = self.proxy
+ os.environ["HTTP_PROXY"] = self.proxy
+ os.environ["https_proxy"] = self.proxy
+ os.environ["HTTPS_PROXY"] = self.proxy
+
+
+class proxy_env(object):
+ def __init__(self, args):
+ self.logger = logging.getLogger(__name__)
+ self.args = args
+ self.vpn = tool().vpn()
+
+ def Load(self):
+ proxies = None
+ proxy = {}
+ aria2c_proxy = []
+
+ if self.vpn["proxies"]:
+ proxies = self.vpn["proxies"]
+
+ if not self.vpn["proxies"]:
+ if self.args.privtvpn:
+ self.logger.info("Proxy Status: Activated-PrivateVpn")
+ proxy.update({"port": self.vpn["private"]["port"]})
+ proxy.update({"user": self.vpn["private"]["email"]})
+ proxy.update({"pass": self.vpn["private"]["passwd"]})
+
+ if "pvdata.host" in self.args.privtvpn:
+ proxy.update({"host": self.args.privtvpn})
+ else:
+ proxy.update(
+ {"host": connect(code=self.args.privtvpn).privateVPN()}
+ )
+
+ proxies = self.vpn["private"]["http"].format(
+ email=proxy["user"],
+ passwd=proxy["pass"],
+ ip=proxy["host"],
+ port=proxy["port"],
+ )
+ else:
+ if self.args.nordvpn:
+ self.logger.info("Proxy Status: Activated-NordVpn")
+ proxy.update({"port": self.vpn["nordvpn"]["port"]})
+ proxy.update({"user": self.vpn["nordvpn"]["email"]})
+ proxy.update({"pass": self.vpn["nordvpn"]["passwd"]})
+
+ if "nordvpn.com" in self.args.nordvpn:
+ proxy.update({"host": self.args.nordvpn})
+ else:
+ proxy.update(
+ {"host": connect(code=self.args.nordvpn).nordVPN()}
+ )
+
+ proxies = self.vpn["nordvpn"]["http"].format(
+ email=proxy["user"],
+ passwd=proxy["pass"],
+ ip=proxy["host"],
+ port=proxy["port"],
+ )
+ else:
+ self.logger.info("Proxy Status: Off")
+
+ if proxy.get("host"):
+ aria2c_proxy.append(
+ "--https-proxy={}:{}".format(proxy.get("host"), proxy.get("port"))
+ )
+ if proxy.get("user"):
+ aria2c_proxy.append("--https-proxy-user={}".format(proxy.get("user")))
+ if proxy.get("pass"):
+ aria2c_proxy.append("--https-proxy-passwd={}".format(proxy.get("pass")))
+
+ if proxies:
+ os.environ["http_proxy"] = proxies
+ os.environ["HTTP_PROXY"] = proxies
+ os.environ["https_proxy"] = proxies
+ os.environ["HTTPS_PROXY"] = proxies
+
+ ip = None
+
+ try:
+ self.logger.info("Getting IP...")
+ r = requests.get("https://ipinfo.io/json", timeout=5)
+ data = r.json()
+ ip = f'{data["ip"]} ({data["country"]})'
+ except Exception as e:
+ self.logger.info(f"({e.__class__.__name__}: {e})")
+ sys.exit(1)
+
+ return aria2c_proxy, ip
diff --git a/helpers/pssh_generator.py b/helpers/pssh_generator.py
new file mode 100644
index 0000000..c21675c
--- /dev/null
+++ b/helpers/pssh_generator.py
@@ -0,0 +1,132 @@
+from utils.modules.pymp4.parser import Box
+from io import BytesIO
+import base64
+import requests
+import uuid
+import binascii
+import subprocess
+import logging
+import json
+
+
+class pssh_generator(object):
+ def __init__(self, init, **kwargs):
+ self.init = init
+ self.logger = logging.getLogger(__name__)
+ self.proxies = kwargs.get("proxies", None)
+ self.mp4dumpexe = kwargs.get("mp4dumpexe", None)
+
+ def from_kid(self):
+ array_of_bytes = bytearray(b"\x00\x00\x002pssh\x00\x00\x00\x00")
+ array_of_bytes.extend(bytes.fromhex("edef8ba979d64acea3c827dcd51d21ed"))
+ array_of_bytes.extend(b"\x00\x00\x00\x12\x12\x10")
+ array_of_bytes.extend(bytes.fromhex(self.init.replace("-", "")))
+ pssh = base64.b64encode(bytes.fromhex(array_of_bytes.hex()))
+ return pssh.decode()
+
+ def Get_PSSH(self):
+ WV_SYSTEM_ID = "[ed ef 8b a9 79 d6 4a ce a3 c8 27 dc d5 1d 21 ed]"
+ pssh = None
+ data = subprocess.check_output(
+ [self.mp4dumpexe, "--format", "json", "--verbosity", "1", self.init]
+ )
+ data = json.loads(data)
+ for atom in data:
+ if atom["name"] == "moov":
+ for child in atom["children"]:
+ if child["name"] == "pssh":
+ if child["system_id"] == WV_SYSTEM_ID:
+ pssh = child["data"][1:-1].replace(" ", "")
+ pssh = binascii.unhexlify(pssh)
+ if pssh.startswith(b"\x08\x01"):
+ pssh = pssh[0:]
+ pssh = base64.b64encode(pssh).decode("utf-8")
+ return pssh
+
+ if not pssh:
+ self.logger.error("Error while generate pssh from file.")
+ return pssh
+
+ def get_moov_pssh(self, moov):
+ while True:
+ x = Box.parse_stream(moov)
+ if x.type == b"moov":
+ for y in x.children:
+ if y.type == b"pssh" and y.system_ID == uuid.UUID(
+ "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
+ ):
+ data = base64.b64encode(y.init_data)
+ return data
+
+ def build_init_segment_mp4(self, bytes_):
+ moov = BytesIO(bytes_)
+ data = self.get_moov_pssh(moov)
+ pssh = data.decode("utf-8")
+
+ return pssh
+
+ def getInitWithRange2(self, headers):
+
+ initbytes = requests.get(url=self.init, proxies=self.proxies, headers=headers,)
+
+ try:
+ pssh = self.build_init_segment_mp4(initbytes.content)
+ return pssh
+ except Exception as e:
+ self.logger.info("Error: " + str(e))
+
+ return None
+
+ def getInitWithRange(self, start: int, end: int):
+
+ initbytes = requests.get(
+ url=self.init,
+ proxies=self.proxies,
+ headers={"Range": "bytes={}-{}".format(start, end)},
+ )
+
+ try:
+ pssh = self.build_init_segment_mp4(initbytes.content)
+ return pssh
+ except Exception as e:
+ self.logger.info("Error: " + str(e))
+
+ return None
+
+ def loads(self):
+ req = requests.get(url=self.init, proxies=self.proxies)
+
+ initbytes = req.content
+
+ try:
+ pssh = self.build_init_segment_mp4(initbytes)
+ return pssh
+ except Exception as e:
+ self.logger.error("Error: " + str(e))
+
+ return None
+
+ def load(self):
+
+ with open(self.init, "rb") as f:
+ initbytes = f.read()
+
+ try:
+ pssh = self.build_init_segment_mp4(initbytes)
+ return pssh
+ except Exception as e:
+ self.logger.error("Error: " + str(e))
+
+ return None
+
+ def from_str(self):
+
+ initbytes = self.init
+
+ try:
+ pssh = self.build_init_segment_mp4(initbytes)
+ return pssh
+ except Exception as e:
+ self.logger.info("Error: " + str(e))
+
+ return None
diff --git a/helpers/ripprocess.py b/helpers/ripprocess.py
new file mode 100644
index 0000000..8439c0f
--- /dev/null
+++ b/helpers/ripprocess.py
@@ -0,0 +1,819 @@
+import ffmpy, json, os, sys, unidecode, requests, subprocess, time, pycountry, html, tqdm, re, glob, base64, binascii
+from titlecase import titlecase
+from configs.config import tool
+from helpers.proxy_environ import hold_proxy
+import tldextract
+from collections import namedtuple, Sequence
+from natsort import natsorted
+import logging
+import unicodedata, string
+
+
+class EpisodesNumbersHandler:
+ def __init__(self):
+ return
+
+ def numberRange(self, start: int, end: int):
+ if list(range(start, end + 1)) != []:
+ return list(range(start, end + 1))
+
+ if list(range(end, start + 1)) != []:
+ return list(range(end, start + 1))
+
+ return [start]
+
+ def ListNumber(self, Number: str):
+ if Number.isdigit():
+ return [int(Number)]
+
+ if Number.strip() == "~" or Number.strip() == "":
+ return self.numberRange(1, 999)
+
+ if "-" in Number:
+ start, end = Number.split("-")
+ if start.strip() == "" or end.strip() == "":
+ raise ValueError("wrong Number: {}".format(Number))
+ return self.numberRange(int(start), int(end))
+
+ if "~" in Number:
+ start, _ = Number.split("~")
+ if start.strip() == "":
+ raise ValueError("wrong Number: {}".format(Number))
+ return self.numberRange(int(start), 999)
+
+ return
+
+ def sortNumbers(self, Numbers):
+ SortedNumbers = []
+ for Number in Numbers.split(","):
+ SortedNumbers += self.ListNumber(Number.strip())
+
+ return natsorted(list(set(SortedNumbers)))
+
+
+class ripprocess(object):
+ def __init__(self):
+ self.tool = tool()
+ self.logger = logging.getLogger(__name__)
+ self.bin = self.tool.bin()
+
+ def sort_list(self, media_list, keyword1=None, keyword2=None):
+ if keyword1:
+ if keyword2:
+ return sorted(
+ media_list, key=lambda k: (int(k[keyword1]), int(k[keyword2]))
+ )
+ else:
+ sorted(media_list, key=lambda k: int(k[keyword1]))
+
+ return media_list
+
+ def yt2json(self, url, proxies=None):
+ jsonfile = "info.info.json"
+
+ yt_cmd = [
+ self.bin["youtube"],
+ "--skip-download",
+ "--write-info-json",
+ "--quiet",
+ "--no-warnings",
+ "-o",
+ "info",
+ url,
+ ]
+
+ if proxies:
+ yt_cmd += ["--proxy", proxies.get("https")]
+
+ subprocess.call(yt_cmd)
+
+ while not os.path.isfile(jsonfile):
+ time.sleep(0.2)
+ with open(jsonfile) as js:
+ data = json.load(js)
+ if os.path.isfile(jsonfile):
+ os.remove(jsonfile)
+
+ return data
+
+ def getKeyId(self, mp4_file):
+ data = subprocess.check_output(
+ [self.bin["mp4dump"], "--format", "json", "--verbosity", "1", mp4_file]
+ )
+ try:
+ return re.sub(
+ " ",
+ "",
+ re.compile(r"default_KID.*\[(.*)\]").search(data.decode()).group(1),
+ )
+ except AttributeError:
+ return None
+
+ def flatten(self, l):
+ return list(self.flatten_g(l))
+
+ def flatten_g(self, l):
+ basestring = (str, bytes)
+ for el in l:
+ if isinstance(el, Sequence) and not isinstance(el, basestring):
+ for sub in self.flatten_g(el):
+ yield sub
+ else:
+ yield el
+
+ def removeExtentsion(self, string: str):
+ if "." in string:
+ return ".".join(string.split(".")[:-1])
+ else:
+ raise ValueError("string has no extentsion: {}".format(string))
+
+ def replaceExtentsion(self, string: str, ext: str):
+ if "." in string:
+ return ".".join(string.split(".")[:-1]) + f".{ext}"
+ else:
+ raise ValueError("string has no extentsion: {}".format(string))
+
+ def domain(self, url):
+ return "{0.domain}.{0.suffix}".format(tldextract.extract(url))
+
+ def remove_dups(self, List, keyword=""):
+ Added_ = set()
+ Proper_ = []
+ for L in List:
+ if L[keyword] not in Added_:
+ Proper_.append(L)
+ Added_.add(L[keyword])
+
+ return Proper_
+
+ def find_str(self, s, char):
+ index = 0
+
+ if char in s:
+ c = char[0]
+ for ch in s:
+ if ch == c:
+ if s[index : index + len(char)] == char:
+ return index
+
+ index += 1
+
+ return -1
+
+ def updt(self, total, progress):
+ barLength, status = 80, ""
+ progress = float(progress) / float(total)
+ if progress >= 1.0:
+ progress, status = 1, "\r\n"
+ block = int(round(barLength * progress))
+ text = "\rProgress: {} | {:.0f}% {}".format(
+ "█" * block + "" * (barLength - block), round(progress * 100, 0), status,
+ )
+ sys.stdout.write(text)
+ sys.stdout.flush()
+
+ def Get_PSSH(self, mp4_file):
+ WV_SYSTEM_ID = "[ed ef 8b a9 79 d6 4a ce a3 c8 27 dc d5 1d 21 ed]"
+ pssh = None
+ data = subprocess.check_output(
+ [self.bin["mp4dump"], "--format", "json", "--verbosity", "1", mp4_file]
+ )
+ data = json.loads(data)
+ for atom in data:
+ if atom["name"] == "moov":
+ for child in atom["children"]:
+ if child["name"] == "pssh":
+ if child["system_id"] == WV_SYSTEM_ID:
+ pssh = child["data"][1:-1].replace(" ", "")
+ pssh = binascii.unhexlify(pssh)
+ if pssh.startswith(b"\x08\x01"):
+ pssh = pssh[0:]
+ pssh = base64.b64encode(pssh).decode("utf-8")
+ return pssh
+
+ return None
+
+ def SubtitleEdit(
+ self, contain=None, file=None, removeSDH=False, silent=True, extra_commands=[]
+ ):
+ if file:
+ subtitle_command = [
+ self.bin["SubtitleEdit"],
+ "/convert",
+ file,
+ "srt",
+ "/overwrite",
+ "/multiplereplace:.",
+ "/MergeShortLines",
+ "/FixCommonErrors",
+ ]
+
+ subtitle_command += extra_commands
+
+ if removeSDH:
+ subtitle_command.append("/RemoveTextForHI")
+
+ subprocess.call(
+ subtitle_command, stdout=open(os.devnull, "wb")
+ ) if silent else subprocess.call(subtitle_command)
+
+ if contain:
+ subtitle_command = [
+ self.bin["SubtitleEdit"],
+ "/convert",
+ "{}*.srt".format(contain),
+ "srt",
+ "/overwrite",
+ "/multiplereplace:.",
+ "/MergeShortLines",
+ "/FixCommonErrors",
+ ]
+
+ subtitle_command += extra_commands
+
+ if removeSDH:
+ subtitle_command.append("/removetextforhi")
+
+ subprocess.call(
+ subtitle_command, stdout=open(os.devnull, "wb")
+ ) if silent else subprocess.call(subtitle_command)
+
+ return
+
+ def parseCookieFile(self, cookiesfile):
+ cookies = {}
+ with open(cookiesfile, "r") as fp:
+ for line in fp:
+ if not re.match(r"^\#", line):
+ lineFields = line.strip().split("\t")
+ try:
+ cookies[lineFields[5]] = lineFields[6]
+ except Exception:
+ pass
+ return cookies
+
+ def ReplaceCodeLanguages(self, X):
+ X = X.lower()
+ X = (
+ X.replace("_subtitle_dialog_0", "")
+ .replace("_narrative_dialog_0", "")
+ .replace("_caption_dialog_0", "")
+ .replace("_dialog_0", "")
+ .replace("_descriptive_0", "_descriptive")
+ .replace("_descriptive", "_descriptive")
+ .replace("_sdh", "-sdh")
+ .replace("es-es", "es")
+ .replace("en-es", "es")
+ .replace("kn-in", "kn")
+ .replace("gu-in", "gu")
+ .replace("ja-jp", "ja")
+ .replace("mni-in", "mni")
+ .replace("si-in", "si")
+ .replace("as-in", "as")
+ .replace("ml-in", "ml")
+ .replace("sv-se", "sv")
+ .replace("hy-hy", "hy")
+ .replace("sv-sv", "sv")
+ .replace("da-da", "da")
+ .replace("fi-fi", "fi")
+ .replace("nb-nb", "nb")
+ .replace("is-is", "is")
+ .replace("uk-uk", "uk")
+ .replace("hu-hu", "hu")
+ .replace("bg-bg", "bg")
+ .replace("hr-hr", "hr")
+ .replace("lt-lt", "lt")
+ .replace("et-et", "et")
+ .replace("el-el", "el")
+ .replace("he-he", "he")
+ .replace("ar-ar", "ar")
+ .replace("fa-fa", "fa")
+ .replace("ro-ro", "ro")
+ .replace("sr-sr", "sr")
+ .replace("cs-cs", "cs")
+ .replace("sk-sk", "sk")
+ .replace("mk-mk", "mk")
+ .replace("hi-hi", "hi")
+ .replace("bn-bn", "bn")
+ .replace("ur-ur", "ur")
+ .replace("pa-pa", "pa")
+ .replace("ta-ta", "ta")
+ .replace("te-te", "te")
+ .replace("mr-mr", "mr")
+ .replace("kn-kn", "kn")
+ .replace("gu-gu", "gu")
+ .replace("ml-ml", "ml")
+ .replace("si-si", "si")
+ .replace("as-as", "as")
+ .replace("mni-mni", "mni")
+ .replace("tl-tl", "tl")
+ .replace("id-id", "id")
+ .replace("ms-ms", "ms")
+ .replace("vi-vi", "vi")
+ .replace("th-th", "th")
+ .replace("km-km", "km")
+ .replace("ko-ko", "ko")
+ .replace("zh-zh", "zh")
+ .replace("ja-ja", "ja")
+ .replace("ru-ru", "ru")
+ .replace("tr-tr", "tr")
+ .replace("it-it", "it")
+ .replace("es-mx", "es-la")
+ .replace("ar-sa", "ar")
+ .replace("zh-cn", "zh")
+ .replace("nl-nl", "nl")
+ .replace("pl-pl", "pl")
+ .replace("pt-pt", "pt")
+ .replace("hi-in", "hi")
+ .replace("mr-in", "mr")
+ .replace("bn-in", "bn")
+ .replace("te-in", "te")
+ .replace("cmn-hans", "zh-hans")
+ .replace("cmn-hant", "zh-hant")
+ .replace("ko-kr", "ko")
+ .replace("en-au", "en")
+ .replace("es-419", "es-la")
+ .replace("es-us", "es-la")
+ .replace("en-us", "en")
+ .replace("en-gb", "en")
+ .replace("fr-fr", "fr")
+ .replace("de-de", "de")
+ .replace("las-419", "es-la")
+ .replace("ar-ae", "ar")
+ .replace("da-dk", "da")
+ .replace("yue-hant", "yue")
+ .replace("bn-in", "bn")
+ .replace("ur-in", "ur")
+ .replace("ta-in", "ta")
+ .replace("sl-si", "sl")
+ .replace("cs-cz", "cs")
+ .replace("hi-jp", "hi")
+ .replace("-001", "")
+ .replace("en-US", "en")
+ .replace("deu", "de")
+ .replace("eng", "en")
+ .replace("ca-es", "cat")
+ .replace("fil-ph", "fil")
+ .replace("en-ca", "en")
+ .replace("eu-es", "eu")
+ .replace("ar-eg", "ar")
+ .replace("he-il", "he")
+ .replace("el-gr", "he")
+ .replace("nb-no", "nb")
+ .replace("es-ar", "es-la")
+ .replace("en-ph", "en")
+ .replace("sq-al", "sq")
+ .replace("bs-ba", "bs")
+ )
+
+ return X
+
+ def countrycode(self, code, site_domain="None"):
+ languageCodes = {
+ "zh-Hans": "zhoS",
+ "zh-Hant": "zhoT",
+ "pt-BR": "brPor",
+ "es-ES": "euSpa",
+ "en-GB": "enGB",
+ "en-PH": "enPH",
+ "nl-BE": "nlBE",
+ "fil": "enPH",
+ "yue": "zhoS",
+ "fr-CA": "caFra",
+ }
+
+ if code == "cmn-Hans":
+ return "Mandarin Chinese (Simplified)", "zh-Hans"
+ elif code == "cmn-Hant":
+ return "Mandarin Chinese (Traditional)", "zh-Hant"
+ elif code == "es-419":
+ return "Spanish", "spa"
+ elif code == "es-ES":
+ return "European Spanish", "euSpa"
+ elif code == "pt-BR":
+ return "Brazilian Portuguese", "brPor"
+ elif code == "pt-PT":
+ return "Portuguese", "por"
+ elif code == "fr-CA":
+ return "French Canadian", "caFra"
+ elif code == "fr-FR":
+ return "French", "fra"
+ elif code == "iw":
+ return "Modern Hebrew", "heb"
+ elif code == "es" and site_domain == "google":
+ return "European Spanish", "euSpa"
+
+ lang_code = code[: code.index("-")] if "-" in code else code
+ lang = pycountry.languages.get(alpha_2=lang_code)
+ if lang is None:
+ lang = pycountry.languages.get(alpha_3=lang_code)
+
+ try:
+ languagecode = languageCodes[code]
+ except KeyError:
+ languagecode = lang.alpha_3
+
+ return lang.name, languagecode
+
+ def tqdm_downloader(self, url, file_name, proxies=None):
+ # self.logger.info(file_name)
+ r = requests.get(url, stream=True)
+ file_size = int(r.headers["Content-Length"])
+ chunk = 1
+ chunk_size = 1024
+ num_bars = int(file_size / chunk_size)
+
+ with open(file_name, "wb") as fp:
+ for chunk in tqdm.tqdm(
+ r.iter_content(chunk_size=chunk_size),
+ total=num_bars,
+ unit="KB",
+ desc=file_name,
+ leave=True, # progressbar stays
+ ):
+ fp.write(chunk)
+
+ return
+
+ def silent_aria2c_download(self, url, file_name, disable_proxy=True):
+ holder = hold_proxy()
+
+ if disable_proxy:
+ holder.disable()
+
+ commands = [
+ self.bin["aria2c"],
+ url,
+ '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"',
+ "--allow-overwrite=true",
+ "--auto-file-renaming=false",
+ "--retry-wait=5",
+ "-x16",
+ "-j16",
+ "-s16",
+ "-o",
+ file_name,
+ ]
+
+ try:
+ aria = subprocess.call(commands, stdout=open(os.devnull, "wb"),)
+ except FileNotFoundError:
+ self.logger.info("UNABLE TO FIND {}".format("aria2c.exe"))
+ exit(-1)
+ if aria != 0:
+ raise ValueError("Aria2c exited with code {}".format(aria))
+
+ if disable_proxy:
+ holder.enable()
+
+ def aria2c_download(self, commands, extra_commands, disable_proxy=False):
+ LogFile = self.bin["aria2c"].replace("exe", "log")
+
+ if os.path.isfile(LogFile):
+ os.remove(LogFile)
+
+ aria2_commands = []
+ aria2_commands.append(self.bin["aria2c"])
+ aria2_commands.append("--log={}".format(LogFile))
+ aria2_commands += commands + extra_commands
+
+ holder = hold_proxy()
+
+ if disable_proxy:
+ holder.disable()
+
+ try:
+ aria = subprocess.call(aria2_commands)
+ except FileNotFoundError:
+ self.logger.info("UNABLE TO FIND {}".format("aria2c.exe"))
+ exit(-1)
+ if aria != 0:
+ self.logger.info("Aria2c exited with code {}".format(aria))
+ exit(-1)
+
+ if disable_proxy:
+ holder.enable()
+
+ self.logger.info()
+
+ def isduplelist(self, a, b):
+ return set(a) == set(b) and len(a) == len(b)
+
+ def readfile(self, file, lines=False):
+ read = ""
+ if os.path.isfile(file):
+ with open(file, "r") as f:
+ if lines:
+ read = f.readlines()
+ return read
+ read = f.read()
+ else:
+ self.logger.info("File: %s, is not found" % file)
+ return None
+
+ return read
+
+ def strip(self, inputint, left=True, right=False):
+ if left:
+ return str(inputint.lstrip("0"))
+ if right:
+ return str(inputint.rstrip("0"))
+
+ return
+
+ def CleanMyFileNamePlease(self, filename):
+ # edit here...
+ filename = filename.replace("666", "666")
+
+ ################################################################################################################################
+ # dont edit here...
+ filename = (
+ filename.replace(" ", ".")
+ .replace("'", "")
+ .replace(",", "")
+ .replace("-", "")
+ .replace("-.", ".")
+ .replace(".-.", ".")
+ )
+ filename = re.sub(" +", ".", filename)
+ for i in range(10):
+ filename = re.sub(r"(\.\.)", ".", filename)
+
+ return filename
+
+ def RemoveExtraWords(self, name):
+ if re.search("[eE]pisode [0-9]+", name):
+ name = name.replace((re.search("[eE]pisode [0-9]+", name)).group(0), "")
+
+ if re.search(r"(\(.+?)\)", name):
+ name = name.replace(re.search(r"(\(.+?)\)", name).group(), "")
+
+ name = re.sub(" +", " ", name)
+ name = name.strip()
+ name = (
+ name.replace(" : ", " - ")
+ .replace(": ", " - ")
+ .replace(":", " - ")
+ .replace("&", "and")
+ .replace("ó", "o")
+ .replace("*", "x")
+ )
+
+ return name
+
+ def DecodeString(self, text):
+ for encoding in ("utf-8-sig", "utf-8", "utf-16"):
+ try:
+ return text.decode(encoding)
+ except UnicodeDecodeError:
+ continue
+
+ return text.decode("latin-1")
+
+ def EncodeString(self, text):
+ for encoding in ("utf-8-sig", "utf-8", "utf-16"):
+ try:
+ return text.encode(encoding)
+ except UnicodeDecodeError:
+ continue
+
+ return text.encode("latin-1")
+
+ def clean_text(self, text):
+ whitelist = (
+ "-_.() %s%s" % (string.ascii_letters, string.digits) + "',$%@`~!^&+=[]{}"
+ )
+
+ cleaned_text = (
+ unicodedata.normalize("NFKD", text).encode("ASCII", "ignore").decode()
+ )
+
+ return "".join(c for c in cleaned_text if c in whitelist)
+
+ def RemoveCharcters(self, text):
+ text = self.EncodeString(text)
+ text = self.DecodeString(text)
+ text = self.RemoveExtraWords(text)
+ text = self.clean_text(text)
+ text = unidecode.unidecode(titlecase(text))
+
+ return text
+
+ def do_clean(self, contain, exclude=[], added=[]):
+ """contain= string name in the file/files you want to delete.
+ exclude= the files that has a specified extension you do not want to delete. send by list like ['.sfv', '.whatever']
+ added= another extensions not in the default extension. send by list like ['.sfv', '.whatever']"""
+
+ error = []
+ extensions = [
+ ".mp4",
+ ".h265",
+ ".h264",
+ ".eac3",
+ ".m4a",
+ ".ac3",
+ ".srt",
+ ".vtt",
+ ".txt",
+ ".aac",
+ ".m3u8",
+ ".mpd",
+ ]
+
+ extensions += added
+
+ erased_files = []
+
+ for ext in extensions:
+ if ext not in exclude:
+ erased_files += glob.glob(contain + f"*{ext}")
+
+ if not erased_files == []:
+ for files in erased_files:
+ try:
+ os.remove(files)
+ except Exception:
+ error.append(files)
+
+ if not error == []:
+ self.logger.info(
+ f"some files not deleted with extensions: "
+ + ", ".join(str(x) for x in error)
+ + "."
+ )
+
+ return
+
+ def mediainfo_(self, file):
+ mediainfo_output = subprocess.Popen(
+ [self.bin["MediaInfo"], "--Output=JSON", "-f", file],
+ stdout=subprocess.PIPE,
+ )
+ mediainfo_json = json.load(mediainfo_output.stdout)
+ return mediainfo_json
+
+ def DemuxAudio(self, inputName, replace_str):
+ if os.path.isfile(inputName):
+ self.logger.info("\nDemuxing audio...")
+ mediainfo = self.mediainfo_(inputName)
+ for m in mediainfo["media"]["track"]:
+ if m["@type"] == "Audio":
+ codec_name = m["Format"]
+
+ ext = ".ac3"
+ if codec_name == "AAC":
+ ext = ".m4a"
+ else:
+ if codec_name == "E-AC-3":
+ ext = ".eac3"
+ else:
+ if codec_name == "AC-3":
+ ext = ".ac3"
+ if codec_name == "DTS":
+ ext = ".dts"
+
+ outputName = inputName.replace(replace_str, ext)
+ self.logger.info(("{} -> {}").format(inputName, outputName))
+ ff = ffmpy.FFmpeg(
+ executable=self.bin["ffmpeg"],
+ inputs={inputName: None},
+ outputs={outputName: "-c:a copy"},
+ global_options="-vn -sn -y -hide_banner -loglevel panic",
+ )
+ ff.run()
+ time.sleep(0.05)
+ if os.path.isfile(outputName) and os.path.getsize(outputName) > 1024 * 1024:
+ os.remove(inputName)
+ self.logger.info("Done!")
+
+ return
+
+ def shaka_decrypt(self, encrypted, decrypted, keys, stream):
+ self.logger.info("\nDecrypting: {}".format(encrypted))
+ decrypt_command = [
+ self.bin["shaka-packager"],
+ "--enable_raw_key_decryption",
+ "-quiet",
+ "input={},stream={},output={}".format(encrypted, stream, decrypted),
+ ]
+
+ for key in keys:
+ decrypt_command.append("--keys")
+ decrypt_command.append(
+ "key={}:key_id={}".format(
+ key["KEY"], "00000000000000000000000000000000"
+ )
+ )
+
+ self.logger.info("\nDecrypting KEYS: ")
+ for key in keys:
+ self.logger.info(("{}:{}".format(key["KID"], key["KEY"])))
+
+ wvdecrypt_process = subprocess.Popen(decrypt_command)
+ stdoutdata, stderrdata = wvdecrypt_process.communicate()
+ wvdecrypt_process.wait()
+ self.logger.info("Done!")
+
+ return True
+
+ def mp4_decrypt(
+ self,
+ encrypted,
+ decrypted,
+ keys,
+ moded_decrypter=True,
+ no_kid=True,
+ silent=False,
+ ):
+ self.logger.info("\nDecrypting: {}".format(encrypted))
+ decrypt_command = [
+ self.bin["mp4decrypt"]
+ if not moded_decrypter
+ else self.bin["mp4decrypt_moded"]
+ ]
+ decrypt_command += ["--show-progress", encrypted, decrypted]
+
+ for key in keys:
+ decrypt_command.append("--key")
+ decrypt_command.append(
+ "{}:{}".format(key["ID"] if no_kid else key["KID"], key["KEY"])
+ )
+
+ self.logger.info("\nDecrypting KEYS: ")
+ for key in keys:
+ self.logger.info(
+ ("{}:{}".format(key["ID"] if no_kid else key["KID"], key["KEY"]))
+ )
+
+ if silent:
+ wvdecrypt_process = subprocess.Popen(
+ decrypt_command, stdout=open(os.devnull, "wb")
+ )
+ else:
+ wvdecrypt_process = subprocess.Popen(decrypt_command)
+
+ stdoutdata, stderrdata = wvdecrypt_process.communicate()
+ wvdecrypt_process.wait()
+ if wvdecrypt_process.returncode == 0:
+ self.logger.info("Done!")
+ return True
+
+ return False
+
+ def DemuxVideo(
+ self,
+ outputVideoTemp,
+ outputVideo,
+ ffmpeg=False,
+ mp4box=False,
+ ffmpeg_version="ffmpeg",
+ ):
+ if ffmpeg:
+ self.logger.info("\nRemuxing video...")
+ # if not outputVideo.endswith(".h264"):
+ # os.rename(outputVideoTemp, outputVideo)
+ # self.logger.info("Done!")
+ # return True
+
+ ff = ffmpy.FFmpeg(
+ executable=self.bin[ffmpeg_version],
+ inputs={outputVideoTemp: None},
+ outputs={outputVideo: "-c copy"},
+ global_options="-y -hide_banner -loglevel panic",
+ ).run()
+ time.sleep(0.05)
+ if (
+ os.path.isfile(outputVideo)
+ and os.path.getsize(outputVideo) > 1024 * 1024
+ ):
+ os.remove(outputVideoTemp)
+ self.logger.info("Done!")
+ return True
+
+ if mp4box:
+ self.logger.info("\nRemuxing video...")
+ if not outputVideo.endswith(".h264"):
+ os.rename(outputVideoTemp, outputVideo)
+ self.logger.info("Done!")
+ return True
+
+ subprocess.call(
+ [
+ self.bin["mp4box"],
+ "-quiet",
+ "-raw",
+ "1",
+ "-out",
+ outputVideo,
+ outputVideoTemp,
+ ]
+ )
+ if (
+ os.path.isfile(outputVideo)
+ and os.path.getsize(outputVideo) > 1024 * 1024
+ ):
+ os.remove(outputVideoTemp)
+ self.logger.info("Done!")
+ return True
+
+ return False
diff --git a/helpers/sdh.py b/helpers/sdh.py
new file mode 100644
index 0000000..2fc571e
--- /dev/null
+++ b/helpers/sdh.py
@@ -0,0 +1,90 @@
+import codecs
+import os
+import re
+import sys
+
+import pysrt
+
+
+class sdh_remover:
+ def __init__(self,):
+ self.__replace__ = "empty_line"
+ self.content = []
+
+ def cleanLine(self, line, regex):
+ line = re.sub("", "", line)
+ line = re.sub("", "", line)
+ if re.search(r"\[(.*)?\n(.*)?\]", line):
+ line = re.sub(
+ re.search(r"\[(.*)?\n(.*)?\]", line).group(), self.__replace__, line
+ )
+
+ if re.search(r"\((.*)?\n(.*)?\)", line):
+ line = re.sub(
+ re.search(r"\((.*)?\n(.*)?\)", line).group(), self.__replace__, line
+ )
+
+ try:
+ # is it inside a markup tag?
+ match = regex.match(line).group(1)
+ tag = re.compile("(<[A-z]+[^>]*>)").match(match).group(1)
+ line = re.sub(match, tag + self.__replace__, line)
+ except:
+ try:
+ line = re.sub(regex, self.__replace__, line)
+ except:
+ pass
+ return line
+
+ def _save(self, Output):
+
+ file = codecs.open(Output, "w", encoding="utf-8")
+
+ for idx, text in enumerate(self.content, start=1):
+ file.write(
+ "{}\n{} --> {}\n{}\n\n".format(
+ str(idx), text["start"], text["end"], text["text"].strip(),
+ )
+ )
+
+ file.close()
+
+ def clean(self):
+ if not self.content == []:
+ temp = self.content
+ self.content = []
+
+ for text in temp:
+ if text["text"].strip() == self.__replace__:
+ continue
+ text.update({"text": re.sub(self.__replace__, "", text["text"])})
+
+ if not text["text"].strip() == "":
+ self.content.append(text)
+
+ return
+
+ def noHI(self, Input=None, Output=None, content=None):
+
+ srt = pysrt.open(Input, encoding="utf-8")
+ for idx, line in enumerate(srt, start=1):
+ number = str(idx)
+ start = line.start
+ end = line.end
+ text = line.text
+
+ text = self.cleanLine(text, re.compile(r"(\[(.+)?\]|\[(.+)?|^(.+)?\])"))
+ text = self.cleanLine(text, re.compile(r"(\((.+)?\)|\((.+)?|^(.+)?\))"))
+ text = self.cleanLine(text, re.compile(r"(\[(.+)?\]|\[(.+)?|^(.+)?\])"))
+ text = self.cleanLine(
+ text,
+ re.compile(r"([♩♪♫♭♮♯]+(.+)?[♩♪♫♭♮♯]+|[♩♪♫♭♮♯]+(.+)?|^(.+)?[♩♪♫♭♮♯]+)"),
+ )
+ text = self.cleanLine(text, re.compile(r"(]*>)|(<\/font>)"))
+
+ self.content.append(
+ {"number": number, "start": start, "end": end, "text": text,}
+ )
+
+ self.clean()
+ self._save(Output)
diff --git a/helpers/vpn.py b/helpers/vpn.py
new file mode 100644
index 0000000..9dd78b2
--- /dev/null
+++ b/helpers/vpn.py
@@ -0,0 +1,135 @@
+import os
+import requests
+import sys
+import random
+import logging
+
+class connect(object):
+ def __init__(self, code):
+ self.code = code.lower()
+ self.logger = logging.getLogger(__name__)
+ self.headers = {
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
+ }
+
+ def nordVPN(self):
+ nordvpn_codes = {
+ "al": "2",
+ "ar": "10",
+ "au": "13",
+ "at": "14",
+ "be": "21",
+ "ba": "27",
+ "br": "30",
+ "bg": "33",
+ "ca": "38",
+ "cl": "43",
+ "cr": "52",
+ "hr": "54",
+ "cy": "56",
+ "cz": "57",
+ "dk": "58",
+ "eg": "64",
+ "ee": "68",
+ "fi": "73",
+ "fr": "74",
+ "ge": "80",
+ "de": "81",
+ "gr": "84",
+ "hk": "97",
+ "hu": "98",
+ "is": "99",
+ "in": "100",
+ "id": "101",
+ "ie": "104",
+ "il": "105",
+ "it": "106",
+ "jp": "108",
+ "lv": "119",
+ "lu": "126",
+ "my": "131",
+ "mx": "140",
+ "md": "142",
+ "nl": "153",
+ "nz": "156",
+ "mk": "128",
+ "no": "163",
+ "ro": "179",
+ "pl": "174",
+ "si": "197",
+ "za": "200",
+ "kr": "114",
+ "rs": "192",
+ "sg": "195",
+ "sk": "196",
+ "es": "202",
+ "se": "208",
+ "ch": "209",
+ "tw": "211",
+ "th": "214",
+ "tr": "220",
+ "ua": "225",
+ "ae": "226",
+ "gb": "227",
+ "us": "228",
+ "vn": "234",
+ "uk": "227",
+ }
+ nord_proxy = {}
+ if nordvpn_codes.get(self.code):
+ resp = requests.get(
+ url="https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters={%22country_id%22:"
+ + nordvpn_codes.get(self.code)
+ + "}",
+ headers=self.headers,
+ )
+ nord_proxy = resp.json()[0]["hostname"]
+ else:
+ self.logger.info(
+ self.code
+ + " : not listed in country codes, read country.doc for more info"
+ )
+
+ return nord_proxy
+
+ def load_privatevpn(self):
+ html_file = "html.html"
+ hosts = []
+ resp = requests.get(
+ "https://privatevpn.com/serverlist/", stream=True, headers=self.headers
+ )
+ resp = str(resp.text)
+ resp = resp.replace("
", "")
+
+ with open(html_file, "w", encoding="utf8") as file:
+ file.write(resp)
+
+ with open(html_file, "r") as file:
+ text = file.readlines()
+
+ if os.path.exists(html_file):
+ os.remove(html_file)
+
+ for p in text:
+ if ".pvdata.host" in p:
+ hosts.append(p.strip())
+
+ return hosts
+
+ def privateVPN(self):
+ private_proxy = {}
+ private_hosts = self.load_privatevpn()
+ self.logger.debug("private_hosts: {}".format(private_hosts))
+ search_host = [host for host in private_hosts if host[:2] == self.code]
+ if not search_host == []:
+ self.logger.info(f"Founded {str(len(search_host))} Proxies")
+ for n, p in enumerate(search_host):
+ self.logger.info(f"[{str(n+1)}] {p}")
+ inp = input("\nEnter Proxy Number, or Hit Enter for random one: ").strip()
+ if inp == "":
+ return random.choice(search_host)
+ private_proxy = search_host[int(inp) - 1]
+ else:
+ self.logger.info(f"no Proxies Found, you may entered wrong code, or search failed!...")
+
+ return private_proxy
diff --git a/pywidevine/cdm/__init__.py b/pywidevine/cdm/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/pywidevine/cdm/__pycache__/__init__.cpython-36.pyc b/pywidevine/cdm/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..72c824f
Binary files /dev/null and b/pywidevine/cdm/__pycache__/__init__.cpython-36.pyc differ
diff --git a/pywidevine/cdm/__pycache__/__init__.cpython-37.pyc b/pywidevine/cdm/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..3feda0d
Binary files /dev/null and b/pywidevine/cdm/__pycache__/__init__.cpython-37.pyc differ
diff --git a/pywidevine/cdm/__pycache__/__init__.cpython-38.pyc b/pywidevine/cdm/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..291ef95
Binary files /dev/null and b/pywidevine/cdm/__pycache__/__init__.cpython-38.pyc differ
diff --git a/pywidevine/cdm/__pycache__/__init__.cpython-39.pyc b/pywidevine/cdm/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..5d25d4f
Binary files /dev/null and b/pywidevine/cdm/__pycache__/__init__.cpython-39.pyc differ
diff --git a/pywidevine/cdm/__pycache__/cdm.cpython-36.pyc b/pywidevine/cdm/__pycache__/cdm.cpython-36.pyc
new file mode 100644
index 0000000..75d28f4
Binary files /dev/null and b/pywidevine/cdm/__pycache__/cdm.cpython-36.pyc differ
diff --git a/pywidevine/cdm/__pycache__/cdm.cpython-37.pyc b/pywidevine/cdm/__pycache__/cdm.cpython-37.pyc
new file mode 100644
index 0000000..6bc392b
Binary files /dev/null and b/pywidevine/cdm/__pycache__/cdm.cpython-37.pyc differ
diff --git a/pywidevine/cdm/__pycache__/cdm.cpython-38.pyc b/pywidevine/cdm/__pycache__/cdm.cpython-38.pyc
new file mode 100644
index 0000000..8428ad2
Binary files /dev/null and b/pywidevine/cdm/__pycache__/cdm.cpython-38.pyc differ
diff --git a/pywidevine/cdm/__pycache__/cdm.cpython-39.pyc b/pywidevine/cdm/__pycache__/cdm.cpython-39.pyc
new file mode 100644
index 0000000..f672a0d
Binary files /dev/null and b/pywidevine/cdm/__pycache__/cdm.cpython-39.pyc differ
diff --git a/pywidevine/cdm/__pycache__/deviceconfig.cpython-36.pyc b/pywidevine/cdm/__pycache__/deviceconfig.cpython-36.pyc
new file mode 100644
index 0000000..a53f291
Binary files /dev/null and b/pywidevine/cdm/__pycache__/deviceconfig.cpython-36.pyc differ
diff --git a/pywidevine/cdm/__pycache__/deviceconfig.cpython-37.pyc b/pywidevine/cdm/__pycache__/deviceconfig.cpython-37.pyc
new file mode 100644
index 0000000..5f9a03b
Binary files /dev/null and b/pywidevine/cdm/__pycache__/deviceconfig.cpython-37.pyc differ
diff --git a/pywidevine/cdm/__pycache__/deviceconfig.cpython-38.pyc b/pywidevine/cdm/__pycache__/deviceconfig.cpython-38.pyc
new file mode 100644
index 0000000..f6a85b3
Binary files /dev/null and b/pywidevine/cdm/__pycache__/deviceconfig.cpython-38.pyc differ
diff --git a/pywidevine/cdm/__pycache__/deviceconfig.cpython-39.pyc b/pywidevine/cdm/__pycache__/deviceconfig.cpython-39.pyc
new file mode 100644
index 0000000..ec88f92
Binary files /dev/null and b/pywidevine/cdm/__pycache__/deviceconfig.cpython-39.pyc differ
diff --git a/pywidevine/cdm/__pycache__/key.cpython-36.pyc b/pywidevine/cdm/__pycache__/key.cpython-36.pyc
new file mode 100644
index 0000000..8a15878
Binary files /dev/null and b/pywidevine/cdm/__pycache__/key.cpython-36.pyc differ
diff --git a/pywidevine/cdm/__pycache__/key.cpython-37.pyc b/pywidevine/cdm/__pycache__/key.cpython-37.pyc
new file mode 100644
index 0000000..260f6db
Binary files /dev/null and b/pywidevine/cdm/__pycache__/key.cpython-37.pyc differ
diff --git a/pywidevine/cdm/__pycache__/key.cpython-38.pyc b/pywidevine/cdm/__pycache__/key.cpython-38.pyc
new file mode 100644
index 0000000..0cb5fce
Binary files /dev/null and b/pywidevine/cdm/__pycache__/key.cpython-38.pyc differ
diff --git a/pywidevine/cdm/__pycache__/key.cpython-39.pyc b/pywidevine/cdm/__pycache__/key.cpython-39.pyc
new file mode 100644
index 0000000..4a76196
Binary files /dev/null and b/pywidevine/cdm/__pycache__/key.cpython-39.pyc differ
diff --git a/pywidevine/cdm/__pycache__/session.cpython-36.pyc b/pywidevine/cdm/__pycache__/session.cpython-36.pyc
new file mode 100644
index 0000000..c8a2136
Binary files /dev/null and b/pywidevine/cdm/__pycache__/session.cpython-36.pyc differ
diff --git a/pywidevine/cdm/__pycache__/session.cpython-37.pyc b/pywidevine/cdm/__pycache__/session.cpython-37.pyc
new file mode 100644
index 0000000..f9ea22a
Binary files /dev/null and b/pywidevine/cdm/__pycache__/session.cpython-37.pyc differ
diff --git a/pywidevine/cdm/__pycache__/session.cpython-38.pyc b/pywidevine/cdm/__pycache__/session.cpython-38.pyc
new file mode 100644
index 0000000..f5929a4
Binary files /dev/null and b/pywidevine/cdm/__pycache__/session.cpython-38.pyc differ
diff --git a/pywidevine/cdm/__pycache__/session.cpython-39.pyc b/pywidevine/cdm/__pycache__/session.cpython-39.pyc
new file mode 100644
index 0000000..915ea76
Binary files /dev/null and b/pywidevine/cdm/__pycache__/session.cpython-39.pyc differ
diff --git a/pywidevine/cdm/cdm.py b/pywidevine/cdm/cdm.py
new file mode 100644
index 0000000..3e690aa
--- /dev/null
+++ b/pywidevine/cdm/cdm.py
@@ -0,0 +1,407 @@
+import base64
+
+import os
+import time
+import binascii
+
+from google.protobuf.message import DecodeError
+from google.protobuf import text_format
+
+from pywidevine.cdm.formats import wv_proto2_pb2 as wv_proto2
+from pywidevine.cdm.session import Session
+from pywidevine.cdm.key import Key
+from Cryptodome.Random import get_random_bytes
+from Cryptodome.Random import random
+from Cryptodome.Cipher import PKCS1_OAEP, AES
+from Cryptodome.Hash import CMAC, SHA256, HMAC, SHA1
+from Cryptodome.PublicKey import RSA
+from Cryptodome.Signature import pss
+from Cryptodome.Util import Padding
+import logging
+
+
+class Cdm:
+ def __init__(self):
+ self.logger = logging.getLogger(__name__)
+ self.sessions = {}
+
+ def open_session(self, init_data_b64, device, raw_init_data=None, offline=False):
+ self.logger.debug(
+ "open_session(init_data_b64={}, device={}".format(init_data_b64, device)
+ )
+ #self.logger.info("opening new cdm session")
+ if device.session_id_type == "android":
+ # format: 16 random hexdigits, 2 digit counter, 14 0s
+ rand_ascii = "".join(random.choice("ABCDEF0123456789") for _ in range(16))
+ counter = "01" # this resets regularly so its fine to use 01
+ rest = "00000000000000"
+ session_id = rand_ascii + counter + rest
+ session_id = session_id.encode("ascii")
+ elif device.session_id_type == "chrome":
+ rand_bytes = get_random_bytes(16)
+ session_id = rand_bytes
+ else:
+ # other formats NYI
+ self.logger.error("device type is unusable")
+ return 1
+ if raw_init_data and isinstance(raw_init_data, (bytes, bytearray)):
+ # used for NF key exchange, where they don't provide a valid PSSH
+ init_data = raw_init_data
+ self.raw_pssh = True
+ else:
+ init_data = self._parse_init_data(init_data_b64)
+ self.raw_pssh = False
+
+ if init_data:
+ new_session = Session(session_id, init_data, device, offline)
+ else:
+ self.logger.error("unable to parse init data")
+ return 1
+ self.sessions[session_id] = new_session
+ #self.logger.info("session opened and init data parsed successfully")
+ return session_id
+
+ def _parse_init_data(self, init_data_b64):
+ parsed_init_data = wv_proto2.WidevineCencHeader()
+ try:
+ self.logger.debug("trying to parse init_data directly")
+ parsed_init_data.ParseFromString(base64.b64decode(init_data_b64)[32:])
+ except DecodeError:
+ self.logger.debug(
+ "unable to parse as-is, trying with removed pssh box header"
+ )
+ try:
+ id_bytes = parsed_init_data.ParseFromString(
+ base64.b64decode(init_data_b64)[32:]
+ )
+ except DecodeError:
+ self.logger.error("unable to parse, unsupported init data format")
+ return None
+ self.logger.debug("init_data:")
+ for line in text_format.MessageToString(parsed_init_data).splitlines():
+ self.logger.debug(line)
+ return parsed_init_data
+
+ def close_session(self, session_id):
+ self.logger.debug("close_session(session_id={})".format(session_id))
+ #self.logger.info("closing cdm session")
+ if session_id in self.sessions:
+ self.sessions.pop(session_id)
+ self.logger.info("cdm session closed")
+ return 0
+ else:
+ self.logger.info("session {} not found".format(session_id))
+ return 1
+
+ def set_service_certificate(self, session_id, cert_b64):
+ self.logger.debug(
+ "set_service_certificate(session_id={}, cert={})".format(
+ session_id, cert_b64
+ )
+ )
+ #self.logger.info("setting service certificate")
+
+ if session_id not in self.sessions:
+ self.logger.error("session id doesn't exist")
+ return 1
+
+ session = self.sessions[session_id]
+
+ message = wv_proto2.SignedMessage()
+
+ try:
+ message.ParseFromString(base64.b64decode(cert_b64))
+ except DecodeError:
+ self.logger.error("failed to parse cert as SignedMessage")
+
+ service_certificate = wv_proto2.SignedDeviceCertificate()
+
+ if message.Type:
+ self.logger.debug("service cert provided as signedmessage")
+ try:
+ service_certificate.ParseFromString(message.Msg)
+ except DecodeError:
+ # self.logger.error("failed to parse service certificate")
+ return 1
+ else:
+ self.logger.debug("service cert provided as signeddevicecertificate")
+ try:
+ service_certificate.ParseFromString(base64.b64decode(cert_b64))
+ except DecodeError:
+ # self.logger.error("failed to parse service certificate")
+ return 1
+
+ self.logger.debug("service certificate:")
+ for line in text_format.MessageToString(service_certificate).splitlines():
+ self.logger.debug(line)
+
+ session.service_certificate = service_certificate
+ session.privacy_mode = True
+
+ return 0
+
+ def get_license_request(self, session_id):
+ self.logger.debug("get_license_request(session_id={})".format(session_id))
+ #self.logger.info("getting license request")
+
+ if session_id not in self.sessions:
+ self.logger.error("session ID does not exist")
+ return 1
+
+ session = self.sessions[session_id]
+
+ # raw pssh will be treated as bytes and not parsed
+ if self.raw_pssh:
+ license_request = wv_proto2.SignedLicenseRequestRaw()
+ else:
+ license_request = wv_proto2.SignedLicenseRequest()
+ client_id = wv_proto2.ClientIdentification()
+
+ if not os.path.exists(session.device_config.device_client_id_blob_filename):
+ self.logger.error("no client ID blob available for this device")
+ return 1
+
+ with open(session.device_config.device_client_id_blob_filename, "rb") as f:
+ try:
+ cid_bytes = client_id.ParseFromString(f.read())
+ except DecodeError:
+ self.logger.error("client id failed to parse as protobuf")
+ return 1
+
+ self.logger.debug("building license request")
+ if not self.raw_pssh:
+ license_request.Type = wv_proto2.SignedLicenseRequest.MessageType.Value(
+ "LICENSE_REQUEST"
+ )
+ license_request.Msg.ContentId.CencId.Pssh.CopyFrom(session.init_data)
+ else:
+ license_request.Type = wv_proto2.SignedLicenseRequestRaw.MessageType.Value(
+ "LICENSE_REQUEST"
+ )
+ license_request.Msg.ContentId.CencId.Pssh = session.init_data # bytes
+
+ if session.offline:
+ license_type = wv_proto2.LicenseType.Value("OFFLINE")
+ else:
+ license_type = wv_proto2.LicenseType.Value("DEFAULT")
+ license_request.Msg.ContentId.CencId.LicenseType = license_type
+ license_request.Msg.ContentId.CencId.RequestId = session_id
+ license_request.Msg.Type = wv_proto2.LicenseRequest.RequestType.Value("NEW")
+ license_request.Msg.RequestTime = int(time.time())
+ license_request.Msg.ProtocolVersion = wv_proto2.ProtocolVersion.Value("CURRENT")
+ if session.device_config.send_key_control_nonce:
+ license_request.Msg.KeyControlNonce = random.randrange(1, 2 ** 31)
+
+ if session.privacy_mode:
+ if session.device_config.vmp:
+ self.logger.debug("vmp required, adding to client_id")
+ self.logger.debug("reading vmp hashes")
+ vmp_hashes = wv_proto2.FileHashes()
+ with open(session.device_config.device_vmp_blob_filename, "rb") as f:
+ try:
+ vmp_bytes = vmp_hashes.ParseFromString(f.read())
+ except DecodeError:
+ self.logger.error("vmp hashes failed to parse as protobuf")
+ return 1
+ client_id._FileHashes.CopyFrom(vmp_hashes)
+ self.logger.debug(
+ "privacy mode & service certificate loaded, encrypting client id"
+ )
+ self.logger.debug("unencrypted client id:")
+ for line in text_format.MessageToString(client_id).splitlines():
+ self.logger.debug(line)
+ cid_aes_key = get_random_bytes(16)
+ cid_iv = get_random_bytes(16)
+
+ cid_cipher = AES.new(cid_aes_key, AES.MODE_CBC, cid_iv)
+
+ encrypted_client_id = cid_cipher.encrypt(
+ Padding.pad(client_id.SerializeToString(), 16)
+ )
+
+ service_public_key = RSA.importKey(
+ session.service_certificate._DeviceCertificate.PublicKey
+ )
+
+ service_cipher = PKCS1_OAEP.new(service_public_key)
+
+ encrypted_cid_key = service_cipher.encrypt(cid_aes_key)
+
+ encrypted_client_id_proto = wv_proto2.EncryptedClientIdentification()
+
+ encrypted_client_id_proto.ServiceId = (
+ session.service_certificate._DeviceCertificate.ServiceId
+ )
+ encrypted_client_id_proto.ServiceCertificateSerialNumber = (
+ session.service_certificate._DeviceCertificate.SerialNumber
+ )
+ encrypted_client_id_proto.EncryptedClientId = encrypted_client_id
+ encrypted_client_id_proto.EncryptedClientIdIv = cid_iv
+ encrypted_client_id_proto.EncryptedPrivacyKey = encrypted_cid_key
+
+ license_request.Msg.EncryptedClientId.CopyFrom(encrypted_client_id_proto)
+ else:
+ license_request.Msg.ClientId.CopyFrom(client_id)
+
+ if session.device_config.private_key_available:
+ key = RSA.importKey(
+ open(session.device_config.device_private_key_filename).read()
+ )
+ session.device_key = key
+ else:
+ self.logger.error("need device private key, other methods unimplemented")
+ return 1
+
+ self.logger.debug("signing license request")
+
+ hash = SHA1.new(license_request.Msg.SerializeToString())
+ signature = pss.new(key).sign(hash)
+
+ license_request.Signature = signature
+
+ session.license_request = license_request
+
+ self.logger.debug("license request:")
+ for line in text_format.MessageToString(session.license_request).splitlines():
+ self.logger.debug(line)
+ #self.logger.info("license request created")
+ self.logger.debug(
+ "license request b64: {}".format(
+ base64.b64encode(license_request.SerializeToString())
+ )
+ )
+ return license_request.SerializeToString()
+
+ def provide_license(self, session_id, license_b64):
+ self.logger.debug(
+ "provide_license(session_id={}, license_b64={})".format(
+ session_id, license_b64
+ )
+ )
+ #self.logger.info("decrypting provided license")
+
+ if session_id not in self.sessions:
+ self.logger.error("session does not exist")
+ return 1
+
+ session = self.sessions[session_id]
+
+ if not session.license_request:
+ self.logger.error("generate a license request first!")
+ return 1
+
+ license = wv_proto2.SignedLicense()
+ try:
+ license.ParseFromString(base64.b64decode(license_b64))
+ except DecodeError:
+ self.logger.error("unable to parse license - check protobufs")
+ return 1
+
+ session.license = license
+
+ self.logger.debug("license:")
+ for line in text_format.MessageToString(license).splitlines():
+ self.logger.debug(line)
+
+ self.logger.debug("deriving keys from session key")
+
+ oaep_cipher = PKCS1_OAEP.new(session.device_key)
+
+ session.session_key = oaep_cipher.decrypt(license.SessionKey)
+
+ lic_req_msg = session.license_request.Msg.SerializeToString()
+
+ enc_key_base = b"ENCRYPTION\000" + lic_req_msg + b"\0\0\0\x80"
+ auth_key_base = b"AUTHENTICATION\0" + lic_req_msg + b"\0\0\2\0"
+
+ enc_key = b"\x01" + enc_key_base
+ auth_key_1 = b"\x01" + auth_key_base
+ auth_key_2 = b"\x02" + auth_key_base
+ auth_key_3 = b"\x03" + auth_key_base
+ auth_key_4 = b"\x04" + auth_key_base
+
+ cmac_obj = CMAC.new(session.session_key, ciphermod=AES)
+ cmac_obj.update(enc_key)
+
+ enc_cmac_key = cmac_obj.digest()
+
+ cmac_obj = CMAC.new(session.session_key, ciphermod=AES)
+ cmac_obj.update(auth_key_1)
+ auth_cmac_key_1 = cmac_obj.digest()
+
+ cmac_obj = CMAC.new(session.session_key, ciphermod=AES)
+ cmac_obj.update(auth_key_2)
+ auth_cmac_key_2 = cmac_obj.digest()
+
+ cmac_obj = CMAC.new(session.session_key, ciphermod=AES)
+ cmac_obj.update(auth_key_3)
+ auth_cmac_key_3 = cmac_obj.digest()
+
+ cmac_obj = CMAC.new(session.session_key, ciphermod=AES)
+ cmac_obj.update(auth_key_4)
+ auth_cmac_key_4 = cmac_obj.digest()
+
+ auth_cmac_combined_1 = auth_cmac_key_1 + auth_cmac_key_2
+ auth_cmac_combined_2 = auth_cmac_key_3 + auth_cmac_key_4
+
+ session.derived_keys["enc"] = enc_cmac_key
+ session.derived_keys["auth_1"] = auth_cmac_combined_1
+ session.derived_keys["auth_2"] = auth_cmac_combined_2
+
+ self.logger.debug("verifying license signature")
+
+ lic_hmac = HMAC.new(session.derived_keys["auth_1"], digestmod=SHA256)
+ lic_hmac.update(license.Msg.SerializeToString())
+
+ self.logger.debug(
+ "calculated sig: {} actual sig: {}".format(
+ lic_hmac.hexdigest(), binascii.hexlify(license.Signature)
+ )
+ )
+
+ if lic_hmac.digest() != license.Signature:
+ self.logger.info(
+ "license signature doesn't match - writing bin so they can be debugged"
+ )
+ with open("original_lic.bin", "wb") as f:
+ f.write(base64.b64decode(license_b64))
+ with open("parsed_lic.bin", "wb") as f:
+ f.write(license.SerializeToString())
+ self.logger.info("continuing anyway")
+
+ self.logger.debug("key count: {}".format(len(license.Msg.Key)))
+ for key in license.Msg.Key:
+ if key.Id:
+ key_id = key.Id
+ else:
+ key_id = wv_proto2.License.KeyContainer.KeyType.Name(key.Type).encode(
+ "utf-8"
+ )
+ encrypted_key = key.Key
+ iv = key.Iv
+ type = wv_proto2.License.KeyContainer.KeyType.Name(key.Type)
+
+ cipher = AES.new(session.derived_keys["enc"], AES.MODE_CBC, iv=iv)
+ decrypted_key = cipher.decrypt(encrypted_key)
+ if type == "OPERATOR_SESSION":
+ permissions = []
+ perms = key._OperatorSessionKeyPermissions
+ for (descriptor, value) in perms.ListFields():
+ if value == 1:
+ permissions.append(descriptor.name)
+ # print(permissions)
+ else:
+ permissions = []
+ session.keys.append(
+ Key(key_id, type, Padding.unpad(decrypted_key, 16), permissions)
+ )
+
+ #self.logger.info("decrypted all keys")
+ return 0
+
+ def get_keys(self, session_id):
+ if session_id in self.sessions:
+ return self.sessions[session_id].keys
+ else:
+ self.logger.error("session not found")
+ return 1
diff --git a/pywidevine/cdm/deviceconfig.py b/pywidevine/cdm/deviceconfig.py
new file mode 100644
index 0000000..5232a75
--- /dev/null
+++ b/pywidevine/cdm/deviceconfig.py
@@ -0,0 +1,115 @@
+import os
+
+device_chromecdm_903 = {
+ "name": "chromecdm_903",
+ "description": "chrome cdm windows 903",
+ "security_level": 3,
+ "session_id_type": "chrome",
+ "private_key_available": True,
+ "vmp": False,
+ "send_key_control_nonce": False,
+}
+
+device_android_general = {
+ "name": "android_general",
+ "description": "android_general lvl3 security level",
+ "security_level": 3,
+ "session_id_type": "android",
+ "private_key_available": True,
+ "vmp": False,
+ "send_key_control_nonce": True,
+}
+
+devices_available = [
+ device_android_general,
+ device_chromecdm_903,
+]
+
+FILES_FOLDER = "devices"
+
+
+class DeviceConfig:
+ def __init__(self, device):
+ self.device_name = device["name"]
+ self.description = device["description"]
+ self.security_level = device["security_level"]
+ self.session_id_type = device["session_id_type"]
+ self.private_key_available = device["private_key_available"]
+ self.vmp = device["vmp"]
+ self.send_key_control_nonce = device["send_key_control_nonce"]
+ if "keybox_filename" in device:
+ self.keybox_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ device["keybox_filename"],
+ )
+ else:
+ self.keybox_filename = os.path.join(
+ os.path.dirname(__file__), FILES_FOLDER, device["name"], "keybox"
+ )
+ if "device_cert_filename" in device:
+ self.device_cert_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ device["device_cert_filename"],
+ )
+ else:
+ self.device_cert_filename = os.path.join(
+ os.path.dirname(__file__), FILES_FOLDER, device["name"], "device_cert"
+ )
+ if "device_private_key_filename" in device:
+ self.device_private_key_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ device["device_private_key_filename"],
+ )
+ else:
+ self.device_private_key_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ "device_private_key",
+ )
+ if "device_client_id_blob_filename" in device:
+ self.device_client_id_blob_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ device["device_client_id_blob_filename"],
+ )
+ else:
+ self.device_client_id_blob_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ "device_client_id_blob",
+ )
+ if "device_vmp_blob_filename" in device:
+ self.device_vmp_blob_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ device["device_vmp_blob_filename"],
+ )
+ else:
+ self.device_vmp_blob_filename = os.path.join(
+ os.path.dirname(__file__),
+ FILES_FOLDER,
+ device["name"],
+ "device_vmp_blob",
+ )
+
+ def __repr__(self):
+ return (
+ "DeviceConfig(name={}, description={}, security_level={}, session_id_type={}, private_key_available={}, vmp={})"
+ ).format(
+ self.device_name,
+ self.description,
+ self.security_level,
+ self.session_id_type,
+ self.private_key_available,
+ self.vmp,
+ )
diff --git a/pywidevine/cdm/devices/android_general/device_client_id_blob b/pywidevine/cdm/devices/android_general/device_client_id_blob
new file mode 100644
index 0000000..cc32780
Binary files /dev/null and b/pywidevine/cdm/devices/android_general/device_client_id_blob differ
diff --git a/pywidevine/cdm/devices/android_general/device_private_key b/pywidevine/cdm/devices/android_general/device_private_key
new file mode 100644
index 0000000..8eab693
--- /dev/null
+++ b/pywidevine/cdm/devices/android_general/device_private_key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA4sUKDpvMG/idF8oCH5AVSwFd5Mk+rEwOBsLZMYdliXWe1hn9
+mdE6u9pjsr+bLrZjlKxMFqPPxbIUcC1Ii7BFSje2Fd8kxnaIprQWxDPgK+NSSx7v
+Un452TyB1L9lx39ZBt0PlRfwjkCodX+I9y+oBga73NRh7hPbtLzXe/r/ubFBaEu+
+aRkDZBwYPqHgH1RoFLuyFNMjfqGcPosGxceDtvPysmBxB93Hk2evml5fjdYGg6tx
+z510g+XFPDFv7GSy1KuWqit83MqzPls9qAQMkwUc05ggjDhGCKW4/p97fn23WDFE
+3TzSSsQvyJLKA3s9oJbtJCD/gOHYqDvnWn8zPwIDAQABAoIBAQDCWe1Mp+o+7sx0
+XwWC15HoPruiIXg9YtGCqexLrqcvMEd5Z70Z32BfL8TSpbTyTA78lM6BeNPRs9Yg
+bi8GyYQZH7ZG+IAkN+LWPPJmJa+y7ZjSGSkzoksiC+GZ3I/2cwZyA3Qfa+0XfgLi
+8PMKJyXyREMt+DgWO57JQC/OakhRdCR19mM6NKd+ynd/IEz/NIbjMLDVKwW8HEPx
+N3r5CU9O96nr62DI68KVj3jwUR3cDi/5xfhosYhCQjHJuobNbeFR18dY2nQNLWYd
+S0wtskla1fl9eYHwYAzwru4wHT4WJC7+V4pscfCI0YZB6PslxDKrv73l5H1tz4cf
+Vy58NRSBAoGBAPSmjoVtQzTvQ6PZIs81SF1ulJI9kUpyFaBoSSgt+2ZkeNtF6Hih
+Zm7OVJ9wg9sfjpB3SFBUjuhXz/ts/t6dkA2PgCbrvhBMRKSGbfyhhtM2gRf002I4
+bJ7Y0C/ont4WzC/XbXEkAmh+fG2/JRvbdVQaIdyS6MmVHtCtRsHEQZS5AoGBAO1K
+IXOKAFA+320+Hkbqskfevmxrv+JHIdetliaREZwQH+VYUUM8u5/Kt3oyMat+mH90
+rZOKQK2zM8cz4tKclTUT54nrtICxeo6UHVc56FqXZ6sVvVgm8Cnvt1md4XwG4FwQ
+r/OlaM6Hr5HRf8dkzuzqm4ZQYRHGzZ6AMphj8Xu3AoGAdmo7p5dIJVH98kuCDrsi
+iJ6iaNpF/buUfiyb5EfFXD0bRj7jE6hDdTSHPxjtqVzv2zrxFHipJwqBz5dlEYlA
+FWA0ziHiv+66dsveZp4kLQ0/lMHaorre0E/vDJFSe/qa4DksbsvYIo2+WjxfkMk7
+U/bGFwZAiHmWDbkg+16rw3kCgYEAyyodWf9eJVavlakJ404vNrnP8KSQtfyRTUii
+toKewTBNHuBvM1JckoPOdCFlxZ+ukfIka56DojU8r+IM4qaOWdOg+sWE1mses9S9
+CmHaPzZC3IjQhRlRp5ZHNcOnu7lnf2wKOmH1Sl+CQydMcDwvr0lvv6AyfDXq9zps
+F2365CECgYEAmYgs/qwnh9m0aGDw/ZGrASoE0TxlpizPvsVDGx9t9UGC2Z+5QvAE
+ZcQeKoLCbktr0BnRLI+W1g+KpXQGcnSF9VX/qwUlf72XA6C6kobQvW+Yd/H/IN5d
+jPqoL/m41rRzm+J+9/Tfc8Aiy1kkllUYnVJdC5QLAIswuhI8lkaFTN4=
+-----END RSA PRIVATE KEY-----
diff --git a/pywidevine/cdm/formats/__init__.py b/pywidevine/cdm/formats/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/pywidevine/cdm/formats/__pycache__/__init__.cpython-36.pyc b/pywidevine/cdm/formats/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..50d9eb6
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/__init__.cpython-36.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/__init__.cpython-37.pyc b/pywidevine/cdm/formats/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..1a31cc2
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/__init__.cpython-37.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/__init__.cpython-38.pyc b/pywidevine/cdm/formats/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..d378cd1
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/__init__.cpython-38.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/__init__.cpython-39.pyc b/pywidevine/cdm/formats/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..b5863d8
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/__init__.cpython-39.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-36.pyc b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-36.pyc
new file mode 100644
index 0000000..45a9098
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-36.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-37.pyc b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-37.pyc
new file mode 100644
index 0000000..5d53f3b
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-37.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-38.pyc b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-38.pyc
new file mode 100644
index 0000000..d477911
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-38.pyc differ
diff --git a/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-39.pyc b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-39.pyc
new file mode 100644
index 0000000..3ca31c5
Binary files /dev/null and b/pywidevine/cdm/formats/__pycache__/wv_proto2_pb2.cpython-39.pyc differ
diff --git a/pywidevine/cdm/formats/wv_proto2.proto b/pywidevine/cdm/formats/wv_proto2.proto
new file mode 100644
index 0000000..04c9809
--- /dev/null
+++ b/pywidevine/cdm/formats/wv_proto2.proto
@@ -0,0 +1,466 @@
+syntax = "proto2";
+
+// from x86 (partial), most of it from the ARM version:
+message ClientIdentification {
+ enum TokenType {
+ KEYBOX = 0;
+ DEVICE_CERTIFICATE = 1;
+ REMOTE_ATTESTATION_CERTIFICATE = 2;
+ }
+ message NameValue {
+ required string Name = 1;
+ required string Value = 2;
+ }
+ message ClientCapabilities {
+ enum HdcpVersion {
+ HDCP_NONE = 0;
+ HDCP_V1 = 1;
+ HDCP_V2 = 2;
+ HDCP_V2_1 = 3;
+ HDCP_V2_2 = 4;
+ }
+ optional uint32 ClientToken = 1;
+ optional uint32 SessionToken = 2;
+ optional uint32 VideoResolutionConstraints = 3;
+ optional HdcpVersion MaxHdcpVersion = 4;
+ optional uint32 OemCryptoApiVersion = 5;
+ }
+ required TokenType Type = 1;
+ //optional bytes Token = 2; // by default the client treats this as blob, but it's usually a DeviceCertificate, so for usefulness sake, I'm replacing it with this one:
+ optional SignedDeviceCertificate Token = 2; // use this when parsing, "bytes" when building a client id blob
+ repeated NameValue ClientInfo = 3;
+ optional bytes ProviderClientToken = 4;
+ optional uint32 LicenseCounter = 5;
+ optional ClientCapabilities _ClientCapabilities = 6; // how should we deal with duped names? will have to look at proto docs later
+ optional FileHashes _FileHashes = 7; // vmp blob goes here
+}
+
+message DeviceCertificate {
+ enum CertificateType {
+ ROOT = 0;
+ INTERMEDIATE = 1;
+ USER_DEVICE = 2;
+ SERVICE = 3;
+ }
+ required CertificateType Type = 1; // the compiled code reused this as ProvisionedDeviceInfo.WvSecurityLevel, however that is incorrect (compiler aliased it as they're both identical as a structure)
+ optional bytes SerialNumber = 2;
+ optional uint32 CreationTimeSeconds = 3;
+ optional bytes PublicKey = 4;
+ optional uint32 SystemId = 5;
+ optional uint32 TestDeviceDeprecated = 6; // is it bool or int?
+ optional bytes ServiceId = 7; // service URL for service certificates
+}
+
+// missing some references,
+message DeviceCertificateStatus {
+ enum CertificateStatus {
+ VALID = 0;
+ REVOKED = 1;
+ }
+ optional bytes SerialNumber = 1;
+ optional CertificateStatus Status = 2;
+ optional ProvisionedDeviceInfo DeviceInfo = 4; // where is 3? is it deprecated?
+}
+
+message DeviceCertificateStatusList {
+ optional uint32 CreationTimeSeconds = 1;
+ repeated DeviceCertificateStatus CertificateStatus = 2;
+}
+
+message EncryptedClientIdentification {
+ required string ServiceId = 1;
+ optional bytes ServiceCertificateSerialNumber = 2;
+ required bytes EncryptedClientId = 3;
+ required bytes EncryptedClientIdIv = 4;
+ required bytes EncryptedPrivacyKey = 5;
+}
+
+// todo: fill (for this top-level type, it might be impossible/difficult)
+enum LicenseType {
+ ZERO = 0;
+ DEFAULT = 1; // 1 is STREAMING/temporary license; on recent versions may go up to 3 (latest x86); it might be persist/don't persist type, unconfirmed
+ OFFLINE = 2;
+}
+
+// todo: fill (for this top-level type, it might be impossible/difficult)
+// this is just a guess because these globals got lost, but really, do we need more?
+enum ProtocolVersion {
+ CURRENT = 21; // don't have symbols for this
+}
+
+
+message LicenseIdentification {
+ optional bytes RequestId = 1;
+ optional bytes SessionId = 2;
+ optional bytes PurchaseId = 3;
+ optional LicenseType Type = 4;
+ optional uint32 Version = 5;
+ optional bytes ProviderSessionToken = 6;
+}
+
+
+message License {
+ message Policy {
+ optional bool CanPlay = 1; // changed from uint32 to bool
+ optional bool CanPersist = 2;
+ optional bool CanRenew = 3;
+ optional uint32 RentalDurationSeconds = 4;
+ optional uint32 PlaybackDurationSeconds = 5;
+ optional uint32 LicenseDurationSeconds = 6;
+ optional uint32 RenewalRecoveryDurationSeconds = 7;
+ optional string RenewalServerUrl = 8;
+ optional uint32 RenewalDelaySeconds = 9;
+ optional uint32 RenewalRetryIntervalSeconds = 10;
+ optional bool RenewWithUsage = 11; // was uint32
+ }
+ message KeyContainer {
+ enum KeyType {
+ SIGNING = 1;
+ CONTENT = 2;
+ KEY_CONTROL = 3;
+ OPERATOR_SESSION = 4;
+ }
+ enum SecurityLevel {
+ SW_SECURE_CRYPTO = 1;
+ SW_SECURE_DECODE = 2;
+ HW_SECURE_CRYPTO = 3;
+ HW_SECURE_DECODE = 4;
+ HW_SECURE_ALL = 5;
+ }
+ message OutputProtection {
+ enum CGMS {
+ COPY_FREE = 0;
+ COPY_ONCE = 2;
+ COPY_NEVER = 3;
+ CGMS_NONE = 0x2A; // PC default!
+ }
+ optional ClientIdentification.ClientCapabilities.HdcpVersion Hdcp = 1; // it's most likely a copy of Hdcp version available here, but compiler optimized it away
+ optional CGMS CgmsFlags = 2;
+ }
+ message KeyControl {
+ required bytes KeyControlBlock = 1; // what is this?
+ required bytes Iv = 2;
+ }
+ message OperatorSessionKeyPermissions {
+ optional uint32 AllowEncrypt = 1;
+ optional uint32 AllowDecrypt = 2;
+ optional uint32 AllowSign = 3;
+ optional uint32 AllowSignatureVerify = 4;
+ }
+ message VideoResolutionConstraint {
+ optional uint32 MinResolutionPixels = 1;
+ optional uint32 MaxResolutionPixels = 2;
+ optional OutputProtection RequiredProtection = 3;
+ }
+ optional bytes Id = 1;
+ optional bytes Iv = 2;
+ optional bytes Key = 3;
+ optional KeyType Type = 4;
+ optional SecurityLevel Level = 5;
+ optional OutputProtection RequiredProtection = 6;
+ optional OutputProtection RequestedProtection = 7;
+ optional KeyControl _KeyControl = 8; // duped names, etc
+ optional OperatorSessionKeyPermissions _OperatorSessionKeyPermissions = 9; // duped names, etc
+ repeated VideoResolutionConstraint VideoResolutionConstraints = 10;
+ }
+ optional LicenseIdentification Id = 1;
+ optional Policy _Policy = 2; // duped names, etc
+ repeated KeyContainer Key = 3;
+ optional uint32 LicenseStartTime = 4;
+ optional uint32 RemoteAttestationVerified = 5; // bool?
+ optional bytes ProviderClientToken = 6;
+ // there might be more, check with newer versions (I see field 7-8 in a lic)
+ // this appeared in latest x86:
+ optional uint32 ProtectionScheme = 7; // type unconfirmed fully, but it's likely as WidevineCencHeader describesit (fourcc)
+}
+
+message LicenseError {
+ enum Error {
+ INVALID_DEVICE_CERTIFICATE = 1;
+ REVOKED_DEVICE_CERTIFICATE = 2;
+ SERVICE_UNAVAILABLE = 3;
+ }
+ //LicenseRequest.RequestType ErrorCode; // clang mismatch
+ optional Error ErrorCode = 1;
+}
+
+message LicenseRequest {
+ message ContentIdentification {
+ message CENC {
+ //optional bytes Pssh = 1; // the client's definition is opaque, it doesn't care about the contents, but the PSSH has a clear definition that is understood and requested by the server, thus I'll replace it with:
+ optional WidevineCencHeader Pssh = 1;
+ optional LicenseType LicenseType = 2; // unfortunately the LicenseType symbols are not present, acceptable value seems to only be 1 (is this persist/don't persist? look into it!)
+ optional bytes RequestId = 3;
+ }
+ message WebM {
+ optional bytes Header = 1; // identical to CENC, aside from PSSH and the parent field number used
+ optional LicenseType LicenseType = 2;
+ optional bytes RequestId = 3;
+ }
+ message ExistingLicense {
+ optional LicenseIdentification LicenseId = 1;
+ optional uint32 SecondsSinceStarted = 2;
+ optional uint32 SecondsSinceLastPlayed = 3;
+ optional bytes SessionUsageTableEntry = 4; // interesting! try to figure out the connection between the usage table blob and KCB!
+ }
+ optional CENC CencId = 1;
+ optional WebM WebmId = 2;
+ optional ExistingLicense License = 3;
+ }
+ enum RequestType {
+ NEW = 1;
+ RENEWAL = 2;
+ RELEASE = 3;
+ }
+ optional ClientIdentification ClientId = 1;
+ optional ContentIdentification ContentId = 2;
+ optional RequestType Type = 3;
+ optional uint32 RequestTime = 4;
+ optional bytes KeyControlNonceDeprecated = 5;
+ optional ProtocolVersion ProtocolVersion = 6; // lacking symbols for this
+ optional uint32 KeyControlNonce = 7;
+ optional EncryptedClientIdentification EncryptedClientId = 8;
+}
+
+// raw pssh hack
+message LicenseRequestRaw {
+ message ContentIdentification {
+ message CENC {
+ optional bytes Pssh = 1; // the client's definition is opaque, it doesn't care about the contents, but the PSSH has a clear definition that is understood and requested by the server, thus I'll replace it with:
+ //optional WidevineCencHeader Pssh = 1;
+ optional LicenseType LicenseType = 2; // unfortunately the LicenseType symbols are not present, acceptable value seems to only be 1 (is this persist/don't persist? look into it!)
+ optional bytes RequestId = 3;
+ }
+ message WebM {
+ optional bytes Header = 1; // identical to CENC, aside from PSSH and the parent field number used
+ optional LicenseType LicenseType = 2;
+ optional bytes RequestId = 3;
+ }
+ message ExistingLicense {
+ optional LicenseIdentification LicenseId = 1;
+ optional uint32 SecondsSinceStarted = 2;
+ optional uint32 SecondsSinceLastPlayed = 3;
+ optional bytes SessionUsageTableEntry = 4; // interesting! try to figure out the connection between the usage table blob and KCB!
+ }
+ optional CENC CencId = 1;
+ optional WebM WebmId = 2;
+ optional ExistingLicense License = 3;
+ }
+ enum RequestType {
+ NEW = 1;
+ RENEWAL = 2;
+ RELEASE = 3;
+ }
+ optional ClientIdentification ClientId = 1;
+ optional ContentIdentification ContentId = 2;
+ optional RequestType Type = 3;
+ optional uint32 RequestTime = 4;
+ optional bytes KeyControlNonceDeprecated = 5;
+ optional ProtocolVersion ProtocolVersion = 6; // lacking symbols for this
+ optional uint32 KeyControlNonce = 7;
+ optional EncryptedClientIdentification EncryptedClientId = 8;
+}
+
+
+message ProvisionedDeviceInfo {
+ enum WvSecurityLevel {
+ LEVEL_UNSPECIFIED = 0;
+ LEVEL_1 = 1;
+ LEVEL_2 = 2;
+ LEVEL_3 = 3;
+ }
+ optional uint32 SystemId = 1;
+ optional string Soc = 2;
+ optional string Manufacturer = 3;
+ optional string Model = 4;
+ optional string DeviceType = 5;
+ optional uint32 ModelYear = 6;
+ optional WvSecurityLevel SecurityLevel = 7;
+ optional uint32 TestDevice = 8; // bool?
+}
+
+
+// todo: fill
+message ProvisioningOptions {
+}
+
+// todo: fill
+message ProvisioningRequest {
+}
+
+// todo: fill
+message ProvisioningResponse {
+}
+
+message RemoteAttestation {
+ optional EncryptedClientIdentification Certificate = 1;
+ optional string Salt = 2;
+ optional string Signature = 3;
+}
+
+// todo: fill
+message SessionInit {
+}
+
+// todo: fill
+message SessionState {
+}
+
+// todo: fill
+message SignedCertificateStatusList {
+}
+
+message SignedDeviceCertificate {
+
+ //optional bytes DeviceCertificate = 1; // again, they use a buffer where it's supposed to be a message, so we'll replace it with what it really is:
+ optional DeviceCertificate _DeviceCertificate = 1; // how should we deal with duped names? will have to look at proto docs later
+ optional bytes Signature = 2;
+ optional SignedDeviceCertificate Signer = 3;
+}
+
+
+// todo: fill
+message SignedProvisioningMessage {
+}
+
+// the root of all messages, from either server or client
+message SignedMessage {
+ enum MessageType {
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ optional MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ optional bytes Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ optional bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ optional bytes SessionKey = 4; // often RSA wrapped for licenses
+ optional RemoteAttestation RemoteAttestation = 5;
+}
+
+
+
+// This message is copied from google's docs, not reversed:
+message WidevineCencHeader {
+ enum Algorithm {
+ UNENCRYPTED = 0;
+ AESCTR = 1;
+ };
+ optional Algorithm algorithm = 1;
+ repeated bytes key_id = 2;
+
+ // Content provider name.
+ optional string provider = 3;
+
+ // A content identifier, specified by content provider.
+ optional bytes content_id = 4;
+
+ // Track type. Acceptable values are SD, HD and AUDIO. Used to
+ // differentiate content keys used by an asset.
+ optional string track_type_deprecated = 5;
+
+ // The name of a registered policy to be used for this asset.
+ optional string policy = 6;
+
+ // Crypto period index, for media using key rotation.
+ optional uint32 crypto_period_index = 7;
+
+ // Optional protected context for group content. The grouped_license is a
+ // serialized SignedMessage.
+ optional bytes grouped_license = 8;
+
+ // Protection scheme identifying the encryption algorithm.
+ // Represented as one of the following 4CC values:
+ // 'cenc' (AESCTR), 'cbc1' (AESCBC),
+ // 'cens' (AESCTR subsample), 'cbcs' (AESCBC subsample).
+ optional uint32 protection_scheme = 9;
+
+ // Optional. For media using key rotation, this represents the duration
+ // of each crypto period in seconds.
+ optional uint32 crypto_period_seconds = 10;
+}
+
+
+// remove these when using it outside of protoc:
+
+// from here on, it's just for testing, these messages don't exist in the binaries, I'm adding them to avoid detecting type programmatically
+message SignedLicenseRequest {
+ enum MessageType {
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ optional MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ optional LicenseRequest Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ optional bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ optional bytes SessionKey = 4; // often RSA wrapped for licenses
+ optional RemoteAttestation RemoteAttestation = 5;
+}
+
+// hack
+message SignedLicenseRequestRaw {
+ enum MessageType {
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ optional MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ optional LicenseRequestRaw Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ optional bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ optional bytes SessionKey = 4; // often RSA wrapped for licenses
+ optional RemoteAttestation RemoteAttestation = 5;
+}
+
+
+message SignedLicense {
+ enum MessageType {
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ optional MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ optional License Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ optional bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ optional bytes SessionKey = 4; // often RSA wrapped for licenses
+ optional RemoteAttestation RemoteAttestation = 5;
+}
+
+message SignedServiceCertificate {
+ enum MessageType {
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ optional MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ optional SignedDeviceCertificate Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ optional bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ optional bytes SessionKey = 4; // often RSA wrapped for licenses
+ optional RemoteAttestation RemoteAttestation = 5;
+}
+
+//vmp support
+message FileHashes {
+ message Signature {
+ optional string filename = 1;
+ optional bool test_signing = 2; //0 - release, 1 - testing
+ optional bytes SHA512Hash = 3;
+ optional bool main_exe = 4; //0 for dlls, 1 for exe, this is field 3 in file
+ optional bytes signature = 5;
+ }
+ optional bytes signer = 1;
+ repeated Signature signatures = 2;
+}
diff --git a/pywidevine/cdm/formats/wv_proto2_pb2.py b/pywidevine/cdm/formats/wv_proto2_pb2.py
new file mode 100644
index 0000000..4c2a6d1
--- /dev/null
+++ b/pywidevine/cdm/formats/wv_proto2_pb2.py
@@ -0,0 +1,3324 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: pywidevine/cdm/formats/wv_proto2.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='pywidevine/cdm/formats/wv_proto2.proto',
+ package='',
+ syntax='proto2',
+ serialized_pb=_b('\n&pywidevine/cdm/formats/wv_proto2.proto\"\xe7\x05\n\x14\x43lientIdentification\x12-\n\x04Type\x18\x01 \x02(\x0e\x32\x1f.ClientIdentification.TokenType\x12\'\n\x05Token\x18\x02 \x01(\x0b\x32\x18.SignedDeviceCertificate\x12\x33\n\nClientInfo\x18\x03 \x03(\x0b\x32\x1f.ClientIdentification.NameValue\x12\x1b\n\x13ProviderClientToken\x18\x04 \x01(\x0c\x12\x16\n\x0eLicenseCounter\x18\x05 \x01(\r\x12\x45\n\x13_ClientCapabilities\x18\x06 \x01(\x0b\x32(.ClientIdentification.ClientCapabilities\x12 \n\x0b_FileHashes\x18\x07 \x01(\x0b\x32\x0b.FileHashes\x1a(\n\tNameValue\x12\x0c\n\x04Name\x18\x01 \x02(\t\x12\r\n\x05Value\x18\x02 \x02(\t\x1a\xa4\x02\n\x12\x43lientCapabilities\x12\x13\n\x0b\x43lientToken\x18\x01 \x01(\r\x12\x14\n\x0cSessionToken\x18\x02 \x01(\r\x12\"\n\x1aVideoResolutionConstraints\x18\x03 \x01(\r\x12L\n\x0eMaxHdcpVersion\x18\x04 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12\x1b\n\x13OemCryptoApiVersion\x18\x05 \x01(\r\"T\n\x0bHdcpVersion\x12\r\n\tHDCP_NONE\x10\x00\x12\x0b\n\x07HDCP_V1\x10\x01\x12\x0b\n\x07HDCP_V2\x10\x02\x12\r\n\tHDCP_V2_1\x10\x03\x12\r\n\tHDCP_V2_2\x10\x04\"S\n\tTokenType\x12\n\n\x06KEYBOX\x10\x00\x12\x16\n\x12\x44\x45VICE_CERTIFICATE\x10\x01\x12\"\n\x1eREMOTE_ATTESTATION_CERTIFICATE\x10\x02\"\x9b\x02\n\x11\x44\x65viceCertificate\x12\x30\n\x04Type\x18\x01 \x02(\x0e\x32\".DeviceCertificate.CertificateType\x12\x14\n\x0cSerialNumber\x18\x02 \x01(\x0c\x12\x1b\n\x13\x43reationTimeSeconds\x18\x03 \x01(\r\x12\x11\n\tPublicKey\x18\x04 \x01(\x0c\x12\x10\n\x08SystemId\x18\x05 \x01(\r\x12\x1c\n\x14TestDeviceDeprecated\x18\x06 \x01(\r\x12\x11\n\tServiceId\x18\x07 \x01(\x0c\"K\n\x0f\x43\x65rtificateType\x12\x08\n\x04ROOT\x10\x00\x12\x10\n\x0cINTERMEDIATE\x10\x01\x12\x0f\n\x0bUSER_DEVICE\x10\x02\x12\x0b\n\x07SERVICE\x10\x03\"\xc4\x01\n\x17\x44\x65viceCertificateStatus\x12\x14\n\x0cSerialNumber\x18\x01 \x01(\x0c\x12:\n\x06Status\x18\x02 \x01(\x0e\x32*.DeviceCertificateStatus.CertificateStatus\x12*\n\nDeviceInfo\x18\x04 \x01(\x0b\x32\x16.ProvisionedDeviceInfo\"+\n\x11\x43\x65rtificateStatus\x12\t\n\x05VALID\x10\x00\x12\x0b\n\x07REVOKED\x10\x01\"o\n\x1b\x44\x65viceCertificateStatusList\x12\x1b\n\x13\x43reationTimeSeconds\x18\x01 \x01(\r\x12\x33\n\x11\x43\x65rtificateStatus\x18\x02 \x03(\x0b\x32\x18.DeviceCertificateStatus\"\xaf\x01\n\x1d\x45ncryptedClientIdentification\x12\x11\n\tServiceId\x18\x01 \x02(\t\x12&\n\x1eServiceCertificateSerialNumber\x18\x02 \x01(\x0c\x12\x19\n\x11\x45ncryptedClientId\x18\x03 \x02(\x0c\x12\x1b\n\x13\x45ncryptedClientIdIv\x18\x04 \x02(\x0c\x12\x1b\n\x13\x45ncryptedPrivacyKey\x18\x05 \x02(\x0c\"\x9c\x01\n\x15LicenseIdentification\x12\x11\n\tRequestId\x18\x01 \x01(\x0c\x12\x11\n\tSessionId\x18\x02 \x01(\x0c\x12\x12\n\nPurchaseId\x18\x03 \x01(\x0c\x12\x1a\n\x04Type\x18\x04 \x01(\x0e\x32\x0c.LicenseType\x12\x0f\n\x07Version\x18\x05 \x01(\r\x12\x1c\n\x14ProviderSessionToken\x18\x06 \x01(\x0c\"\xa1\x0e\n\x07License\x12\"\n\x02Id\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12 \n\x07_Policy\x18\x02 \x01(\x0b\x32\x0f.License.Policy\x12\"\n\x03Key\x18\x03 \x03(\x0b\x32\x15.License.KeyContainer\x12\x18\n\x10LicenseStartTime\x18\x04 \x01(\r\x12!\n\x19RemoteAttestationVerified\x18\x05 \x01(\r\x12\x1b\n\x13ProviderClientToken\x18\x06 \x01(\x0c\x12\x18\n\x10ProtectionScheme\x18\x07 \x01(\r\x1a\xbb\x02\n\x06Policy\x12\x0f\n\x07\x43\x61nPlay\x18\x01 \x01(\x08\x12\x12\n\nCanPersist\x18\x02 \x01(\x08\x12\x10\n\x08\x43\x61nRenew\x18\x03 \x01(\x08\x12\x1d\n\x15RentalDurationSeconds\x18\x04 \x01(\r\x12\x1f\n\x17PlaybackDurationSeconds\x18\x05 \x01(\r\x12\x1e\n\x16LicenseDurationSeconds\x18\x06 \x01(\r\x12&\n\x1eRenewalRecoveryDurationSeconds\x18\x07 \x01(\r\x12\x18\n\x10RenewalServerUrl\x18\x08 \x01(\t\x12\x1b\n\x13RenewalDelaySeconds\x18\t \x01(\r\x12#\n\x1bRenewalRetryIntervalSeconds\x18\n \x01(\r\x12\x16\n\x0eRenewWithUsage\x18\x0b \x01(\x08\x1a\xf9\t\n\x0cKeyContainer\x12\n\n\x02Id\x18\x01 \x01(\x0c\x12\n\n\x02Iv\x18\x02 \x01(\x0c\x12\x0b\n\x03Key\x18\x03 \x01(\x0c\x12+\n\x04Type\x18\x04 \x01(\x0e\x32\x1d.License.KeyContainer.KeyType\x12\x32\n\x05Level\x18\x05 \x01(\x0e\x32#.License.KeyContainer.SecurityLevel\x12\x42\n\x12RequiredProtection\x18\x06 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x43\n\x13RequestedProtection\x18\x07 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x35\n\x0b_KeyControl\x18\x08 \x01(\x0b\x32 .License.KeyContainer.KeyControl\x12[\n\x1e_OperatorSessionKeyPermissions\x18\t \x01(\x0b\x32\x33.License.KeyContainer.OperatorSessionKeyPermissions\x12S\n\x1aVideoResolutionConstraints\x18\n \x03(\x0b\x32/.License.KeyContainer.VideoResolutionConstraint\x1a\xdb\x01\n\x10OutputProtection\x12\x42\n\x04Hdcp\x18\x01 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12>\n\tCgmsFlags\x18\x02 \x01(\x0e\x32+.License.KeyContainer.OutputProtection.CGMS\"C\n\x04\x43GMS\x12\r\n\tCOPY_FREE\x10\x00\x12\r\n\tCOPY_ONCE\x10\x02\x12\x0e\n\nCOPY_NEVER\x10\x03\x12\r\n\tCGMS_NONE\x10*\x1a\x31\n\nKeyControl\x12\x17\n\x0fKeyControlBlock\x18\x01 \x02(\x0c\x12\n\n\x02Iv\x18\x02 \x02(\x0c\x1a|\n\x1dOperatorSessionKeyPermissions\x12\x14\n\x0c\x41llowEncrypt\x18\x01 \x01(\r\x12\x14\n\x0c\x41llowDecrypt\x18\x02 \x01(\r\x12\x11\n\tAllowSign\x18\x03 \x01(\r\x12\x1c\n\x14\x41llowSignatureVerify\x18\x04 \x01(\r\x1a\x99\x01\n\x19VideoResolutionConstraint\x12\x1b\n\x13MinResolutionPixels\x18\x01 \x01(\r\x12\x1b\n\x13MaxResolutionPixels\x18\x02 \x01(\r\x12\x42\n\x12RequiredProtection\x18\x03 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\"J\n\x07KeyType\x12\x0b\n\x07SIGNING\x10\x01\x12\x0b\n\x07\x43ONTENT\x10\x02\x12\x0f\n\x0bKEY_CONTROL\x10\x03\x12\x14\n\x10OPERATOR_SESSION\x10\x04\"z\n\rSecurityLevel\x12\x14\n\x10SW_SECURE_CRYPTO\x10\x01\x12\x14\n\x10SW_SECURE_DECODE\x10\x02\x12\x14\n\x10HW_SECURE_CRYPTO\x10\x03\x12\x14\n\x10HW_SECURE_DECODE\x10\x04\x12\x11\n\rHW_SECURE_ALL\x10\x05\"\x98\x01\n\x0cLicenseError\x12&\n\tErrorCode\x18\x01 \x01(\x0e\x32\x13.LicenseError.Error\"`\n\x05\x45rror\x12\x1e\n\x1aINVALID_DEVICE_CERTIFICATE\x10\x01\x12\x1e\n\x1aREVOKED_DEVICE_CERTIFICATE\x10\x02\x12\x17\n\x13SERVICE_UNAVAILABLE\x10\x03\"\xac\x07\n\x0eLicenseRequest\x12\'\n\x08\x43lientId\x18\x01 \x01(\x0b\x32\x15.ClientIdentification\x12\x38\n\tContentId\x18\x02 \x01(\x0b\x32%.LicenseRequest.ContentIdentification\x12)\n\x04Type\x18\x03 \x01(\x0e\x32\x1b.LicenseRequest.RequestType\x12\x13\n\x0bRequestTime\x18\x04 \x01(\r\x12!\n\x19KeyControlNonceDeprecated\x18\x05 \x01(\x0c\x12)\n\x0fProtocolVersion\x18\x06 \x01(\x0e\x32\x10.ProtocolVersion\x12\x17\n\x0fKeyControlNonce\x18\x07 \x01(\r\x12\x39\n\x11\x45ncryptedClientId\x18\x08 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x1a\xa2\x04\n\x15\x43ontentIdentification\x12:\n\x06\x43\x65ncId\x18\x01 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.CENC\x12:\n\x06WebmId\x18\x02 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.WebM\x12\x46\n\x07License\x18\x03 \x01(\x0b\x32\x35.LicenseRequest.ContentIdentification.ExistingLicense\x1a_\n\x04\x43\x45NC\x12!\n\x04Pssh\x18\x01 \x01(\x0b\x32\x13.WidevineCencHeader\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1aL\n\x04WebM\x12\x0e\n\x06Header\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1a\x99\x01\n\x0f\x45xistingLicense\x12)\n\tLicenseId\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12\x1b\n\x13SecondsSinceStarted\x18\x02 \x01(\r\x12\x1e\n\x16SecondsSinceLastPlayed\x18\x03 \x01(\r\x12\x1e\n\x16SessionUsageTableEntry\x18\x04 \x01(\x0c\"0\n\x0bRequestType\x12\x07\n\x03NEW\x10\x01\x12\x0b\n\x07RENEWAL\x10\x02\x12\x0b\n\x07RELEASE\x10\x03\"\xa9\x07\n\x11LicenseRequestRaw\x12\'\n\x08\x43lientId\x18\x01 \x01(\x0b\x32\x15.ClientIdentification\x12;\n\tContentId\x18\x02 \x01(\x0b\x32(.LicenseRequestRaw.ContentIdentification\x12,\n\x04Type\x18\x03 \x01(\x0e\x32\x1e.LicenseRequestRaw.RequestType\x12\x13\n\x0bRequestTime\x18\x04 \x01(\r\x12!\n\x19KeyControlNonceDeprecated\x18\x05 \x01(\x0c\x12)\n\x0fProtocolVersion\x18\x06 \x01(\x0e\x32\x10.ProtocolVersion\x12\x17\n\x0fKeyControlNonce\x18\x07 \x01(\r\x12\x39\n\x11\x45ncryptedClientId\x18\x08 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x1a\x96\x04\n\x15\x43ontentIdentification\x12=\n\x06\x43\x65ncId\x18\x01 \x01(\x0b\x32-.LicenseRequestRaw.ContentIdentification.CENC\x12=\n\x06WebmId\x18\x02 \x01(\x0b\x32-.LicenseRequestRaw.ContentIdentification.WebM\x12I\n\x07License\x18\x03 \x01(\x0b\x32\x38.LicenseRequestRaw.ContentIdentification.ExistingLicense\x1aJ\n\x04\x43\x45NC\x12\x0c\n\x04Pssh\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1aL\n\x04WebM\x12\x0e\n\x06Header\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1a\x99\x01\n\x0f\x45xistingLicense\x12)\n\tLicenseId\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12\x1b\n\x13SecondsSinceStarted\x18\x02 \x01(\r\x12\x1e\n\x16SecondsSinceLastPlayed\x18\x03 \x01(\r\x12\x1e\n\x16SessionUsageTableEntry\x18\x04 \x01(\x0c\"0\n\x0bRequestType\x12\x07\n\x03NEW\x10\x01\x12\x0b\n\x07RENEWAL\x10\x02\x12\x0b\n\x07RELEASE\x10\x03\"\xa6\x02\n\x15ProvisionedDeviceInfo\x12\x10\n\x08SystemId\x18\x01 \x01(\r\x12\x0b\n\x03Soc\x18\x02 \x01(\t\x12\x14\n\x0cManufacturer\x18\x03 \x01(\t\x12\r\n\x05Model\x18\x04 \x01(\t\x12\x12\n\nDeviceType\x18\x05 \x01(\t\x12\x11\n\tModelYear\x18\x06 \x01(\r\x12=\n\rSecurityLevel\x18\x07 \x01(\x0e\x32&.ProvisionedDeviceInfo.WvSecurityLevel\x12\x12\n\nTestDevice\x18\x08 \x01(\r\"O\n\x0fWvSecurityLevel\x12\x15\n\x11LEVEL_UNSPECIFIED\x10\x00\x12\x0b\n\x07LEVEL_1\x10\x01\x12\x0b\n\x07LEVEL_2\x10\x02\x12\x0b\n\x07LEVEL_3\x10\x03\"\x15\n\x13ProvisioningOptions\"\x15\n\x13ProvisioningRequest\"\x16\n\x14ProvisioningResponse\"i\n\x11RemoteAttestation\x12\x33\n\x0b\x43\x65rtificate\x18\x01 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x12\x0c\n\x04Salt\x18\x02 \x01(\t\x12\x11\n\tSignature\x18\x03 \x01(\t\"\r\n\x0bSessionInit\"\x0e\n\x0cSessionState\"\x1d\n\x1bSignedCertificateStatusList\"\x86\x01\n\x17SignedDeviceCertificate\x12.\n\x12_DeviceCertificate\x18\x01 \x01(\x0b\x32\x12.DeviceCertificate\x12\x11\n\tSignature\x18\x02 \x01(\x0c\x12(\n\x06Signer\x18\x03 \x01(\x0b\x32\x18.SignedDeviceCertificate\"\x1b\n\x19SignedProvisioningMessage\"\x9b\x02\n\rSignedMessage\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedMessage.MessageType\x12\x0b\n\x03Msg\x18\x02 \x01(\x0c\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xc5\x02\n\x12WidevineCencHeader\x12\x30\n\talgorithm\x18\x01 \x01(\x0e\x32\x1d.WidevineCencHeader.Algorithm\x12\x0e\n\x06key_id\x18\x02 \x03(\x0c\x12\x10\n\x08provider\x18\x03 \x01(\t\x12\x12\n\ncontent_id\x18\x04 \x01(\x0c\x12\x1d\n\x15track_type_deprecated\x18\x05 \x01(\t\x12\x0e\n\x06policy\x18\x06 \x01(\t\x12\x1b\n\x13\x63rypto_period_index\x18\x07 \x01(\r\x12\x17\n\x0fgrouped_license\x18\x08 \x01(\x0c\x12\x19\n\x11protection_scheme\x18\t \x01(\r\x12\x1d\n\x15\x63rypto_period_seconds\x18\n \x01(\r\"(\n\tAlgorithm\x12\x0f\n\x0bUNENCRYPTED\x10\x00\x12\n\n\x06\x41\x45SCTR\x10\x01\"\xba\x02\n\x14SignedLicenseRequest\x12/\n\x04Type\x18\x01 \x01(\x0e\x32!.SignedLicenseRequest.MessageType\x12\x1c\n\x03Msg\x18\x02 \x01(\x0b\x32\x0f.LicenseRequest\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xc3\x02\n\x17SignedLicenseRequestRaw\x12\x32\n\x04Type\x18\x01 \x01(\x0e\x32$.SignedLicenseRequestRaw.MessageType\x12\x1f\n\x03Msg\x18\x02 \x01(\x0b\x32\x12.LicenseRequestRaw\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xa5\x02\n\rSignedLicense\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedLicense.MessageType\x12\x15\n\x03Msg\x18\x02 \x01(\x0b\x32\x08.License\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xcb\x02\n\x18SignedServiceCertificate\x12\x33\n\x04Type\x18\x01 \x01(\x0e\x32%.SignedServiceCertificate.MessageType\x12%\n\x03Msg\x18\x02 \x01(\x0b\x32\x18.SignedDeviceCertificate\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"}\n\x0bMessageType\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xb5\x01\n\nFileHashes\x12\x0e\n\x06signer\x18\x01 \x01(\x0c\x12)\n\nsignatures\x18\x02 \x03(\x0b\x32\x15.FileHashes.Signature\x1al\n\tSignature\x12\x10\n\x08\x66ilename\x18\x01 \x01(\t\x12\x14\n\x0ctest_signing\x18\x02 \x01(\x08\x12\x12\n\nSHA512Hash\x18\x03 \x01(\x0c\x12\x10\n\x08main_exe\x18\x04 \x01(\x08\x12\x11\n\tsignature\x18\x05 \x01(\x0c*1\n\x0bLicenseType\x12\x08\n\x04ZERO\x10\x00\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x01\x12\x0b\n\x07OFFLINE\x10\x02*\x1e\n\x0fProtocolVersion\x12\x0b\n\x07\x43URRENT\x10\x15')
+)
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+_LICENSETYPE = _descriptor.EnumDescriptor(
+ name='LicenseType',
+ full_name='LicenseType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ZERO', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEFAULT', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OFFLINE', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=8362,
+ serialized_end=8411,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSETYPE)
+
+LicenseType = enum_type_wrapper.EnumTypeWrapper(_LICENSETYPE)
+_PROTOCOLVERSION = _descriptor.EnumDescriptor(
+ name='ProtocolVersion',
+ full_name='ProtocolVersion',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='CURRENT', index=0, number=21,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=8413,
+ serialized_end=8443,
+)
+_sym_db.RegisterEnumDescriptor(_PROTOCOLVERSION)
+
+ProtocolVersion = enum_type_wrapper.EnumTypeWrapper(_PROTOCOLVERSION)
+ZERO = 0
+DEFAULT = 1
+OFFLINE = 2
+CURRENT = 21
+
+
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION = _descriptor.EnumDescriptor(
+ name='HdcpVersion',
+ full_name='ClientIdentification.ClientCapabilities.HdcpVersion',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_NONE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V1', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2_1', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2_2', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=617,
+ serialized_end=701,
+)
+_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION)
+
+_CLIENTIDENTIFICATION_TOKENTYPE = _descriptor.EnumDescriptor(
+ name='TokenType',
+ full_name='ClientIdentification.TokenType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='KEYBOX', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEVICE_CERTIFICATE', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REMOTE_ATTESTATION_CERTIFICATE', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=703,
+ serialized_end=786,
+)
+_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_TOKENTYPE)
+
+_DEVICECERTIFICATE_CERTIFICATETYPE = _descriptor.EnumDescriptor(
+ name='CertificateType',
+ full_name='DeviceCertificate.CertificateType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ROOT', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INTERMEDIATE', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_DEVICE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=997,
+ serialized_end=1072,
+)
+_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATE_CERTIFICATETYPE)
+
+_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS = _descriptor.EnumDescriptor(
+ name='CertificateStatus',
+ full_name='DeviceCertificateStatus.CertificateStatus',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='VALID', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVOKED', index=1, number=1,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=1228,
+ serialized_end=1271,
+)
+_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS)
+
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS = _descriptor.EnumDescriptor(
+ name='CGMS',
+ full_name='License.KeyContainer.OutputProtection.CGMS',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='COPY_FREE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COPY_ONCE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COPY_NEVER', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CGMS_NONE', index=3, number=42,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=2949,
+ serialized_end=3016,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS)
+
+_LICENSE_KEYCONTAINER_KEYTYPE = _descriptor.EnumDescriptor(
+ name='KeyType',
+ full_name='License.KeyContainer.KeyType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='SIGNING', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONTENT', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEY_CONTROL', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATOR_SESSION', index=3, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3351,
+ serialized_end=3425,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_KEYTYPE)
+
+_LICENSE_KEYCONTAINER_SECURITYLEVEL = _descriptor.EnumDescriptor(
+ name='SecurityLevel',
+ full_name='License.KeyContainer.SecurityLevel',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='SW_SECURE_CRYPTO', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SW_SECURE_DECODE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_CRYPTO', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_DECODE', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_ALL', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3427,
+ serialized_end=3549,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_SECURITYLEVEL)
+
+_LICENSEERROR_ERROR = _descriptor.EnumDescriptor(
+ name='Error',
+ full_name='LicenseError.Error',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DEVICE_CERTIFICATE', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVOKED_DEVICE_CERTIFICATE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_UNAVAILABLE', index=2, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3608,
+ serialized_end=3704,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSEERROR_ERROR)
+
+_LICENSEREQUEST_REQUESTTYPE = _descriptor.EnumDescriptor(
+ name='RequestType',
+ full_name='LicenseRequest.RequestType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='NEW', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RENEWAL', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RELEASE', index=2, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=4599,
+ serialized_end=4647,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSEREQUEST_REQUESTTYPE)
+
+_LICENSEREQUESTRAW_REQUESTTYPE = _descriptor.EnumDescriptor(
+ name='RequestType',
+ full_name='LicenseRequestRaw.RequestType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='NEW', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RENEWAL', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RELEASE', index=2, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=4599,
+ serialized_end=4647,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSEREQUESTRAW_REQUESTTYPE)
+
+_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL = _descriptor.EnumDescriptor(
+ name='WvSecurityLevel',
+ full_name='ProvisionedDeviceInfo.WvSecurityLevel',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_1', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_2', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_3', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=5805,
+ serialized_end=5884,
+)
+_sym_db.RegisterEnumDescriptor(_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL)
+
+_SIGNEDMESSAGE_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedMessage.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6450,
+ serialized_end=6575,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDMESSAGE_MESSAGETYPE)
+
+_WIDEVINECENCHEADER_ALGORITHM = _descriptor.EnumDescriptor(
+ name='Algorithm',
+ full_name='WidevineCencHeader.Algorithm',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNENCRYPTED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AESCTR', index=1, number=1,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6863,
+ serialized_end=6903,
+)
+_sym_db.RegisterEnumDescriptor(_WIDEVINECENCHEADER_ALGORITHM)
+
+_SIGNEDLICENSEREQUEST_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedLicenseRequest.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6450,
+ serialized_end=6575,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUEST_MESSAGETYPE)
+
+_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedLicenseRequestRaw.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6450,
+ serialized_end=6575,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE)
+
+_SIGNEDLICENSE_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedLicense.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6450,
+ serialized_end=6575,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSE_MESSAGETYPE)
+
+_SIGNEDSERVICECERTIFICATE_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedServiceCertificate.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=0, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=3, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=4, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6450,
+ serialized_end=6575,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDSERVICECERTIFICATE_MESSAGETYPE)
+
+
+_CLIENTIDENTIFICATION_NAMEVALUE = _descriptor.Descriptor(
+ name='NameValue',
+ full_name='ClientIdentification.NameValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Name', full_name='ClientIdentification.NameValue.Name', index=0,
+ number=1, type=9, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Value', full_name='ClientIdentification.NameValue.Value', index=1,
+ number=2, type=9, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=366,
+ serialized_end=406,
+)
+
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES = _descriptor.Descriptor(
+ name='ClientCapabilities',
+ full_name='ClientIdentification.ClientCapabilities',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ClientToken', full_name='ClientIdentification.ClientCapabilities.ClientToken', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionToken', full_name='ClientIdentification.ClientCapabilities.SessionToken', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='VideoResolutionConstraints', full_name='ClientIdentification.ClientCapabilities.VideoResolutionConstraints', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='MaxHdcpVersion', full_name='ClientIdentification.ClientCapabilities.MaxHdcpVersion', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='OemCryptoApiVersion', full_name='ClientIdentification.ClientCapabilities.OemCryptoApiVersion', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=409,
+ serialized_end=701,
+)
+
+_CLIENTIDENTIFICATION = _descriptor.Descriptor(
+ name='ClientIdentification',
+ full_name='ClientIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='ClientIdentification.Type', index=0,
+ number=1, type=14, cpp_type=8, label=2,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Token', full_name='ClientIdentification.Token', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ClientInfo', full_name='ClientIdentification.ClientInfo', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderClientToken', full_name='ClientIdentification.ProviderClientToken', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseCounter', full_name='ClientIdentification.LicenseCounter', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_ClientCapabilities', full_name='ClientIdentification._ClientCapabilities', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_FileHashes', full_name='ClientIdentification._FileHashes', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_CLIENTIDENTIFICATION_NAMEVALUE, _CLIENTIDENTIFICATION_CLIENTCAPABILITIES, ],
+ enum_types=[
+ _CLIENTIDENTIFICATION_TOKENTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=43,
+ serialized_end=786,
+)
+
+
+_DEVICECERTIFICATE = _descriptor.Descriptor(
+ name='DeviceCertificate',
+ full_name='DeviceCertificate',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='DeviceCertificate.Type', index=0,
+ number=1, type=14, cpp_type=8, label=2,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SerialNumber', full_name='DeviceCertificate.SerialNumber', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CreationTimeSeconds', full_name='DeviceCertificate.CreationTimeSeconds', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PublicKey', full_name='DeviceCertificate.PublicKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SystemId', full_name='DeviceCertificate.SystemId', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='TestDeviceDeprecated', full_name='DeviceCertificate.TestDeviceDeprecated', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ServiceId', full_name='DeviceCertificate.ServiceId', index=6,
+ number=7, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DEVICECERTIFICATE_CERTIFICATETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=789,
+ serialized_end=1072,
+)
+
+
+_DEVICECERTIFICATESTATUS = _descriptor.Descriptor(
+ name='DeviceCertificateStatus',
+ full_name='DeviceCertificateStatus',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='SerialNumber', full_name='DeviceCertificateStatus.SerialNumber', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Status', full_name='DeviceCertificateStatus.Status', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='DeviceInfo', full_name='DeviceCertificateStatus.DeviceInfo', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1075,
+ serialized_end=1271,
+)
+
+
+_DEVICECERTIFICATESTATUSLIST = _descriptor.Descriptor(
+ name='DeviceCertificateStatusList',
+ full_name='DeviceCertificateStatusList',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CreationTimeSeconds', full_name='DeviceCertificateStatusList.CreationTimeSeconds', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CertificateStatus', full_name='DeviceCertificateStatusList.CertificateStatus', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1273,
+ serialized_end=1384,
+)
+
+
+_ENCRYPTEDCLIENTIDENTIFICATION = _descriptor.Descriptor(
+ name='EncryptedClientIdentification',
+ full_name='EncryptedClientIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ServiceId', full_name='EncryptedClientIdentification.ServiceId', index=0,
+ number=1, type=9, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ServiceCertificateSerialNumber', full_name='EncryptedClientIdentification.ServiceCertificateSerialNumber', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientId', full_name='EncryptedClientIdentification.EncryptedClientId', index=2,
+ number=3, type=12, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientIdIv', full_name='EncryptedClientIdentification.EncryptedClientIdIv', index=3,
+ number=4, type=12, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedPrivacyKey', full_name='EncryptedClientIdentification.EncryptedPrivacyKey', index=4,
+ number=5, type=12, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1387,
+ serialized_end=1562,
+)
+
+
+_LICENSEIDENTIFICATION = _descriptor.Descriptor(
+ name='LicenseIdentification',
+ full_name='LicenseIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseIdentification.RequestId', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionId', full_name='LicenseIdentification.SessionId', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PurchaseId', full_name='LicenseIdentification.PurchaseId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='LicenseIdentification.Type', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Version', full_name='LicenseIdentification.Version', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderSessionToken', full_name='LicenseIdentification.ProviderSessionToken', index=5,
+ number=6, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1565,
+ serialized_end=1721,
+)
+
+
+_LICENSE_POLICY = _descriptor.Descriptor(
+ name='Policy',
+ full_name='License.Policy',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CanPlay', full_name='License.Policy.CanPlay', index=0,
+ number=1, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CanPersist', full_name='License.Policy.CanPersist', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CanRenew', full_name='License.Policy.CanRenew', index=2,
+ number=3, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RentalDurationSeconds', full_name='License.Policy.RentalDurationSeconds', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PlaybackDurationSeconds', full_name='License.Policy.PlaybackDurationSeconds', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseDurationSeconds', full_name='License.Policy.LicenseDurationSeconds', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalRecoveryDurationSeconds', full_name='License.Policy.RenewalRecoveryDurationSeconds', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalServerUrl', full_name='License.Policy.RenewalServerUrl', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalDelaySeconds', full_name='License.Policy.RenewalDelaySeconds', index=8,
+ number=9, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalRetryIntervalSeconds', full_name='License.Policy.RenewalRetryIntervalSeconds', index=9,
+ number=10, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewWithUsage', full_name='License.Policy.RenewWithUsage', index=10,
+ number=11, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1958,
+ serialized_end=2273,
+)
+
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION = _descriptor.Descriptor(
+ name='OutputProtection',
+ full_name='License.KeyContainer.OutputProtection',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Hdcp', full_name='License.KeyContainer.OutputProtection.Hdcp', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CgmsFlags', full_name='License.KeyContainer.OutputProtection.CgmsFlags', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2797,
+ serialized_end=3016,
+)
+
+_LICENSE_KEYCONTAINER_KEYCONTROL = _descriptor.Descriptor(
+ name='KeyControl',
+ full_name='License.KeyContainer.KeyControl',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='KeyControlBlock', full_name='License.KeyContainer.KeyControl.KeyControlBlock', index=0,
+ number=1, type=12, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Iv', full_name='License.KeyContainer.KeyControl.Iv', index=1,
+ number=2, type=12, cpp_type=9, label=2,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3018,
+ serialized_end=3067,
+)
+
+_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS = _descriptor.Descriptor(
+ name='OperatorSessionKeyPermissions',
+ full_name='License.KeyContainer.OperatorSessionKeyPermissions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='AllowEncrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowEncrypt', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowDecrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowDecrypt', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowSign', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSign', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowSignatureVerify', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSignatureVerify', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3069,
+ serialized_end=3193,
+)
+
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT = _descriptor.Descriptor(
+ name='VideoResolutionConstraint',
+ full_name='License.KeyContainer.VideoResolutionConstraint',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='MinResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MinResolutionPixels', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='MaxResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MaxResolutionPixels', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequiredProtection', full_name='License.KeyContainer.VideoResolutionConstraint.RequiredProtection', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3196,
+ serialized_end=3349,
+)
+
+_LICENSE_KEYCONTAINER = _descriptor.Descriptor(
+ name='KeyContainer',
+ full_name='License.KeyContainer',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Id', full_name='License.KeyContainer.Id', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Iv', full_name='License.KeyContainer.Iv', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Key', full_name='License.KeyContainer.Key', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='License.KeyContainer.Type', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Level', full_name='License.KeyContainer.Level', index=4,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequiredProtection', full_name='License.KeyContainer.RequiredProtection', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestedProtection', full_name='License.KeyContainer.RequestedProtection', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_KeyControl', full_name='License.KeyContainer._KeyControl', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_OperatorSessionKeyPermissions', full_name='License.KeyContainer._OperatorSessionKeyPermissions', index=8,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='VideoResolutionConstraints', full_name='License.KeyContainer.VideoResolutionConstraints', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSE_KEYCONTAINER_OUTPUTPROTECTION, _LICENSE_KEYCONTAINER_KEYCONTROL, _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS, _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT, ],
+ enum_types=[
+ _LICENSE_KEYCONTAINER_KEYTYPE,
+ _LICENSE_KEYCONTAINER_SECURITYLEVEL,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2276,
+ serialized_end=3549,
+)
+
+_LICENSE = _descriptor.Descriptor(
+ name='License',
+ full_name='License',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Id', full_name='License.Id', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_Policy', full_name='License._Policy', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Key', full_name='License.Key', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseStartTime', full_name='License.LicenseStartTime', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestationVerified', full_name='License.RemoteAttestationVerified', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderClientToken', full_name='License.ProviderClientToken', index=5,
+ number=6, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProtectionScheme', full_name='License.ProtectionScheme', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSE_POLICY, _LICENSE_KEYCONTAINER, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1724,
+ serialized_end=3549,
+)
+
+
+_LICENSEERROR = _descriptor.Descriptor(
+ name='LicenseError',
+ full_name='LicenseError',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ErrorCode', full_name='LicenseError.ErrorCode', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _LICENSEERROR_ERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3552,
+ serialized_end=3704,
+)
+
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor(
+ name='CENC',
+ full_name='LicenseRequest.ContentIdentification.CENC',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Pssh', full_name='LicenseRequest.ContentIdentification.CENC.Pssh', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequest.ContentIdentification.CENC.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequest.ContentIdentification.CENC.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4268,
+ serialized_end=4363,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor(
+ name='WebM',
+ full_name='LicenseRequest.ContentIdentification.WebM',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Header', full_name='LicenseRequest.ContentIdentification.WebM.Header', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequest.ContentIdentification.WebM.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequest.ContentIdentification.WebM.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4365,
+ serialized_end=4441,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor(
+ name='ExistingLicense',
+ full_name='LicenseRequest.ContentIdentification.ExistingLicense',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='LicenseId', full_name='LicenseRequest.ContentIdentification.ExistingLicense.LicenseId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceStarted', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceLastPlayed', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionUsageTableEntry', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4444,
+ serialized_end=4597,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION = _descriptor.Descriptor(
+ name='ContentIdentification',
+ full_name='LicenseRequest.ContentIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CencId', full_name='LicenseRequest.ContentIdentification.CencId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='WebmId', full_name='LicenseRequest.ContentIdentification.WebmId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='License', full_name='LicenseRequest.ContentIdentification.License', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC, _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4051,
+ serialized_end=4597,
+)
+
+_LICENSEREQUEST = _descriptor.Descriptor(
+ name='LicenseRequest',
+ full_name='LicenseRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ClientId', full_name='LicenseRequest.ClientId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ContentId', full_name='LicenseRequest.ContentId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='LicenseRequest.Type', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestTime', full_name='LicenseRequest.RequestTime', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonceDeprecated', full_name='LicenseRequest.KeyControlNonceDeprecated', index=4,
+ number=5, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProtocolVersion', full_name='LicenseRequest.ProtocolVersion', index=5,
+ number=6, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=21,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonce', full_name='LicenseRequest.KeyControlNonce', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientId', full_name='LicenseRequest.EncryptedClientId', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION, ],
+ enum_types=[
+ _LICENSEREQUEST_REQUESTTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3707,
+ serialized_end=4647,
+)
+
+
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor(
+ name='CENC',
+ full_name='LicenseRequestRaw.ContentIdentification.CENC',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Pssh', full_name='LicenseRequestRaw.ContentIdentification.CENC.Pssh', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.CENC.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.CENC.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5229,
+ serialized_end=5303,
+)
+
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor(
+ name='WebM',
+ full_name='LicenseRequestRaw.ContentIdentification.WebM',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Header', full_name='LicenseRequestRaw.ContentIdentification.WebM.Header', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequestRaw.ContentIdentification.WebM.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequestRaw.ContentIdentification.WebM.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4365,
+ serialized_end=4441,
+)
+
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor(
+ name='ExistingLicense',
+ full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='LicenseId', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.LicenseId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceStarted', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceLastPlayed', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionUsageTableEntry', full_name='LicenseRequestRaw.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4444,
+ serialized_end=4597,
+)
+
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION = _descriptor.Descriptor(
+ name='ContentIdentification',
+ full_name='LicenseRequestRaw.ContentIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CencId', full_name='LicenseRequestRaw.ContentIdentification.CencId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='WebmId', full_name='LicenseRequestRaw.ContentIdentification.WebmId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='License', full_name='LicenseRequestRaw.ContentIdentification.License', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5003,
+ serialized_end=5537,
+)
+
+_LICENSEREQUESTRAW = _descriptor.Descriptor(
+ name='LicenseRequestRaw',
+ full_name='LicenseRequestRaw',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ClientId', full_name='LicenseRequestRaw.ClientId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ContentId', full_name='LicenseRequestRaw.ContentId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='LicenseRequestRaw.Type', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestTime', full_name='LicenseRequestRaw.RequestTime', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonceDeprecated', full_name='LicenseRequestRaw.KeyControlNonceDeprecated', index=4,
+ number=5, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProtocolVersion', full_name='LicenseRequestRaw.ProtocolVersion', index=5,
+ number=6, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=21,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonce', full_name='LicenseRequestRaw.KeyControlNonce', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientId', full_name='LicenseRequestRaw.EncryptedClientId', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUESTRAW_CONTENTIDENTIFICATION, ],
+ enum_types=[
+ _LICENSEREQUESTRAW_REQUESTTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4650,
+ serialized_end=5587,
+)
+
+
+_PROVISIONEDDEVICEINFO = _descriptor.Descriptor(
+ name='ProvisionedDeviceInfo',
+ full_name='ProvisionedDeviceInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='SystemId', full_name='ProvisionedDeviceInfo.SystemId', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Soc', full_name='ProvisionedDeviceInfo.Soc', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Manufacturer', full_name='ProvisionedDeviceInfo.Manufacturer', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Model', full_name='ProvisionedDeviceInfo.Model', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='DeviceType', full_name='ProvisionedDeviceInfo.DeviceType', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ModelYear', full_name='ProvisionedDeviceInfo.ModelYear', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecurityLevel', full_name='ProvisionedDeviceInfo.SecurityLevel', index=6,
+ number=7, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='TestDevice', full_name='ProvisionedDeviceInfo.TestDevice', index=7,
+ number=8, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5590,
+ serialized_end=5884,
+)
+
+
+_PROVISIONINGOPTIONS = _descriptor.Descriptor(
+ name='ProvisioningOptions',
+ full_name='ProvisioningOptions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5886,
+ serialized_end=5907,
+)
+
+
+_PROVISIONINGREQUEST = _descriptor.Descriptor(
+ name='ProvisioningRequest',
+ full_name='ProvisioningRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5909,
+ serialized_end=5930,
+)
+
+
+_PROVISIONINGRESPONSE = _descriptor.Descriptor(
+ name='ProvisioningResponse',
+ full_name='ProvisioningResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5932,
+ serialized_end=5954,
+)
+
+
+_REMOTEATTESTATION = _descriptor.Descriptor(
+ name='RemoteAttestation',
+ full_name='RemoteAttestation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Certificate', full_name='RemoteAttestation.Certificate', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Salt', full_name='RemoteAttestation.Salt', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='RemoteAttestation.Signature', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5956,
+ serialized_end=6061,
+)
+
+
+_SESSIONINIT = _descriptor.Descriptor(
+ name='SessionInit',
+ full_name='SessionInit',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6063,
+ serialized_end=6076,
+)
+
+
+_SESSIONSTATE = _descriptor.Descriptor(
+ name='SessionState',
+ full_name='SessionState',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6078,
+ serialized_end=6092,
+)
+
+
+_SIGNEDCERTIFICATESTATUSLIST = _descriptor.Descriptor(
+ name='SignedCertificateStatusList',
+ full_name='SignedCertificateStatusList',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6094,
+ serialized_end=6123,
+)
+
+
+_SIGNEDDEVICECERTIFICATE = _descriptor.Descriptor(
+ name='SignedDeviceCertificate',
+ full_name='SignedDeviceCertificate',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='_DeviceCertificate', full_name='SignedDeviceCertificate._DeviceCertificate', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedDeviceCertificate.Signature', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signer', full_name='SignedDeviceCertificate.Signer', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6126,
+ serialized_end=6260,
+)
+
+
+_SIGNEDPROVISIONINGMESSAGE = _descriptor.Descriptor(
+ name='SignedProvisioningMessage',
+ full_name='SignedProvisioningMessage',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6262,
+ serialized_end=6289,
+)
+
+
+_SIGNEDMESSAGE = _descriptor.Descriptor(
+ name='SignedMessage',
+ full_name='SignedMessage',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedMessage.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedMessage.Msg', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedMessage.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedMessage.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedMessage.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDMESSAGE_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6292,
+ serialized_end=6575,
+)
+
+
+_WIDEVINECENCHEADER = _descriptor.Descriptor(
+ name='WidevineCencHeader',
+ full_name='WidevineCencHeader',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='algorithm', full_name='WidevineCencHeader.algorithm', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='key_id', full_name='WidevineCencHeader.key_id', index=1,
+ number=2, type=12, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='provider', full_name='WidevineCencHeader.provider', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='content_id', full_name='WidevineCencHeader.content_id', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='track_type_deprecated', full_name='WidevineCencHeader.track_type_deprecated', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='policy', full_name='WidevineCencHeader.policy', index=5,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='crypto_period_index', full_name='WidevineCencHeader.crypto_period_index', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='grouped_license', full_name='WidevineCencHeader.grouped_license', index=7,
+ number=8, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='protection_scheme', full_name='WidevineCencHeader.protection_scheme', index=8,
+ number=9, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='crypto_period_seconds', full_name='WidevineCencHeader.crypto_period_seconds', index=9,
+ number=10, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _WIDEVINECENCHEADER_ALGORITHM,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6578,
+ serialized_end=6903,
+)
+
+
+_SIGNEDLICENSEREQUEST = _descriptor.Descriptor(
+ name='SignedLicenseRequest',
+ full_name='SignedLicenseRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedLicenseRequest.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedLicenseRequest.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedLicenseRequest.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedLicenseRequest.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedLicenseRequest.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDLICENSEREQUEST_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6906,
+ serialized_end=7220,
+)
+
+
+_SIGNEDLICENSEREQUESTRAW = _descriptor.Descriptor(
+ name='SignedLicenseRequestRaw',
+ full_name='SignedLicenseRequestRaw',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedLicenseRequestRaw.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedLicenseRequestRaw.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedLicenseRequestRaw.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedLicenseRequestRaw.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedLicenseRequestRaw.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=7223,
+ serialized_end=7546,
+)
+
+
+_SIGNEDLICENSE = _descriptor.Descriptor(
+ name='SignedLicense',
+ full_name='SignedLicense',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedLicense.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedLicense.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedLicense.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedLicense.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedLicense.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDLICENSE_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=7549,
+ serialized_end=7842,
+)
+
+
+_SIGNEDSERVICECERTIFICATE = _descriptor.Descriptor(
+ name='SignedServiceCertificate',
+ full_name='SignedServiceCertificate',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedServiceCertificate.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=1,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedServiceCertificate.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedServiceCertificate.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedServiceCertificate.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedServiceCertificate.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDSERVICECERTIFICATE_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=7845,
+ serialized_end=8176,
+)
+
+
+_FILEHASHES_SIGNATURE = _descriptor.Descriptor(
+ name='Signature',
+ full_name='FileHashes.Signature',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='filename', full_name='FileHashes.Signature.filename', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='test_signing', full_name='FileHashes.Signature.test_signing', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SHA512Hash', full_name='FileHashes.Signature.SHA512Hash', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='main_exe', full_name='FileHashes.Signature.main_exe', index=3,
+ number=4, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='signature', full_name='FileHashes.Signature.signature', index=4,
+ number=5, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=8252,
+ serialized_end=8360,
+)
+
+_FILEHASHES = _descriptor.Descriptor(
+ name='FileHashes',
+ full_name='FileHashes',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='signer', full_name='FileHashes.signer', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='signatures', full_name='FileHashes.signatures', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_FILEHASHES_SIGNATURE, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto2',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=8179,
+ serialized_end=8360,
+)
+
+_CLIENTIDENTIFICATION_NAMEVALUE.containing_type = _CLIENTIDENTIFICATION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.fields_by_name['MaxHdcpVersion'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.containing_type = _CLIENTIDENTIFICATION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION.containing_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES
+_CLIENTIDENTIFICATION.fields_by_name['Type'].enum_type = _CLIENTIDENTIFICATION_TOKENTYPE
+_CLIENTIDENTIFICATION.fields_by_name['Token'].message_type = _SIGNEDDEVICECERTIFICATE
+_CLIENTIDENTIFICATION.fields_by_name['ClientInfo'].message_type = _CLIENTIDENTIFICATION_NAMEVALUE
+_CLIENTIDENTIFICATION.fields_by_name['_ClientCapabilities'].message_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES
+_CLIENTIDENTIFICATION.fields_by_name['_FileHashes'].message_type = _FILEHASHES
+_CLIENTIDENTIFICATION_TOKENTYPE.containing_type = _CLIENTIDENTIFICATION
+_DEVICECERTIFICATE.fields_by_name['Type'].enum_type = _DEVICECERTIFICATE_CERTIFICATETYPE
+_DEVICECERTIFICATE_CERTIFICATETYPE.containing_type = _DEVICECERTIFICATE
+_DEVICECERTIFICATESTATUS.fields_by_name['Status'].enum_type = _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS
+_DEVICECERTIFICATESTATUS.fields_by_name['DeviceInfo'].message_type = _PROVISIONEDDEVICEINFO
+_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS.containing_type = _DEVICECERTIFICATESTATUS
+_DEVICECERTIFICATESTATUSLIST.fields_by_name['CertificateStatus'].message_type = _DEVICECERTIFICATESTATUS
+_LICENSEIDENTIFICATION.fields_by_name['Type'].enum_type = _LICENSETYPE
+_LICENSE_POLICY.containing_type = _LICENSE
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['Hdcp'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['CgmsFlags'].enum_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS.containing_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER_KEYCONTROL.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER.fields_by_name['Type'].enum_type = _LICENSE_KEYCONTAINER_KEYTYPE
+_LICENSE_KEYCONTAINER.fields_by_name['Level'].enum_type = _LICENSE_KEYCONTAINER_SECURITYLEVEL
+_LICENSE_KEYCONTAINER.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER.fields_by_name['RequestedProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER.fields_by_name['_KeyControl'].message_type = _LICENSE_KEYCONTAINER_KEYCONTROL
+_LICENSE_KEYCONTAINER.fields_by_name['_OperatorSessionKeyPermissions'].message_type = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS
+_LICENSE_KEYCONTAINER.fields_by_name['VideoResolutionConstraints'].message_type = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT
+_LICENSE_KEYCONTAINER.containing_type = _LICENSE
+_LICENSE_KEYCONTAINER_KEYTYPE.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_SECURITYLEVEL.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE.fields_by_name['Id'].message_type = _LICENSEIDENTIFICATION
+_LICENSE.fields_by_name['_Policy'].message_type = _LICENSE_POLICY
+_LICENSE.fields_by_name['Key'].message_type = _LICENSE_KEYCONTAINER
+_LICENSEERROR.fields_by_name['ErrorCode'].enum_type = _LICENSEERROR_ERROR
+_LICENSEERROR_ERROR.containing_type = _LICENSEERROR
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['Pssh'].message_type = _WIDEVINECENCHEADER
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE
+_LICENSEREQUEST_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUEST
+_LICENSEREQUEST.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION
+_LICENSEREQUEST.fields_by_name['ContentId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST.fields_by_name['Type'].enum_type = _LICENSEREQUEST_REQUESTTYPE
+_LICENSEREQUEST.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION
+_LICENSEREQUEST.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION
+_LICENSEREQUEST_REQUESTTYPE.containing_type = _LICENSEREQUEST
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE
+_LICENSEREQUESTRAW_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUESTRAW
+_LICENSEREQUESTRAW.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION
+_LICENSEREQUESTRAW.fields_by_name['ContentId'].message_type = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION
+_LICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _LICENSEREQUESTRAW_REQUESTTYPE
+_LICENSEREQUESTRAW.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION
+_LICENSEREQUESTRAW.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION
+_LICENSEREQUESTRAW_REQUESTTYPE.containing_type = _LICENSEREQUESTRAW
+_PROVISIONEDDEVICEINFO.fields_by_name['SecurityLevel'].enum_type = _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL
+_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL.containing_type = _PROVISIONEDDEVICEINFO
+_REMOTEATTESTATION.fields_by_name['Certificate'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION
+_SIGNEDDEVICECERTIFICATE.fields_by_name['_DeviceCertificate'].message_type = _DEVICECERTIFICATE
+_SIGNEDDEVICECERTIFICATE.fields_by_name['Signer'].message_type = _SIGNEDDEVICECERTIFICATE
+_SIGNEDMESSAGE.fields_by_name['Type'].enum_type = _SIGNEDMESSAGE_MESSAGETYPE
+_SIGNEDMESSAGE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDMESSAGE_MESSAGETYPE.containing_type = _SIGNEDMESSAGE
+_WIDEVINECENCHEADER.fields_by_name['algorithm'].enum_type = _WIDEVINECENCHEADER_ALGORITHM
+_WIDEVINECENCHEADER_ALGORITHM.containing_type = _WIDEVINECENCHEADER
+_SIGNEDLICENSEREQUEST.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUEST_MESSAGETYPE
+_SIGNEDLICENSEREQUEST.fields_by_name['Msg'].message_type = _LICENSEREQUEST
+_SIGNEDLICENSEREQUEST.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDLICENSEREQUEST_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUEST
+_SIGNEDLICENSEREQUESTRAW.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUESTRAW_MESSAGETYPE
+_SIGNEDLICENSEREQUESTRAW.fields_by_name['Msg'].message_type = _LICENSEREQUESTRAW
+_SIGNEDLICENSEREQUESTRAW.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDLICENSEREQUESTRAW_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUESTRAW
+_SIGNEDLICENSE.fields_by_name['Type'].enum_type = _SIGNEDLICENSE_MESSAGETYPE
+_SIGNEDLICENSE.fields_by_name['Msg'].message_type = _LICENSE
+_SIGNEDLICENSE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDLICENSE_MESSAGETYPE.containing_type = _SIGNEDLICENSE
+_SIGNEDSERVICECERTIFICATE.fields_by_name['Type'].enum_type = _SIGNEDSERVICECERTIFICATE_MESSAGETYPE
+_SIGNEDSERVICECERTIFICATE.fields_by_name['Msg'].message_type = _SIGNEDDEVICECERTIFICATE
+_SIGNEDSERVICECERTIFICATE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDSERVICECERTIFICATE_MESSAGETYPE.containing_type = _SIGNEDSERVICECERTIFICATE
+_FILEHASHES_SIGNATURE.containing_type = _FILEHASHES
+_FILEHASHES.fields_by_name['signatures'].message_type = _FILEHASHES_SIGNATURE
+DESCRIPTOR.message_types_by_name['ClientIdentification'] = _CLIENTIDENTIFICATION
+DESCRIPTOR.message_types_by_name['DeviceCertificate'] = _DEVICECERTIFICATE
+DESCRIPTOR.message_types_by_name['DeviceCertificateStatus'] = _DEVICECERTIFICATESTATUS
+DESCRIPTOR.message_types_by_name['DeviceCertificateStatusList'] = _DEVICECERTIFICATESTATUSLIST
+DESCRIPTOR.message_types_by_name['EncryptedClientIdentification'] = _ENCRYPTEDCLIENTIDENTIFICATION
+DESCRIPTOR.message_types_by_name['LicenseIdentification'] = _LICENSEIDENTIFICATION
+DESCRIPTOR.message_types_by_name['License'] = _LICENSE
+DESCRIPTOR.message_types_by_name['LicenseError'] = _LICENSEERROR
+DESCRIPTOR.message_types_by_name['LicenseRequest'] = _LICENSEREQUEST
+DESCRIPTOR.message_types_by_name['LicenseRequestRaw'] = _LICENSEREQUESTRAW
+DESCRIPTOR.message_types_by_name['ProvisionedDeviceInfo'] = _PROVISIONEDDEVICEINFO
+DESCRIPTOR.message_types_by_name['ProvisioningOptions'] = _PROVISIONINGOPTIONS
+DESCRIPTOR.message_types_by_name['ProvisioningRequest'] = _PROVISIONINGREQUEST
+DESCRIPTOR.message_types_by_name['ProvisioningResponse'] = _PROVISIONINGRESPONSE
+DESCRIPTOR.message_types_by_name['RemoteAttestation'] = _REMOTEATTESTATION
+DESCRIPTOR.message_types_by_name['SessionInit'] = _SESSIONINIT
+DESCRIPTOR.message_types_by_name['SessionState'] = _SESSIONSTATE
+DESCRIPTOR.message_types_by_name['SignedCertificateStatusList'] = _SIGNEDCERTIFICATESTATUSLIST
+DESCRIPTOR.message_types_by_name['SignedDeviceCertificate'] = _SIGNEDDEVICECERTIFICATE
+DESCRIPTOR.message_types_by_name['SignedProvisioningMessage'] = _SIGNEDPROVISIONINGMESSAGE
+DESCRIPTOR.message_types_by_name['SignedMessage'] = _SIGNEDMESSAGE
+DESCRIPTOR.message_types_by_name['WidevineCencHeader'] = _WIDEVINECENCHEADER
+DESCRIPTOR.message_types_by_name['SignedLicenseRequest'] = _SIGNEDLICENSEREQUEST
+DESCRIPTOR.message_types_by_name['SignedLicenseRequestRaw'] = _SIGNEDLICENSEREQUESTRAW
+DESCRIPTOR.message_types_by_name['SignedLicense'] = _SIGNEDLICENSE
+DESCRIPTOR.message_types_by_name['SignedServiceCertificate'] = _SIGNEDSERVICECERTIFICATE
+DESCRIPTOR.message_types_by_name['FileHashes'] = _FILEHASHES
+DESCRIPTOR.enum_types_by_name['LicenseType'] = _LICENSETYPE
+DESCRIPTOR.enum_types_by_name['ProtocolVersion'] = _PROTOCOLVERSION
+
+ClientIdentification = _reflection.GeneratedProtocolMessageType('ClientIdentification', (_message.Message,), dict(
+
+ NameValue = _reflection.GeneratedProtocolMessageType('NameValue', (_message.Message,), dict(
+ DESCRIPTOR = _CLIENTIDENTIFICATION_NAMEVALUE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification.NameValue)
+ ))
+ ,
+
+ ClientCapabilities = _reflection.GeneratedProtocolMessageType('ClientCapabilities', (_message.Message,), dict(
+ DESCRIPTOR = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification.ClientCapabilities)
+ ))
+ ,
+ DESCRIPTOR = _CLIENTIDENTIFICATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification)
+ ))
+_sym_db.RegisterMessage(ClientIdentification)
+_sym_db.RegisterMessage(ClientIdentification.NameValue)
+_sym_db.RegisterMessage(ClientIdentification.ClientCapabilities)
+
+DeviceCertificate = _reflection.GeneratedProtocolMessageType('DeviceCertificate', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificate)
+ ))
+_sym_db.RegisterMessage(DeviceCertificate)
+
+DeviceCertificateStatus = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatus', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATESTATUS,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificateStatus)
+ ))
+_sym_db.RegisterMessage(DeviceCertificateStatus)
+
+DeviceCertificateStatusList = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatusList', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATESTATUSLIST,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificateStatusList)
+ ))
+_sym_db.RegisterMessage(DeviceCertificateStatusList)
+
+EncryptedClientIdentification = _reflection.GeneratedProtocolMessageType('EncryptedClientIdentification', (_message.Message,), dict(
+ DESCRIPTOR = _ENCRYPTEDCLIENTIDENTIFICATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:EncryptedClientIdentification)
+ ))
+_sym_db.RegisterMessage(EncryptedClientIdentification)
+
+LicenseIdentification = _reflection.GeneratedProtocolMessageType('LicenseIdentification', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEIDENTIFICATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseIdentification)
+ ))
+_sym_db.RegisterMessage(LicenseIdentification)
+
+License = _reflection.GeneratedProtocolMessageType('License', (_message.Message,), dict(
+
+ Policy = _reflection.GeneratedProtocolMessageType('Policy', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_POLICY,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.Policy)
+ ))
+ ,
+
+ KeyContainer = _reflection.GeneratedProtocolMessageType('KeyContainer', (_message.Message,), dict(
+
+ OutputProtection = _reflection.GeneratedProtocolMessageType('OutputProtection', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.OutputProtection)
+ ))
+ ,
+
+ KeyControl = _reflection.GeneratedProtocolMessageType('KeyControl', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_KEYCONTROL,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.KeyControl)
+ ))
+ ,
+
+ OperatorSessionKeyPermissions = _reflection.GeneratedProtocolMessageType('OperatorSessionKeyPermissions', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.OperatorSessionKeyPermissions)
+ ))
+ ,
+
+ VideoResolutionConstraint = _reflection.GeneratedProtocolMessageType('VideoResolutionConstraint', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.VideoResolutionConstraint)
+ ))
+ ,
+ DESCRIPTOR = _LICENSE_KEYCONTAINER,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer)
+ ))
+ ,
+ DESCRIPTOR = _LICENSE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:License)
+ ))
+_sym_db.RegisterMessage(License)
+_sym_db.RegisterMessage(License.Policy)
+_sym_db.RegisterMessage(License.KeyContainer)
+_sym_db.RegisterMessage(License.KeyContainer.OutputProtection)
+_sym_db.RegisterMessage(License.KeyContainer.KeyControl)
+_sym_db.RegisterMessage(License.KeyContainer.OperatorSessionKeyPermissions)
+_sym_db.RegisterMessage(License.KeyContainer.VideoResolutionConstraint)
+
+LicenseError = _reflection.GeneratedProtocolMessageType('LicenseError', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEERROR,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseError)
+ ))
+_sym_db.RegisterMessage(LicenseError)
+
+LicenseRequest = _reflection.GeneratedProtocolMessageType('LicenseRequest', (_message.Message,), dict(
+
+ ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict(
+
+ CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.CENC)
+ ))
+ ,
+
+ WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.WebM)
+ ))
+ ,
+
+ ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.ExistingLicense)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUEST,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest)
+ ))
+_sym_db.RegisterMessage(LicenseRequest)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.CENC)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.WebM)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.ExistingLicense)
+
+LicenseRequestRaw = _reflection.GeneratedProtocolMessageType('LicenseRequestRaw', (_message.Message,), dict(
+
+ ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict(
+
+ CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_CENC,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.CENC)
+ ))
+ ,
+
+ WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_WEBM,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.WebM)
+ ))
+ ,
+
+ ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION_EXISTINGLICENSE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification.ExistingLicense)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUESTRAW_CONTENTIDENTIFICATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequestRaw.ContentIdentification)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUESTRAW,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequestRaw)
+ ))
+_sym_db.RegisterMessage(LicenseRequestRaw)
+_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification)
+_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.CENC)
+_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.WebM)
+_sym_db.RegisterMessage(LicenseRequestRaw.ContentIdentification.ExistingLicense)
+
+ProvisionedDeviceInfo = _reflection.GeneratedProtocolMessageType('ProvisionedDeviceInfo', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONEDDEVICEINFO,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisionedDeviceInfo)
+ ))
+_sym_db.RegisterMessage(ProvisionedDeviceInfo)
+
+ProvisioningOptions = _reflection.GeneratedProtocolMessageType('ProvisioningOptions', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGOPTIONS,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningOptions)
+ ))
+_sym_db.RegisterMessage(ProvisioningOptions)
+
+ProvisioningRequest = _reflection.GeneratedProtocolMessageType('ProvisioningRequest', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGREQUEST,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningRequest)
+ ))
+_sym_db.RegisterMessage(ProvisioningRequest)
+
+ProvisioningResponse = _reflection.GeneratedProtocolMessageType('ProvisioningResponse', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGRESPONSE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningResponse)
+ ))
+_sym_db.RegisterMessage(ProvisioningResponse)
+
+RemoteAttestation = _reflection.GeneratedProtocolMessageType('RemoteAttestation', (_message.Message,), dict(
+ DESCRIPTOR = _REMOTEATTESTATION,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:RemoteAttestation)
+ ))
+_sym_db.RegisterMessage(RemoteAttestation)
+
+SessionInit = _reflection.GeneratedProtocolMessageType('SessionInit', (_message.Message,), dict(
+ DESCRIPTOR = _SESSIONINIT,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SessionInit)
+ ))
+_sym_db.RegisterMessage(SessionInit)
+
+SessionState = _reflection.GeneratedProtocolMessageType('SessionState', (_message.Message,), dict(
+ DESCRIPTOR = _SESSIONSTATE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SessionState)
+ ))
+_sym_db.RegisterMessage(SessionState)
+
+SignedCertificateStatusList = _reflection.GeneratedProtocolMessageType('SignedCertificateStatusList', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDCERTIFICATESTATUSLIST,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedCertificateStatusList)
+ ))
+_sym_db.RegisterMessage(SignedCertificateStatusList)
+
+SignedDeviceCertificate = _reflection.GeneratedProtocolMessageType('SignedDeviceCertificate', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDDEVICECERTIFICATE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedDeviceCertificate)
+ ))
+_sym_db.RegisterMessage(SignedDeviceCertificate)
+
+SignedProvisioningMessage = _reflection.GeneratedProtocolMessageType('SignedProvisioningMessage', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDPROVISIONINGMESSAGE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedProvisioningMessage)
+ ))
+_sym_db.RegisterMessage(SignedProvisioningMessage)
+
+SignedMessage = _reflection.GeneratedProtocolMessageType('SignedMessage', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDMESSAGE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedMessage)
+ ))
+_sym_db.RegisterMessage(SignedMessage)
+
+WidevineCencHeader = _reflection.GeneratedProtocolMessageType('WidevineCencHeader', (_message.Message,), dict(
+ DESCRIPTOR = _WIDEVINECENCHEADER,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:WidevineCencHeader)
+ ))
+_sym_db.RegisterMessage(WidevineCencHeader)
+
+SignedLicenseRequest = _reflection.GeneratedProtocolMessageType('SignedLicenseRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDLICENSEREQUEST,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedLicenseRequest)
+ ))
+_sym_db.RegisterMessage(SignedLicenseRequest)
+
+SignedLicenseRequestRaw = _reflection.GeneratedProtocolMessageType('SignedLicenseRequestRaw', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDLICENSEREQUESTRAW,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedLicenseRequestRaw)
+ ))
+_sym_db.RegisterMessage(SignedLicenseRequestRaw)
+
+SignedLicense = _reflection.GeneratedProtocolMessageType('SignedLicense', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDLICENSE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedLicense)
+ ))
+_sym_db.RegisterMessage(SignedLicense)
+
+SignedServiceCertificate = _reflection.GeneratedProtocolMessageType('SignedServiceCertificate', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDSERVICECERTIFICATE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:SignedServiceCertificate)
+ ))
+_sym_db.RegisterMessage(SignedServiceCertificate)
+
+FileHashes = _reflection.GeneratedProtocolMessageType('FileHashes', (_message.Message,), dict(
+
+ Signature = _reflection.GeneratedProtocolMessageType('Signature', (_message.Message,), dict(
+ DESCRIPTOR = _FILEHASHES_SIGNATURE,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:FileHashes.Signature)
+ ))
+ ,
+ DESCRIPTOR = _FILEHASHES,
+ __module__ = 'pywidevine.cdm.formats.wv_proto2_pb2'
+ # @@protoc_insertion_point(class_scope:FileHashes)
+ ))
+_sym_db.RegisterMessage(FileHashes)
+_sym_db.RegisterMessage(FileHashes.Signature)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/pywidevine/cdm/formats/wv_proto3.proto b/pywidevine/cdm/formats/wv_proto3.proto
new file mode 100644
index 0000000..7861b02
--- /dev/null
+++ b/pywidevine/cdm/formats/wv_proto3.proto
@@ -0,0 +1,389 @@
+// beware proto3 won't show missing fields it seems, need to change to "proto2" and add "optional" before every field, and remove all the dummy enum members I added:
+syntax = "proto3";
+
+// from x86 (partial), most of it from the ARM version:
+message ClientIdentification {
+ enum TokenType {
+ KEYBOX = 0;
+ DEVICE_CERTIFICATE = 1;
+ REMOTE_ATTESTATION_CERTIFICATE = 2;
+ }
+ message NameValue {
+ string Name = 1;
+ string Value = 2;
+ }
+ message ClientCapabilities {
+ enum HdcpVersion {
+ HDCP_NONE = 0;
+ HDCP_V1 = 1;
+ HDCP_V2 = 2;
+ HDCP_V2_1 = 3;
+ HDCP_V2_2 = 4;
+ }
+ uint32 ClientToken = 1;
+ uint32 SessionToken = 2;
+ uint32 VideoResolutionConstraints = 3;
+ HdcpVersion MaxHdcpVersion = 4;
+ uint32 OemCryptoApiVersion = 5;
+ }
+ TokenType Type = 1;
+ //bytes Token = 2; // by default the client treats this as blob, but it's usually a DeviceCertificate, so for usefulness sake, I'm replacing it with this one:
+ SignedDeviceCertificate Token = 2;
+ repeated NameValue ClientInfo = 3;
+ bytes ProviderClientToken = 4;
+ uint32 LicenseCounter = 5;
+ ClientCapabilities _ClientCapabilities = 6; // how should we deal with duped names? will have to look at proto docs later
+}
+
+message DeviceCertificate {
+ enum CertificateType {
+ ROOT = 0;
+ INTERMEDIATE = 1;
+ USER_DEVICE = 2;
+ SERVICE = 3;
+ }
+ //ProvisionedDeviceInfo.WvSecurityLevel Type = 1; // is this how one is supposed to call it? (it's an enum) there might be a bug here, with CertificateType getting confused with WvSecurityLevel, for now renaming it (verify against other binaries)
+ CertificateType Type = 1;
+ bytes SerialNumber = 2;
+ uint32 CreationTimeSeconds = 3;
+ bytes PublicKey = 4;
+ uint32 SystemId = 5;
+ uint32 TestDeviceDeprecated = 6; // is it bool or int?
+ bytes ServiceId = 7; // service URL for service certificates
+}
+
+// missing some references,
+message DeviceCertificateStatus {
+ enum CertificateStatus {
+ VALID = 0;
+ REVOKED = 1;
+ }
+ bytes SerialNumber = 1;
+ CertificateStatus Status = 2;
+ ProvisionedDeviceInfo DeviceInfo = 4; // where is 3? is it deprecated?
+}
+
+message DeviceCertificateStatusList {
+ uint32 CreationTimeSeconds = 1;
+ repeated DeviceCertificateStatus CertificateStatus = 2;
+}
+
+message EncryptedClientIdentification {
+ string ServiceId = 1;
+ bytes ServiceCertificateSerialNumber = 2;
+ bytes EncryptedClientId = 3;
+ bytes EncryptedClientIdIv = 4;
+ bytes EncryptedPrivacyKey = 5;
+}
+
+// todo: fill (for this top-level type, it might be impossible/difficult)
+enum LicenseType {
+ ZERO = 0;
+ DEFAULT = 1; // do not know what this is either, but should be 1; on recent versions may go up to 3 (latest x86)
+}
+
+// todo: fill (for this top-level type, it might be impossible/difficult)
+// this is just a guess because these globals got lost, but really, do we need more?
+enum ProtocolVersion {
+ DUMMY = 0;
+ CURRENT = 21; // don't have symbols for this
+}
+
+
+message LicenseIdentification {
+ bytes RequestId = 1;
+ bytes SessionId = 2;
+ bytes PurchaseId = 3;
+ LicenseType Type = 4;
+ uint32 Version = 5;
+ bytes ProviderSessionToken = 6;
+}
+
+
+message License {
+ message Policy {
+ uint32 CanPlay = 1;
+ uint32 CanPersist = 2;
+ uint32 CanRenew = 3;
+ uint32 RentalDurationSeconds = 4;
+ uint32 PlaybackDurationSeconds = 5;
+ uint32 LicenseDurationSeconds = 6;
+ uint32 RenewalRecoveryDurationSeconds = 7;
+ string RenewalServerUrl = 8;
+ uint32 RenewalDelaySeconds = 9;
+ uint32 RenewalRetryIntervalSeconds = 10;
+ uint32 RenewWithUsage = 11;
+ uint32 UnknownPolicy12 = 12;
+ }
+ message KeyContainer {
+ enum KeyType {
+ _NOKEYTYPE = 0; // dummy, added to satisfy proto3, not present in original
+ SIGNING = 1;
+ CONTENT = 2;
+ KEY_CONTROL = 3;
+ OPERATOR_SESSION = 4;
+ }
+ enum SecurityLevel {
+ _NOSECLEVEL = 0; // dummy, added to satisfy proto3, not present in original
+ SW_SECURE_CRYPTO = 1;
+ SW_SECURE_DECODE = 2;
+ HW_SECURE_CRYPTO = 3;
+ HW_SECURE_DECODE = 4;
+ HW_SECURE_ALL = 5;
+ }
+ message OutputProtection {
+ enum CGMS {
+ COPY_FREE = 0;
+ COPY_ONCE = 2;
+ COPY_NEVER = 3;
+ CGMS_NONE = 0x2A; // PC default!
+ }
+ ClientIdentification.ClientCapabilities.HdcpVersion Hdcp = 1; // it's most likely a copy of Hdcp version available here, but compiler optimized it away
+ CGMS CgmsFlags = 2;
+ }
+ message KeyControl {
+ bytes KeyControlBlock = 1; // what is this?
+ bytes Iv = 2;
+ }
+ message OperatorSessionKeyPermissions {
+ uint32 AllowEncrypt = 1;
+ uint32 AllowDecrypt = 2;
+ uint32 AllowSign = 3;
+ uint32 AllowSignatureVerify = 4;
+ }
+ message VideoResolutionConstraint {
+ uint32 MinResolutionPixels = 1;
+ uint32 MaxResolutionPixels = 2;
+ OutputProtection RequiredProtection = 3;
+ }
+ bytes Id = 1;
+ bytes Iv = 2;
+ bytes Key = 3;
+ KeyType Type = 4;
+ SecurityLevel Level = 5;
+ OutputProtection RequiredProtection = 6;
+ OutputProtection RequestedProtection = 7;
+ KeyControl _KeyControl = 8; // duped names, etc
+ OperatorSessionKeyPermissions _OperatorSessionKeyPermissions = 9; // duped names, etc
+ repeated VideoResolutionConstraint VideoResolutionConstraints = 10;
+ }
+ LicenseIdentification Id = 1;
+ Policy _Policy = 2; // duped names, etc
+ repeated KeyContainer Key = 3;
+ uint32 LicenseStartTime = 4;
+ uint32 RemoteAttestationVerified = 5; // bool?
+ bytes ProviderClientToken = 6;
+ // there might be more, check with newer versions (I see field 7-8 in a lic)
+ // this appeared in latest x86:
+ uint32 ProtectionScheme = 7; // type unconfirmed fully, but it's likely as WidevineCencHeader describesit (fourcc)
+ bytes UnknownHdcpDataField = 8;
+}
+
+message LicenseError {
+ enum Error {
+ DUMMY_NO_ERROR = 0; // dummy, added to satisfy proto3
+ INVALID_DEVICE_CERTIFICATE = 1;
+ REVOKED_DEVICE_CERTIFICATE = 2;
+ SERVICE_UNAVAILABLE = 3;
+ }
+ //LicenseRequest.RequestType ErrorCode; // clang mismatch
+ Error ErrorCode = 1;
+}
+
+message LicenseRequest {
+ message ContentIdentification {
+ message CENC {
+ // bytes Pssh = 1; // the client's definition is opaque, it doesn't care about the contents, but the PSSH has a clear definition that is understood and requested by the server, thus I'll replace it with:
+ WidevineCencHeader Pssh = 1;
+ LicenseType LicenseType = 2; // unfortunately the LicenseType symbols are not present, acceptable value seems to only be 1
+ bytes RequestId = 3;
+ }
+ message WebM {
+ bytes Header = 1; // identical to CENC, aside from PSSH and the parent field number used
+ LicenseType LicenseType = 2;
+ bytes RequestId = 3;
+ }
+ message ExistingLicense {
+ LicenseIdentification LicenseId = 1;
+ uint32 SecondsSinceStarted = 2;
+ uint32 SecondsSinceLastPlayed = 3;
+ bytes SessionUsageTableEntry = 4;
+ }
+ CENC CencId = 1;
+ WebM WebmId = 2;
+ ExistingLicense License = 3;
+ }
+ enum RequestType {
+ DUMMY_REQ_TYPE = 0; // dummy, added to satisfy proto3
+ NEW = 1;
+ RENEWAL = 2;
+ RELEASE = 3;
+ }
+ ClientIdentification ClientId = 1;
+ ContentIdentification ContentId = 2;
+ RequestType Type = 3;
+ uint32 RequestTime = 4;
+ bytes KeyControlNonceDeprecated = 5;
+ ProtocolVersion ProtocolVersion = 6; // lacking symbols for this
+ uint32 KeyControlNonce = 7;
+ EncryptedClientIdentification EncryptedClientId = 8;
+}
+
+message ProvisionedDeviceInfo {
+ enum WvSecurityLevel {
+ LEVEL_UNSPECIFIED = 0;
+ LEVEL_1 = 1;
+ LEVEL_2 = 2;
+ LEVEL_3 = 3;
+ }
+ uint32 SystemId = 1;
+ string Soc = 2;
+ string Manufacturer = 3;
+ string Model = 4;
+ string DeviceType = 5;
+ uint32 ModelYear = 6;
+ WvSecurityLevel SecurityLevel = 7;
+ uint32 TestDevice = 8; // bool?
+}
+
+
+// todo: fill
+message ProvisioningOptions {
+}
+
+// todo: fill
+message ProvisioningRequest {
+}
+
+// todo: fill
+message ProvisioningResponse {
+}
+
+message RemoteAttestation {
+ EncryptedClientIdentification Certificate = 1;
+ string Salt = 2;
+ string Signature = 3;
+}
+
+// todo: fill
+message SessionInit {
+}
+
+// todo: fill
+message SessionState {
+}
+
+// todo: fill
+message SignedCertificateStatusList {
+}
+
+message SignedDeviceCertificate {
+
+ //bytes DeviceCertificate = 1; // again, they use a buffer where it's supposed to be a message, so we'll replace it with what it really is:
+ DeviceCertificate _DeviceCertificate = 1; // how should we deal with duped names? will have to look at proto docs later
+ bytes Signature = 2;
+ SignedDeviceCertificate Signer = 3;
+}
+
+
+// todo: fill
+message SignedProvisioningMessage {
+}
+
+// the root of all messages, from either server or client
+message SignedMessage {
+ enum MessageType {
+ DUMMY_MSG_TYPE = 0; // dummy, added to satisfy proto3
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ bytes Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ bytes SessionKey = 4; // often RSA wrapped for licenses
+ RemoteAttestation RemoteAttestation = 5;
+}
+
+
+
+// This message is copied from google's docs, not reversed:
+message WidevineCencHeader {
+ enum Algorithm {
+ UNENCRYPTED = 0;
+ AESCTR = 1;
+ };
+ Algorithm algorithm = 1;
+ repeated bytes key_id = 2;
+
+ // Content provider name.
+ string provider = 3;
+
+ // A content identifier, specified by content provider.
+ bytes content_id = 4;
+
+ // Track type. Acceptable values are SD, HD and AUDIO. Used to
+ // differentiate content keys used by an asset.
+ string track_type_deprecated = 5;
+
+ // The name of a registered policy to be used for this asset.
+ string policy = 6;
+
+ // Crypto period index, for media using key rotation.
+ uint32 crypto_period_index = 7;
+
+ // Optional protected context for group content. The grouped_license is a
+ // serialized SignedMessage.
+ bytes grouped_license = 8;
+
+ // Protection scheme identifying the encryption algorithm.
+ // Represented as one of the following 4CC values:
+ // 'cenc' (AESCTR), 'cbc1' (AESCBC),
+ // 'cens' (AESCTR subsample), 'cbcs' (AESCBC subsample).
+ uint32 protection_scheme = 9;
+
+ // Optional. For media using key rotation, this represents the duration
+ // of each crypto period in seconds.
+ uint32 crypto_period_seconds = 10;
+}
+
+
+
+
+// from here on, it's just for testing, these messages don't exist in the binaries, I'm adding them to avoid detecting type programmatically
+message SignedLicenseRequest {
+ enum MessageType {
+ DUMMY_MSG_TYPE = 0; // dummy, added to satisfy proto3
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ LicenseRequest Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ bytes SessionKey = 4; // often RSA wrapped for licenses
+ RemoteAttestation RemoteAttestation = 5;
+}
+
+message SignedLicense {
+ enum MessageType {
+ DUMMY_MSG_TYPE = 0; // dummy, added to satisfy proto3
+ LICENSE_REQUEST = 1;
+ LICENSE = 2;
+ ERROR_RESPONSE = 3;
+ SERVICE_CERTIFICATE_REQUEST = 4;
+ SERVICE_CERTIFICATE = 5;
+ }
+ MessageType Type = 1; // has in incorrect overlap with License_KeyContainer_SecurityLevel
+ License Msg = 2; // this has to be casted dynamically, to LicenseRequest, License or LicenseError (? unconfirmed), for Request, no other fields but Type need to be present
+ // for SERVICE_CERTIFICATE, only Type and Msg are present, and it's just a DeviceCertificate with CertificateType set to SERVICE
+ bytes Signature = 3; // might be different type of signatures (ex. RSA vs AES CMAC(??), unconfirmed for now)
+ bytes SessionKey = 4; // often RSA wrapped for licenses
+ RemoteAttestation RemoteAttestation = 5;
+}
\ No newline at end of file
diff --git a/pywidevine/cdm/formats/wv_proto3_pb2.py b/pywidevine/cdm/formats/wv_proto3_pb2.py
new file mode 100644
index 0000000..11ae09f
--- /dev/null
+++ b/pywidevine/cdm/formats/wv_proto3_pb2.py
@@ -0,0 +1,2686 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: wv_proto3.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf.internal import enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='wv_proto3.proto',
+ package='',
+ syntax='proto3',
+ serialized_pb=_b('\n\x0fwv_proto3.proto\"\xc5\x05\n\x14\x43lientIdentification\x12-\n\x04Type\x18\x01 \x01(\x0e\x32\x1f.ClientIdentification.TokenType\x12\'\n\x05Token\x18\x02 \x01(\x0b\x32\x18.SignedDeviceCertificate\x12\x33\n\nClientInfo\x18\x03 \x03(\x0b\x32\x1f.ClientIdentification.NameValue\x12\x1b\n\x13ProviderClientToken\x18\x04 \x01(\x0c\x12\x16\n\x0eLicenseCounter\x18\x05 \x01(\r\x12\x45\n\x13_ClientCapabilities\x18\x06 \x01(\x0b\x32(.ClientIdentification.ClientCapabilities\x1a(\n\tNameValue\x12\x0c\n\x04Name\x18\x01 \x01(\t\x12\r\n\x05Value\x18\x02 \x01(\t\x1a\xa4\x02\n\x12\x43lientCapabilities\x12\x13\n\x0b\x43lientToken\x18\x01 \x01(\r\x12\x14\n\x0cSessionToken\x18\x02 \x01(\r\x12\"\n\x1aVideoResolutionConstraints\x18\x03 \x01(\r\x12L\n\x0eMaxHdcpVersion\x18\x04 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12\x1b\n\x13OemCryptoApiVersion\x18\x05 \x01(\r\"T\n\x0bHdcpVersion\x12\r\n\tHDCP_NONE\x10\x00\x12\x0b\n\x07HDCP_V1\x10\x01\x12\x0b\n\x07HDCP_V2\x10\x02\x12\r\n\tHDCP_V2_1\x10\x03\x12\r\n\tHDCP_V2_2\x10\x04\"S\n\tTokenType\x12\n\n\x06KEYBOX\x10\x00\x12\x16\n\x12\x44\x45VICE_CERTIFICATE\x10\x01\x12\"\n\x1eREMOTE_ATTESTATION_CERTIFICATE\x10\x02\"\x9b\x02\n\x11\x44\x65viceCertificate\x12\x30\n\x04Type\x18\x01 \x01(\x0e\x32\".DeviceCertificate.CertificateType\x12\x14\n\x0cSerialNumber\x18\x02 \x01(\x0c\x12\x1b\n\x13\x43reationTimeSeconds\x18\x03 \x01(\r\x12\x11\n\tPublicKey\x18\x04 \x01(\x0c\x12\x10\n\x08SystemId\x18\x05 \x01(\r\x12\x1c\n\x14TestDeviceDeprecated\x18\x06 \x01(\r\x12\x11\n\tServiceId\x18\x07 \x01(\x0c\"K\n\x0f\x43\x65rtificateType\x12\x08\n\x04ROOT\x10\x00\x12\x10\n\x0cINTERMEDIATE\x10\x01\x12\x0f\n\x0bUSER_DEVICE\x10\x02\x12\x0b\n\x07SERVICE\x10\x03\"\xc4\x01\n\x17\x44\x65viceCertificateStatus\x12\x14\n\x0cSerialNumber\x18\x01 \x01(\x0c\x12:\n\x06Status\x18\x02 \x01(\x0e\x32*.DeviceCertificateStatus.CertificateStatus\x12*\n\nDeviceInfo\x18\x04 \x01(\x0b\x32\x16.ProvisionedDeviceInfo\"+\n\x11\x43\x65rtificateStatus\x12\t\n\x05VALID\x10\x00\x12\x0b\n\x07REVOKED\x10\x01\"o\n\x1b\x44\x65viceCertificateStatusList\x12\x1b\n\x13\x43reationTimeSeconds\x18\x01 \x01(\r\x12\x33\n\x11\x43\x65rtificateStatus\x18\x02 \x03(\x0b\x32\x18.DeviceCertificateStatus\"\xaf\x01\n\x1d\x45ncryptedClientIdentification\x12\x11\n\tServiceId\x18\x01 \x01(\t\x12&\n\x1eServiceCertificateSerialNumber\x18\x02 \x01(\x0c\x12\x19\n\x11\x45ncryptedClientId\x18\x03 \x01(\x0c\x12\x1b\n\x13\x45ncryptedClientIdIv\x18\x04 \x01(\x0c\x12\x1b\n\x13\x45ncryptedPrivacyKey\x18\x05 \x01(\x0c\"\x9c\x01\n\x15LicenseIdentification\x12\x11\n\tRequestId\x18\x01 \x01(\x0c\x12\x11\n\tSessionId\x18\x02 \x01(\x0c\x12\x12\n\nPurchaseId\x18\x03 \x01(\x0c\x12\x1a\n\x04Type\x18\x04 \x01(\x0e\x32\x0c.LicenseType\x12\x0f\n\x07Version\x18\x05 \x01(\r\x12\x1c\n\x14ProviderSessionToken\x18\x06 \x01(\x0c\"\xfa\x0e\n\x07License\x12\"\n\x02Id\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12 \n\x07_Policy\x18\x02 \x01(\x0b\x32\x0f.License.Policy\x12\"\n\x03Key\x18\x03 \x03(\x0b\x32\x15.License.KeyContainer\x12\x18\n\x10LicenseStartTime\x18\x04 \x01(\r\x12!\n\x19RemoteAttestationVerified\x18\x05 \x01(\r\x12\x1b\n\x13ProviderClientToken\x18\x06 \x01(\x0c\x12\x18\n\x10ProtectionScheme\x18\x07 \x01(\r\x12\x1c\n\x14UnknownHdcpDataField\x18\x08 \x01(\x0c\x1a\xd4\x02\n\x06Policy\x12\x0f\n\x07\x43\x61nPlay\x18\x01 \x01(\r\x12\x12\n\nCanPersist\x18\x02 \x01(\r\x12\x10\n\x08\x43\x61nRenew\x18\x03 \x01(\r\x12\x1d\n\x15RentalDurationSeconds\x18\x04 \x01(\r\x12\x1f\n\x17PlaybackDurationSeconds\x18\x05 \x01(\r\x12\x1e\n\x16LicenseDurationSeconds\x18\x06 \x01(\r\x12&\n\x1eRenewalRecoveryDurationSeconds\x18\x07 \x01(\r\x12\x18\n\x10RenewalServerUrl\x18\x08 \x01(\t\x12\x1b\n\x13RenewalDelaySeconds\x18\t \x01(\r\x12#\n\x1bRenewalRetryIntervalSeconds\x18\n \x01(\r\x12\x16\n\x0eRenewWithUsage\x18\x0b \x01(\r\x12\x17\n\x0fUnknownPolicy12\x18\x0c \x01(\r\x1a\x9b\n\n\x0cKeyContainer\x12\n\n\x02Id\x18\x01 \x01(\x0c\x12\n\n\x02Iv\x18\x02 \x01(\x0c\x12\x0b\n\x03Key\x18\x03 \x01(\x0c\x12+\n\x04Type\x18\x04 \x01(\x0e\x32\x1d.License.KeyContainer.KeyType\x12\x32\n\x05Level\x18\x05 \x01(\x0e\x32#.License.KeyContainer.SecurityLevel\x12\x42\n\x12RequiredProtection\x18\x06 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x43\n\x13RequestedProtection\x18\x07 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\x12\x35\n\x0b_KeyControl\x18\x08 \x01(\x0b\x32 .License.KeyContainer.KeyControl\x12[\n\x1e_OperatorSessionKeyPermissions\x18\t \x01(\x0b\x32\x33.License.KeyContainer.OperatorSessionKeyPermissions\x12S\n\x1aVideoResolutionConstraints\x18\n \x03(\x0b\x32/.License.KeyContainer.VideoResolutionConstraint\x1a\xdb\x01\n\x10OutputProtection\x12\x42\n\x04Hdcp\x18\x01 \x01(\x0e\x32\x34.ClientIdentification.ClientCapabilities.HdcpVersion\x12>\n\tCgmsFlags\x18\x02 \x01(\x0e\x32+.License.KeyContainer.OutputProtection.CGMS\"C\n\x04\x43GMS\x12\r\n\tCOPY_FREE\x10\x00\x12\r\n\tCOPY_ONCE\x10\x02\x12\x0e\n\nCOPY_NEVER\x10\x03\x12\r\n\tCGMS_NONE\x10*\x1a\x31\n\nKeyControl\x12\x17\n\x0fKeyControlBlock\x18\x01 \x01(\x0c\x12\n\n\x02Iv\x18\x02 \x01(\x0c\x1a|\n\x1dOperatorSessionKeyPermissions\x12\x14\n\x0c\x41llowEncrypt\x18\x01 \x01(\r\x12\x14\n\x0c\x41llowDecrypt\x18\x02 \x01(\r\x12\x11\n\tAllowSign\x18\x03 \x01(\r\x12\x1c\n\x14\x41llowSignatureVerify\x18\x04 \x01(\r\x1a\x99\x01\n\x19VideoResolutionConstraint\x12\x1b\n\x13MinResolutionPixels\x18\x01 \x01(\r\x12\x1b\n\x13MaxResolutionPixels\x18\x02 \x01(\r\x12\x42\n\x12RequiredProtection\x18\x03 \x01(\x0b\x32&.License.KeyContainer.OutputProtection\"Z\n\x07KeyType\x12\x0e\n\n_NOKEYTYPE\x10\x00\x12\x0b\n\x07SIGNING\x10\x01\x12\x0b\n\x07\x43ONTENT\x10\x02\x12\x0f\n\x0bKEY_CONTROL\x10\x03\x12\x14\n\x10OPERATOR_SESSION\x10\x04\"\x8b\x01\n\rSecurityLevel\x12\x0f\n\x0b_NOSECLEVEL\x10\x00\x12\x14\n\x10SW_SECURE_CRYPTO\x10\x01\x12\x14\n\x10SW_SECURE_DECODE\x10\x02\x12\x14\n\x10HW_SECURE_CRYPTO\x10\x03\x12\x14\n\x10HW_SECURE_DECODE\x10\x04\x12\x11\n\rHW_SECURE_ALL\x10\x05\"\xac\x01\n\x0cLicenseError\x12&\n\tErrorCode\x18\x01 \x01(\x0e\x32\x13.LicenseError.Error\"t\n\x05\x45rror\x12\x12\n\x0e\x44UMMY_NO_ERROR\x10\x00\x12\x1e\n\x1aINVALID_DEVICE_CERTIFICATE\x10\x01\x12\x1e\n\x1aREVOKED_DEVICE_CERTIFICATE\x10\x02\x12\x17\n\x13SERVICE_UNAVAILABLE\x10\x03\"\xc0\x07\n\x0eLicenseRequest\x12\'\n\x08\x43lientId\x18\x01 \x01(\x0b\x32\x15.ClientIdentification\x12\x38\n\tContentId\x18\x02 \x01(\x0b\x32%.LicenseRequest.ContentIdentification\x12)\n\x04Type\x18\x03 \x01(\x0e\x32\x1b.LicenseRequest.RequestType\x12\x13\n\x0bRequestTime\x18\x04 \x01(\r\x12!\n\x19KeyControlNonceDeprecated\x18\x05 \x01(\x0c\x12)\n\x0fProtocolVersion\x18\x06 \x01(\x0e\x32\x10.ProtocolVersion\x12\x17\n\x0fKeyControlNonce\x18\x07 \x01(\r\x12\x39\n\x11\x45ncryptedClientId\x18\x08 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x1a\xa2\x04\n\x15\x43ontentIdentification\x12:\n\x06\x43\x65ncId\x18\x01 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.CENC\x12:\n\x06WebmId\x18\x02 \x01(\x0b\x32*.LicenseRequest.ContentIdentification.WebM\x12\x46\n\x07License\x18\x03 \x01(\x0b\x32\x35.LicenseRequest.ContentIdentification.ExistingLicense\x1a_\n\x04\x43\x45NC\x12!\n\x04Pssh\x18\x01 \x01(\x0b\x32\x13.WidevineCencHeader\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1aL\n\x04WebM\x12\x0e\n\x06Header\x18\x01 \x01(\x0c\x12!\n\x0bLicenseType\x18\x02 \x01(\x0e\x32\x0c.LicenseType\x12\x11\n\tRequestId\x18\x03 \x01(\x0c\x1a\x99\x01\n\x0f\x45xistingLicense\x12)\n\tLicenseId\x18\x01 \x01(\x0b\x32\x16.LicenseIdentification\x12\x1b\n\x13SecondsSinceStarted\x18\x02 \x01(\r\x12\x1e\n\x16SecondsSinceLastPlayed\x18\x03 \x01(\r\x12\x1e\n\x16SessionUsageTableEntry\x18\x04 \x01(\x0c\"D\n\x0bRequestType\x12\x12\n\x0e\x44UMMY_REQ_TYPE\x10\x00\x12\x07\n\x03NEW\x10\x01\x12\x0b\n\x07RENEWAL\x10\x02\x12\x0b\n\x07RELEASE\x10\x03\"\xa6\x02\n\x15ProvisionedDeviceInfo\x12\x10\n\x08SystemId\x18\x01 \x01(\r\x12\x0b\n\x03Soc\x18\x02 \x01(\t\x12\x14\n\x0cManufacturer\x18\x03 \x01(\t\x12\r\n\x05Model\x18\x04 \x01(\t\x12\x12\n\nDeviceType\x18\x05 \x01(\t\x12\x11\n\tModelYear\x18\x06 \x01(\r\x12=\n\rSecurityLevel\x18\x07 \x01(\x0e\x32&.ProvisionedDeviceInfo.WvSecurityLevel\x12\x12\n\nTestDevice\x18\x08 \x01(\r\"O\n\x0fWvSecurityLevel\x12\x15\n\x11LEVEL_UNSPECIFIED\x10\x00\x12\x0b\n\x07LEVEL_1\x10\x01\x12\x0b\n\x07LEVEL_2\x10\x02\x12\x0b\n\x07LEVEL_3\x10\x03\"\x15\n\x13ProvisioningOptions\"\x15\n\x13ProvisioningRequest\"\x16\n\x14ProvisioningResponse\"i\n\x11RemoteAttestation\x12\x33\n\x0b\x43\x65rtificate\x18\x01 \x01(\x0b\x32\x1e.EncryptedClientIdentification\x12\x0c\n\x04Salt\x18\x02 \x01(\t\x12\x11\n\tSignature\x18\x03 \x01(\t\"\r\n\x0bSessionInit\"\x0e\n\x0cSessionState\"\x1d\n\x1bSignedCertificateStatusList\"\x86\x01\n\x17SignedDeviceCertificate\x12.\n\x12_DeviceCertificate\x18\x01 \x01(\x0b\x32\x12.DeviceCertificate\x12\x11\n\tSignature\x18\x02 \x01(\x0c\x12(\n\x06Signer\x18\x03 \x01(\x0b\x32\x18.SignedDeviceCertificate\"\x1b\n\x19SignedProvisioningMessage\"\xb0\x02\n\rSignedMessage\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedMessage.MessageType\x12\x0b\n\x03Msg\x18\x02 \x01(\x0c\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"\x91\x01\n\x0bMessageType\x12\x12\n\x0e\x44UMMY_MSG_TYPE\x10\x00\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xc5\x02\n\x12WidevineCencHeader\x12\x30\n\talgorithm\x18\x01 \x01(\x0e\x32\x1d.WidevineCencHeader.Algorithm\x12\x0e\n\x06key_id\x18\x02 \x03(\x0c\x12\x10\n\x08provider\x18\x03 \x01(\t\x12\x12\n\ncontent_id\x18\x04 \x01(\x0c\x12\x1d\n\x15track_type_deprecated\x18\x05 \x01(\t\x12\x0e\n\x06policy\x18\x06 \x01(\t\x12\x1b\n\x13\x63rypto_period_index\x18\x07 \x01(\r\x12\x17\n\x0fgrouped_license\x18\x08 \x01(\x0c\x12\x19\n\x11protection_scheme\x18\t \x01(\r\x12\x1d\n\x15\x63rypto_period_seconds\x18\n \x01(\r\"(\n\tAlgorithm\x12\x0f\n\x0bUNENCRYPTED\x10\x00\x12\n\n\x06\x41\x45SCTR\x10\x01\"\xcf\x02\n\x14SignedLicenseRequest\x12/\n\x04Type\x18\x01 \x01(\x0e\x32!.SignedLicenseRequest.MessageType\x12\x1c\n\x03Msg\x18\x02 \x01(\x0b\x32\x0f.LicenseRequest\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"\x91\x01\n\x0bMessageType\x12\x12\n\x0e\x44UMMY_MSG_TYPE\x10\x00\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05\"\xba\x02\n\rSignedLicense\x12(\n\x04Type\x18\x01 \x01(\x0e\x32\x1a.SignedLicense.MessageType\x12\x15\n\x03Msg\x18\x02 \x01(\x0b\x32\x08.License\x12\x11\n\tSignature\x18\x03 \x01(\x0c\x12\x12\n\nSessionKey\x18\x04 \x01(\x0c\x12-\n\x11RemoteAttestation\x18\x05 \x01(\x0b\x32\x12.RemoteAttestation\"\x91\x01\n\x0bMessageType\x12\x12\n\x0e\x44UMMY_MSG_TYPE\x10\x00\x12\x13\n\x0fLICENSE_REQUEST\x10\x01\x12\x0b\n\x07LICENSE\x10\x02\x12\x12\n\x0e\x45RROR_RESPONSE\x10\x03\x12\x1f\n\x1bSERVICE_CERTIFICATE_REQUEST\x10\x04\x12\x17\n\x13SERVICE_CERTIFICATE\x10\x05*$\n\x0bLicenseType\x12\x08\n\x04ZERO\x10\x00\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x01*)\n\x0fProtocolVersion\x12\t\n\x05\x44UMMY\x10\x00\x12\x0b\n\x07\x43URRENT\x10\x15\x62\x06proto3')
+)
+
+_LICENSETYPE = _descriptor.EnumDescriptor(
+ name='LicenseType',
+ full_name='LicenseType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ZERO', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEFAULT', index=1, number=1,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6713,
+ serialized_end=6749,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSETYPE)
+
+LicenseType = enum_type_wrapper.EnumTypeWrapper(_LICENSETYPE)
+_PROTOCOLVERSION = _descriptor.EnumDescriptor(
+ name='ProtocolVersion',
+ full_name='ProtocolVersion',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CURRENT', index=1, number=21,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6751,
+ serialized_end=6792,
+)
+_sym_db.RegisterEnumDescriptor(_PROTOCOLVERSION)
+
+ProtocolVersion = enum_type_wrapper.EnumTypeWrapper(_PROTOCOLVERSION)
+ZERO = 0
+DEFAULT = 1
+DUMMY = 0
+CURRENT = 21
+
+
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION = _descriptor.EnumDescriptor(
+ name='HdcpVersion',
+ full_name='ClientIdentification.ClientCapabilities.HdcpVersion',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_NONE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V1', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2_1', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HDCP_V2_2', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=560,
+ serialized_end=644,
+)
+_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION)
+
+_CLIENTIDENTIFICATION_TOKENTYPE = _descriptor.EnumDescriptor(
+ name='TokenType',
+ full_name='ClientIdentification.TokenType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='KEYBOX', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='DEVICE_CERTIFICATE', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REMOTE_ATTESTATION_CERTIFICATE', index=2, number=2,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=646,
+ serialized_end=729,
+)
+_sym_db.RegisterEnumDescriptor(_CLIENTIDENTIFICATION_TOKENTYPE)
+
+_DEVICECERTIFICATE_CERTIFICATETYPE = _descriptor.EnumDescriptor(
+ name='CertificateType',
+ full_name='DeviceCertificate.CertificateType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='ROOT', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INTERMEDIATE', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='USER_DEVICE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=940,
+ serialized_end=1015,
+)
+_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATE_CERTIFICATETYPE)
+
+_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS = _descriptor.EnumDescriptor(
+ name='CertificateStatus',
+ full_name='DeviceCertificateStatus.CertificateStatus',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='VALID', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVOKED', index=1, number=1,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=1171,
+ serialized_end=1214,
+)
+_sym_db.RegisterEnumDescriptor(_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS)
+
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS = _descriptor.EnumDescriptor(
+ name='CGMS',
+ full_name='License.KeyContainer.OutputProtection.CGMS',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='COPY_FREE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COPY_ONCE', index=1, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='COPY_NEVER', index=2, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CGMS_NONE', index=3, number=42,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=2947,
+ serialized_end=3014,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS)
+
+_LICENSE_KEYCONTAINER_KEYTYPE = _descriptor.EnumDescriptor(
+ name='KeyType',
+ full_name='License.KeyContainer.KeyType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='_NOKEYTYPE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SIGNING', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='CONTENT', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='KEY_CONTROL', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='OPERATOR_SESSION', index=4, number=4,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3349,
+ serialized_end=3439,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_KEYTYPE)
+
+_LICENSE_KEYCONTAINER_SECURITYLEVEL = _descriptor.EnumDescriptor(
+ name='SecurityLevel',
+ full_name='License.KeyContainer.SecurityLevel',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='_NOSECLEVEL', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SW_SECURE_CRYPTO', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SW_SECURE_DECODE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_CRYPTO', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_DECODE', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HW_SECURE_ALL', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3442,
+ serialized_end=3581,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSE_KEYCONTAINER_SECURITYLEVEL)
+
+_LICENSEERROR_ERROR = _descriptor.EnumDescriptor(
+ name='Error',
+ full_name='LicenseError.Error',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY_NO_ERROR', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='INVALID_DEVICE_CERTIFICATE', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='REVOKED_DEVICE_CERTIFICATE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_UNAVAILABLE', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=3640,
+ serialized_end=3756,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSEERROR_ERROR)
+
+_LICENSEREQUEST_REQUESTTYPE = _descriptor.EnumDescriptor(
+ name='RequestType',
+ full_name='LicenseRequest.RequestType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY_REQ_TYPE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='NEW', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RENEWAL', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='RELEASE', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=4651,
+ serialized_end=4719,
+)
+_sym_db.RegisterEnumDescriptor(_LICENSEREQUEST_REQUESTTYPE)
+
+_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL = _descriptor.EnumDescriptor(
+ name='WvSecurityLevel',
+ full_name='ProvisionedDeviceInfo.WvSecurityLevel',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_UNSPECIFIED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_1', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_2', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LEVEL_3', index=3, number=3,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=4937,
+ serialized_end=5016,
+)
+_sym_db.RegisterEnumDescriptor(_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL)
+
+_SIGNEDMESSAGE_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedMessage.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY_MSG_TYPE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=5583,
+ serialized_end=5728,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDMESSAGE_MESSAGETYPE)
+
+_WIDEVINECENCHEADER_ALGORITHM = _descriptor.EnumDescriptor(
+ name='Algorithm',
+ full_name='WidevineCencHeader.Algorithm',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='UNENCRYPTED', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='AESCTR', index=1, number=1,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=6016,
+ serialized_end=6056,
+)
+_sym_db.RegisterEnumDescriptor(_WIDEVINECENCHEADER_ALGORITHM)
+
+_SIGNEDLICENSEREQUEST_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedLicenseRequest.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY_MSG_TYPE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=5583,
+ serialized_end=5728,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSEREQUEST_MESSAGETYPE)
+
+_SIGNEDLICENSE_MESSAGETYPE = _descriptor.EnumDescriptor(
+ name='MessageType',
+ full_name='SignedLicense.MessageType',
+ filename=None,
+ file=DESCRIPTOR,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name='DUMMY_MSG_TYPE', index=0, number=0,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE_REQUEST', index=1, number=1,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='LICENSE', index=2, number=2,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='ERROR_RESPONSE', index=3, number=3,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE_REQUEST', index=4, number=4,
+ options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SERVICE_CERTIFICATE', index=5, number=5,
+ options=None,
+ type=None),
+ ],
+ containing_type=None,
+ options=None,
+ serialized_start=5583,
+ serialized_end=5728,
+)
+_sym_db.RegisterEnumDescriptor(_SIGNEDLICENSE_MESSAGETYPE)
+
+
+_CLIENTIDENTIFICATION_NAMEVALUE = _descriptor.Descriptor(
+ name='NameValue',
+ full_name='ClientIdentification.NameValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Name', full_name='ClientIdentification.NameValue.Name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Value', full_name='ClientIdentification.NameValue.Value', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=309,
+ serialized_end=349,
+)
+
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES = _descriptor.Descriptor(
+ name='ClientCapabilities',
+ full_name='ClientIdentification.ClientCapabilities',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ClientToken', full_name='ClientIdentification.ClientCapabilities.ClientToken', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionToken', full_name='ClientIdentification.ClientCapabilities.SessionToken', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='VideoResolutionConstraints', full_name='ClientIdentification.ClientCapabilities.VideoResolutionConstraints', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='MaxHdcpVersion', full_name='ClientIdentification.ClientCapabilities.MaxHdcpVersion', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='OemCryptoApiVersion', full_name='ClientIdentification.ClientCapabilities.OemCryptoApiVersion', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=352,
+ serialized_end=644,
+)
+
+_CLIENTIDENTIFICATION = _descriptor.Descriptor(
+ name='ClientIdentification',
+ full_name='ClientIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='ClientIdentification.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Token', full_name='ClientIdentification.Token', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ClientInfo', full_name='ClientIdentification.ClientInfo', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderClientToken', full_name='ClientIdentification.ProviderClientToken', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseCounter', full_name='ClientIdentification.LicenseCounter', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_ClientCapabilities', full_name='ClientIdentification._ClientCapabilities', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_CLIENTIDENTIFICATION_NAMEVALUE, _CLIENTIDENTIFICATION_CLIENTCAPABILITIES, ],
+ enum_types=[
+ _CLIENTIDENTIFICATION_TOKENTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=20,
+ serialized_end=729,
+)
+
+
+_DEVICECERTIFICATE = _descriptor.Descriptor(
+ name='DeviceCertificate',
+ full_name='DeviceCertificate',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='DeviceCertificate.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SerialNumber', full_name='DeviceCertificate.SerialNumber', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CreationTimeSeconds', full_name='DeviceCertificate.CreationTimeSeconds', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PublicKey', full_name='DeviceCertificate.PublicKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SystemId', full_name='DeviceCertificate.SystemId', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='TestDeviceDeprecated', full_name='DeviceCertificate.TestDeviceDeprecated', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ServiceId', full_name='DeviceCertificate.ServiceId', index=6,
+ number=7, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DEVICECERTIFICATE_CERTIFICATETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=732,
+ serialized_end=1015,
+)
+
+
+_DEVICECERTIFICATESTATUS = _descriptor.Descriptor(
+ name='DeviceCertificateStatus',
+ full_name='DeviceCertificateStatus',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='SerialNumber', full_name='DeviceCertificateStatus.SerialNumber', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Status', full_name='DeviceCertificateStatus.Status', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='DeviceInfo', full_name='DeviceCertificateStatus.DeviceInfo', index=2,
+ number=4, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1018,
+ serialized_end=1214,
+)
+
+
+_DEVICECERTIFICATESTATUSLIST = _descriptor.Descriptor(
+ name='DeviceCertificateStatusList',
+ full_name='DeviceCertificateStatusList',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CreationTimeSeconds', full_name='DeviceCertificateStatusList.CreationTimeSeconds', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CertificateStatus', full_name='DeviceCertificateStatusList.CertificateStatus', index=1,
+ number=2, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1216,
+ serialized_end=1327,
+)
+
+
+_ENCRYPTEDCLIENTIDENTIFICATION = _descriptor.Descriptor(
+ name='EncryptedClientIdentification',
+ full_name='EncryptedClientIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ServiceId', full_name='EncryptedClientIdentification.ServiceId', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ServiceCertificateSerialNumber', full_name='EncryptedClientIdentification.ServiceCertificateSerialNumber', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientId', full_name='EncryptedClientIdentification.EncryptedClientId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientIdIv', full_name='EncryptedClientIdentification.EncryptedClientIdIv', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedPrivacyKey', full_name='EncryptedClientIdentification.EncryptedPrivacyKey', index=4,
+ number=5, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1330,
+ serialized_end=1505,
+)
+
+
+_LICENSEIDENTIFICATION = _descriptor.Descriptor(
+ name='LicenseIdentification',
+ full_name='LicenseIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseIdentification.RequestId', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionId', full_name='LicenseIdentification.SessionId', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PurchaseId', full_name='LicenseIdentification.PurchaseId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='LicenseIdentification.Type', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Version', full_name='LicenseIdentification.Version', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderSessionToken', full_name='LicenseIdentification.ProviderSessionToken', index=5,
+ number=6, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1508,
+ serialized_end=1664,
+)
+
+
+_LICENSE_POLICY = _descriptor.Descriptor(
+ name='Policy',
+ full_name='License.Policy',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CanPlay', full_name='License.Policy.CanPlay', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CanPersist', full_name='License.Policy.CanPersist', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CanRenew', full_name='License.Policy.CanRenew', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RentalDurationSeconds', full_name='License.Policy.RentalDurationSeconds', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='PlaybackDurationSeconds', full_name='License.Policy.PlaybackDurationSeconds', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseDurationSeconds', full_name='License.Policy.LicenseDurationSeconds', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalRecoveryDurationSeconds', full_name='License.Policy.RenewalRecoveryDurationSeconds', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalServerUrl', full_name='License.Policy.RenewalServerUrl', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalDelaySeconds', full_name='License.Policy.RenewalDelaySeconds', index=8,
+ number=9, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewalRetryIntervalSeconds', full_name='License.Policy.RenewalRetryIntervalSeconds', index=9,
+ number=10, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RenewWithUsage', full_name='License.Policy.RenewWithUsage', index=10,
+ number=11, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='UnknownPolicy12', full_name='License.Policy.UnknownPolicy12', index=11,
+ number=12, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1931,
+ serialized_end=2271,
+)
+
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION = _descriptor.Descriptor(
+ name='OutputProtection',
+ full_name='License.KeyContainer.OutputProtection',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Hdcp', full_name='License.KeyContainer.OutputProtection.Hdcp', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='CgmsFlags', full_name='License.KeyContainer.OutputProtection.CgmsFlags', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2795,
+ serialized_end=3014,
+)
+
+_LICENSE_KEYCONTAINER_KEYCONTROL = _descriptor.Descriptor(
+ name='KeyControl',
+ full_name='License.KeyContainer.KeyControl',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='KeyControlBlock', full_name='License.KeyContainer.KeyControl.KeyControlBlock', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Iv', full_name='License.KeyContainer.KeyControl.Iv', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3016,
+ serialized_end=3065,
+)
+
+_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS = _descriptor.Descriptor(
+ name='OperatorSessionKeyPermissions',
+ full_name='License.KeyContainer.OperatorSessionKeyPermissions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='AllowEncrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowEncrypt', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowDecrypt', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowDecrypt', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowSign', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSign', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='AllowSignatureVerify', full_name='License.KeyContainer.OperatorSessionKeyPermissions.AllowSignatureVerify', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3067,
+ serialized_end=3191,
+)
+
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT = _descriptor.Descriptor(
+ name='VideoResolutionConstraint',
+ full_name='License.KeyContainer.VideoResolutionConstraint',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='MinResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MinResolutionPixels', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='MaxResolutionPixels', full_name='License.KeyContainer.VideoResolutionConstraint.MaxResolutionPixels', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequiredProtection', full_name='License.KeyContainer.VideoResolutionConstraint.RequiredProtection', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3194,
+ serialized_end=3347,
+)
+
+_LICENSE_KEYCONTAINER = _descriptor.Descriptor(
+ name='KeyContainer',
+ full_name='License.KeyContainer',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Id', full_name='License.KeyContainer.Id', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Iv', full_name='License.KeyContainer.Iv', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Key', full_name='License.KeyContainer.Key', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='License.KeyContainer.Type', index=3,
+ number=4, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Level', full_name='License.KeyContainer.Level', index=4,
+ number=5, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequiredProtection', full_name='License.KeyContainer.RequiredProtection', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestedProtection', full_name='License.KeyContainer.RequestedProtection', index=6,
+ number=7, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_KeyControl', full_name='License.KeyContainer._KeyControl', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_OperatorSessionKeyPermissions', full_name='License.KeyContainer._OperatorSessionKeyPermissions', index=8,
+ number=9, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='VideoResolutionConstraints', full_name='License.KeyContainer.VideoResolutionConstraints', index=9,
+ number=10, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSE_KEYCONTAINER_OUTPUTPROTECTION, _LICENSE_KEYCONTAINER_KEYCONTROL, _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS, _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT, ],
+ enum_types=[
+ _LICENSE_KEYCONTAINER_KEYTYPE,
+ _LICENSE_KEYCONTAINER_SECURITYLEVEL,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=2274,
+ serialized_end=3581,
+)
+
+_LICENSE = _descriptor.Descriptor(
+ name='License',
+ full_name='License',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Id', full_name='License.Id', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='_Policy', full_name='License._Policy', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Key', full_name='License.Key', index=2,
+ number=3, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseStartTime', full_name='License.LicenseStartTime', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestationVerified', full_name='License.RemoteAttestationVerified', index=4,
+ number=5, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProviderClientToken', full_name='License.ProviderClientToken', index=5,
+ number=6, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProtectionScheme', full_name='License.ProtectionScheme', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='UnknownHdcpDataField', full_name='License.UnknownHdcpDataField', index=7,
+ number=8, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSE_POLICY, _LICENSE_KEYCONTAINER, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=1667,
+ serialized_end=3581,
+)
+
+
+_LICENSEERROR = _descriptor.Descriptor(
+ name='LicenseError',
+ full_name='LicenseError',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ErrorCode', full_name='LicenseError.ErrorCode', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _LICENSEERROR_ERROR,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3584,
+ serialized_end=3756,
+)
+
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC = _descriptor.Descriptor(
+ name='CENC',
+ full_name='LicenseRequest.ContentIdentification.CENC',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Pssh', full_name='LicenseRequest.ContentIdentification.CENC.Pssh', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequest.ContentIdentification.CENC.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequest.ContentIdentification.CENC.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4320,
+ serialized_end=4415,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM = _descriptor.Descriptor(
+ name='WebM',
+ full_name='LicenseRequest.ContentIdentification.WebM',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Header', full_name='LicenseRequest.ContentIdentification.WebM.Header', index=0,
+ number=1, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='LicenseType', full_name='LicenseRequest.ContentIdentification.WebM.LicenseType', index=1,
+ number=2, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestId', full_name='LicenseRequest.ContentIdentification.WebM.RequestId', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4417,
+ serialized_end=4493,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE = _descriptor.Descriptor(
+ name='ExistingLicense',
+ full_name='LicenseRequest.ContentIdentification.ExistingLicense',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='LicenseId', full_name='LicenseRequest.ContentIdentification.ExistingLicense.LicenseId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceStarted', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceStarted', index=1,
+ number=2, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecondsSinceLastPlayed', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SecondsSinceLastPlayed', index=2,
+ number=3, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionUsageTableEntry', full_name='LicenseRequest.ContentIdentification.ExistingLicense.SessionUsageTableEntry', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4496,
+ serialized_end=4649,
+)
+
+_LICENSEREQUEST_CONTENTIDENTIFICATION = _descriptor.Descriptor(
+ name='ContentIdentification',
+ full_name='LicenseRequest.ContentIdentification',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='CencId', full_name='LicenseRequest.ContentIdentification.CencId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='WebmId', full_name='LicenseRequest.ContentIdentification.WebmId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='License', full_name='LicenseRequest.ContentIdentification.License', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC, _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM, _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE, ],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4103,
+ serialized_end=4649,
+)
+
+_LICENSEREQUEST = _descriptor.Descriptor(
+ name='LicenseRequest',
+ full_name='LicenseRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='ClientId', full_name='LicenseRequest.ClientId', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ContentId', full_name='LicenseRequest.ContentId', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='LicenseRequest.Type', index=2,
+ number=3, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RequestTime', full_name='LicenseRequest.RequestTime', index=3,
+ number=4, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonceDeprecated', full_name='LicenseRequest.KeyControlNonceDeprecated', index=4,
+ number=5, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ProtocolVersion', full_name='LicenseRequest.ProtocolVersion', index=5,
+ number=6, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='KeyControlNonce', full_name='LicenseRequest.KeyControlNonce', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='EncryptedClientId', full_name='LicenseRequest.EncryptedClientId', index=7,
+ number=8, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[_LICENSEREQUEST_CONTENTIDENTIFICATION, ],
+ enum_types=[
+ _LICENSEREQUEST_REQUESTTYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=3759,
+ serialized_end=4719,
+)
+
+
+_PROVISIONEDDEVICEINFO = _descriptor.Descriptor(
+ name='ProvisionedDeviceInfo',
+ full_name='ProvisionedDeviceInfo',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='SystemId', full_name='ProvisionedDeviceInfo.SystemId', index=0,
+ number=1, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Soc', full_name='ProvisionedDeviceInfo.Soc', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Manufacturer', full_name='ProvisionedDeviceInfo.Manufacturer', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Model', full_name='ProvisionedDeviceInfo.Model', index=3,
+ number=4, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='DeviceType', full_name='ProvisionedDeviceInfo.DeviceType', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='ModelYear', full_name='ProvisionedDeviceInfo.ModelYear', index=5,
+ number=6, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SecurityLevel', full_name='ProvisionedDeviceInfo.SecurityLevel', index=6,
+ number=7, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='TestDevice', full_name='ProvisionedDeviceInfo.TestDevice', index=7,
+ number=8, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=4722,
+ serialized_end=5016,
+)
+
+
+_PROVISIONINGOPTIONS = _descriptor.Descriptor(
+ name='ProvisioningOptions',
+ full_name='ProvisioningOptions',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5018,
+ serialized_end=5039,
+)
+
+
+_PROVISIONINGREQUEST = _descriptor.Descriptor(
+ name='ProvisioningRequest',
+ full_name='ProvisioningRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5041,
+ serialized_end=5062,
+)
+
+
+_PROVISIONINGRESPONSE = _descriptor.Descriptor(
+ name='ProvisioningResponse',
+ full_name='ProvisioningResponse',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5064,
+ serialized_end=5086,
+)
+
+
+_REMOTEATTESTATION = _descriptor.Descriptor(
+ name='RemoteAttestation',
+ full_name='RemoteAttestation',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Certificate', full_name='RemoteAttestation.Certificate', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Salt', full_name='RemoteAttestation.Salt', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='RemoteAttestation.Signature', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5088,
+ serialized_end=5193,
+)
+
+
+_SESSIONINIT = _descriptor.Descriptor(
+ name='SessionInit',
+ full_name='SessionInit',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5195,
+ serialized_end=5208,
+)
+
+
+_SESSIONSTATE = _descriptor.Descriptor(
+ name='SessionState',
+ full_name='SessionState',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5210,
+ serialized_end=5224,
+)
+
+
+_SIGNEDCERTIFICATESTATUSLIST = _descriptor.Descriptor(
+ name='SignedCertificateStatusList',
+ full_name='SignedCertificateStatusList',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5226,
+ serialized_end=5255,
+)
+
+
+_SIGNEDDEVICECERTIFICATE = _descriptor.Descriptor(
+ name='SignedDeviceCertificate',
+ full_name='SignedDeviceCertificate',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='_DeviceCertificate', full_name='SignedDeviceCertificate._DeviceCertificate', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedDeviceCertificate.Signature', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signer', full_name='SignedDeviceCertificate.Signer', index=2,
+ number=3, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5258,
+ serialized_end=5392,
+)
+
+
+_SIGNEDPROVISIONINGMESSAGE = _descriptor.Descriptor(
+ name='SignedProvisioningMessage',
+ full_name='SignedProvisioningMessage',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5394,
+ serialized_end=5421,
+)
+
+
+_SIGNEDMESSAGE = _descriptor.Descriptor(
+ name='SignedMessage',
+ full_name='SignedMessage',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedMessage.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedMessage.Msg', index=1,
+ number=2, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedMessage.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedMessage.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedMessage.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDMESSAGE_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5424,
+ serialized_end=5728,
+)
+
+
+_WIDEVINECENCHEADER = _descriptor.Descriptor(
+ name='WidevineCencHeader',
+ full_name='WidevineCencHeader',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='algorithm', full_name='WidevineCencHeader.algorithm', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='key_id', full_name='WidevineCencHeader.key_id', index=1,
+ number=2, type=12, cpp_type=9, label=3,
+ has_default_value=False, default_value=[],
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='provider', full_name='WidevineCencHeader.provider', index=2,
+ number=3, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='content_id', full_name='WidevineCencHeader.content_id', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='track_type_deprecated', full_name='WidevineCencHeader.track_type_deprecated', index=4,
+ number=5, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='policy', full_name='WidevineCencHeader.policy', index=5,
+ number=6, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='crypto_period_index', full_name='WidevineCencHeader.crypto_period_index', index=6,
+ number=7, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='grouped_license', full_name='WidevineCencHeader.grouped_license', index=7,
+ number=8, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='protection_scheme', full_name='WidevineCencHeader.protection_scheme', index=8,
+ number=9, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='crypto_period_seconds', full_name='WidevineCencHeader.crypto_period_seconds', index=9,
+ number=10, type=13, cpp_type=3, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _WIDEVINECENCHEADER_ALGORITHM,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=5731,
+ serialized_end=6056,
+)
+
+
+_SIGNEDLICENSEREQUEST = _descriptor.Descriptor(
+ name='SignedLicenseRequest',
+ full_name='SignedLicenseRequest',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedLicenseRequest.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedLicenseRequest.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedLicenseRequest.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedLicenseRequest.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedLicenseRequest.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDLICENSEREQUEST_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6059,
+ serialized_end=6394,
+)
+
+
+_SIGNEDLICENSE = _descriptor.Descriptor(
+ name='SignedLicense',
+ full_name='SignedLicense',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='Type', full_name='SignedLicense.Type', index=0,
+ number=1, type=14, cpp_type=8, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Msg', full_name='SignedLicense.Msg', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='Signature', full_name='SignedLicense.Signature', index=2,
+ number=3, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='SessionKey', full_name='SignedLicense.SessionKey', index=3,
+ number=4, type=12, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b(""),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='RemoteAttestation', full_name='SignedLicense.RemoteAttestation', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ _SIGNEDLICENSE_MESSAGETYPE,
+ ],
+ options=None,
+ is_extendable=False,
+ syntax='proto3',
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=6397,
+ serialized_end=6711,
+)
+
+_CLIENTIDENTIFICATION_NAMEVALUE.containing_type = _CLIENTIDENTIFICATION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.fields_by_name['MaxHdcpVersion'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES.containing_type = _CLIENTIDENTIFICATION
+_CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION.containing_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES
+_CLIENTIDENTIFICATION.fields_by_name['Type'].enum_type = _CLIENTIDENTIFICATION_TOKENTYPE
+_CLIENTIDENTIFICATION.fields_by_name['Token'].message_type = _SIGNEDDEVICECERTIFICATE
+_CLIENTIDENTIFICATION.fields_by_name['ClientInfo'].message_type = _CLIENTIDENTIFICATION_NAMEVALUE
+_CLIENTIDENTIFICATION.fields_by_name['_ClientCapabilities'].message_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES
+_CLIENTIDENTIFICATION_TOKENTYPE.containing_type = _CLIENTIDENTIFICATION
+_DEVICECERTIFICATE.fields_by_name['Type'].enum_type = _DEVICECERTIFICATE_CERTIFICATETYPE
+_DEVICECERTIFICATE_CERTIFICATETYPE.containing_type = _DEVICECERTIFICATE
+_DEVICECERTIFICATESTATUS.fields_by_name['Status'].enum_type = _DEVICECERTIFICATESTATUS_CERTIFICATESTATUS
+_DEVICECERTIFICATESTATUS.fields_by_name['DeviceInfo'].message_type = _PROVISIONEDDEVICEINFO
+_DEVICECERTIFICATESTATUS_CERTIFICATESTATUS.containing_type = _DEVICECERTIFICATESTATUS
+_DEVICECERTIFICATESTATUSLIST.fields_by_name['CertificateStatus'].message_type = _DEVICECERTIFICATESTATUS
+_LICENSEIDENTIFICATION.fields_by_name['Type'].enum_type = _LICENSETYPE
+_LICENSE_POLICY.containing_type = _LICENSE
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['Hdcp'].enum_type = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES_HDCPVERSION
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.fields_by_name['CgmsFlags'].enum_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_OUTPUTPROTECTION_CGMS.containing_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER_KEYCONTROL.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER.fields_by_name['Type'].enum_type = _LICENSE_KEYCONTAINER_KEYTYPE
+_LICENSE_KEYCONTAINER.fields_by_name['Level'].enum_type = _LICENSE_KEYCONTAINER_SECURITYLEVEL
+_LICENSE_KEYCONTAINER.fields_by_name['RequiredProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER.fields_by_name['RequestedProtection'].message_type = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION
+_LICENSE_KEYCONTAINER.fields_by_name['_KeyControl'].message_type = _LICENSE_KEYCONTAINER_KEYCONTROL
+_LICENSE_KEYCONTAINER.fields_by_name['_OperatorSessionKeyPermissions'].message_type = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS
+_LICENSE_KEYCONTAINER.fields_by_name['VideoResolutionConstraints'].message_type = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT
+_LICENSE_KEYCONTAINER.containing_type = _LICENSE
+_LICENSE_KEYCONTAINER_KEYTYPE.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE_KEYCONTAINER_SECURITYLEVEL.containing_type = _LICENSE_KEYCONTAINER
+_LICENSE.fields_by_name['Id'].message_type = _LICENSEIDENTIFICATION
+_LICENSE.fields_by_name['_Policy'].message_type = _LICENSE_POLICY
+_LICENSE.fields_by_name['Key'].message_type = _LICENSE_KEYCONTAINER
+_LICENSEERROR.fields_by_name['ErrorCode'].enum_type = _LICENSEERROR_ERROR
+_LICENSEERROR_ERROR.containing_type = _LICENSEERROR
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['Pssh'].message_type = _WIDEVINECENCHEADER
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUEST_CONTENTIDENTIFICATION_CENC.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.fields_by_name['LicenseType'].enum_type = _LICENSETYPE
+_LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.fields_by_name['LicenseId'].message_type = _LICENSEIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE.containing_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['CencId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['WebmId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM
+_LICENSEREQUEST_CONTENTIDENTIFICATION.fields_by_name['License'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE
+_LICENSEREQUEST_CONTENTIDENTIFICATION.containing_type = _LICENSEREQUEST
+_LICENSEREQUEST.fields_by_name['ClientId'].message_type = _CLIENTIDENTIFICATION
+_LICENSEREQUEST.fields_by_name['ContentId'].message_type = _LICENSEREQUEST_CONTENTIDENTIFICATION
+_LICENSEREQUEST.fields_by_name['Type'].enum_type = _LICENSEREQUEST_REQUESTTYPE
+_LICENSEREQUEST.fields_by_name['ProtocolVersion'].enum_type = _PROTOCOLVERSION
+_LICENSEREQUEST.fields_by_name['EncryptedClientId'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION
+_LICENSEREQUEST_REQUESTTYPE.containing_type = _LICENSEREQUEST
+_PROVISIONEDDEVICEINFO.fields_by_name['SecurityLevel'].enum_type = _PROVISIONEDDEVICEINFO_WVSECURITYLEVEL
+_PROVISIONEDDEVICEINFO_WVSECURITYLEVEL.containing_type = _PROVISIONEDDEVICEINFO
+_REMOTEATTESTATION.fields_by_name['Certificate'].message_type = _ENCRYPTEDCLIENTIDENTIFICATION
+_SIGNEDDEVICECERTIFICATE.fields_by_name['_DeviceCertificate'].message_type = _DEVICECERTIFICATE
+_SIGNEDDEVICECERTIFICATE.fields_by_name['Signer'].message_type = _SIGNEDDEVICECERTIFICATE
+_SIGNEDMESSAGE.fields_by_name['Type'].enum_type = _SIGNEDMESSAGE_MESSAGETYPE
+_SIGNEDMESSAGE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDMESSAGE_MESSAGETYPE.containing_type = _SIGNEDMESSAGE
+_WIDEVINECENCHEADER.fields_by_name['algorithm'].enum_type = _WIDEVINECENCHEADER_ALGORITHM
+_WIDEVINECENCHEADER_ALGORITHM.containing_type = _WIDEVINECENCHEADER
+_SIGNEDLICENSEREQUEST.fields_by_name['Type'].enum_type = _SIGNEDLICENSEREQUEST_MESSAGETYPE
+_SIGNEDLICENSEREQUEST.fields_by_name['Msg'].message_type = _LICENSEREQUEST
+_SIGNEDLICENSEREQUEST.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDLICENSEREQUEST_MESSAGETYPE.containing_type = _SIGNEDLICENSEREQUEST
+_SIGNEDLICENSE.fields_by_name['Type'].enum_type = _SIGNEDLICENSE_MESSAGETYPE
+_SIGNEDLICENSE.fields_by_name['Msg'].message_type = _LICENSE
+_SIGNEDLICENSE.fields_by_name['RemoteAttestation'].message_type = _REMOTEATTESTATION
+_SIGNEDLICENSE_MESSAGETYPE.containing_type = _SIGNEDLICENSE
+DESCRIPTOR.message_types_by_name['ClientIdentification'] = _CLIENTIDENTIFICATION
+DESCRIPTOR.message_types_by_name['DeviceCertificate'] = _DEVICECERTIFICATE
+DESCRIPTOR.message_types_by_name['DeviceCertificateStatus'] = _DEVICECERTIFICATESTATUS
+DESCRIPTOR.message_types_by_name['DeviceCertificateStatusList'] = _DEVICECERTIFICATESTATUSLIST
+DESCRIPTOR.message_types_by_name['EncryptedClientIdentification'] = _ENCRYPTEDCLIENTIDENTIFICATION
+DESCRIPTOR.message_types_by_name['LicenseIdentification'] = _LICENSEIDENTIFICATION
+DESCRIPTOR.message_types_by_name['License'] = _LICENSE
+DESCRIPTOR.message_types_by_name['LicenseError'] = _LICENSEERROR
+DESCRIPTOR.message_types_by_name['LicenseRequest'] = _LICENSEREQUEST
+DESCRIPTOR.message_types_by_name['ProvisionedDeviceInfo'] = _PROVISIONEDDEVICEINFO
+DESCRIPTOR.message_types_by_name['ProvisioningOptions'] = _PROVISIONINGOPTIONS
+DESCRIPTOR.message_types_by_name['ProvisioningRequest'] = _PROVISIONINGREQUEST
+DESCRIPTOR.message_types_by_name['ProvisioningResponse'] = _PROVISIONINGRESPONSE
+DESCRIPTOR.message_types_by_name['RemoteAttestation'] = _REMOTEATTESTATION
+DESCRIPTOR.message_types_by_name['SessionInit'] = _SESSIONINIT
+DESCRIPTOR.message_types_by_name['SessionState'] = _SESSIONSTATE
+DESCRIPTOR.message_types_by_name['SignedCertificateStatusList'] = _SIGNEDCERTIFICATESTATUSLIST
+DESCRIPTOR.message_types_by_name['SignedDeviceCertificate'] = _SIGNEDDEVICECERTIFICATE
+DESCRIPTOR.message_types_by_name['SignedProvisioningMessage'] = _SIGNEDPROVISIONINGMESSAGE
+DESCRIPTOR.message_types_by_name['SignedMessage'] = _SIGNEDMESSAGE
+DESCRIPTOR.message_types_by_name['WidevineCencHeader'] = _WIDEVINECENCHEADER
+DESCRIPTOR.message_types_by_name['SignedLicenseRequest'] = _SIGNEDLICENSEREQUEST
+DESCRIPTOR.message_types_by_name['SignedLicense'] = _SIGNEDLICENSE
+DESCRIPTOR.enum_types_by_name['LicenseType'] = _LICENSETYPE
+DESCRIPTOR.enum_types_by_name['ProtocolVersion'] = _PROTOCOLVERSION
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ClientIdentification = _reflection.GeneratedProtocolMessageType('ClientIdentification', (_message.Message,), dict(
+
+ NameValue = _reflection.GeneratedProtocolMessageType('NameValue', (_message.Message,), dict(
+ DESCRIPTOR = _CLIENTIDENTIFICATION_NAMEVALUE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification.NameValue)
+ ))
+ ,
+
+ ClientCapabilities = _reflection.GeneratedProtocolMessageType('ClientCapabilities', (_message.Message,), dict(
+ DESCRIPTOR = _CLIENTIDENTIFICATION_CLIENTCAPABILITIES,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification.ClientCapabilities)
+ ))
+ ,
+ DESCRIPTOR = _CLIENTIDENTIFICATION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ClientIdentification)
+ ))
+_sym_db.RegisterMessage(ClientIdentification)
+_sym_db.RegisterMessage(ClientIdentification.NameValue)
+_sym_db.RegisterMessage(ClientIdentification.ClientCapabilities)
+
+DeviceCertificate = _reflection.GeneratedProtocolMessageType('DeviceCertificate', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificate)
+ ))
+_sym_db.RegisterMessage(DeviceCertificate)
+
+DeviceCertificateStatus = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatus', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATESTATUS,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificateStatus)
+ ))
+_sym_db.RegisterMessage(DeviceCertificateStatus)
+
+DeviceCertificateStatusList = _reflection.GeneratedProtocolMessageType('DeviceCertificateStatusList', (_message.Message,), dict(
+ DESCRIPTOR = _DEVICECERTIFICATESTATUSLIST,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:DeviceCertificateStatusList)
+ ))
+_sym_db.RegisterMessage(DeviceCertificateStatusList)
+
+EncryptedClientIdentification = _reflection.GeneratedProtocolMessageType('EncryptedClientIdentification', (_message.Message,), dict(
+ DESCRIPTOR = _ENCRYPTEDCLIENTIDENTIFICATION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:EncryptedClientIdentification)
+ ))
+_sym_db.RegisterMessage(EncryptedClientIdentification)
+
+LicenseIdentification = _reflection.GeneratedProtocolMessageType('LicenseIdentification', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEIDENTIFICATION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseIdentification)
+ ))
+_sym_db.RegisterMessage(LicenseIdentification)
+
+License = _reflection.GeneratedProtocolMessageType('License', (_message.Message,), dict(
+
+ Policy = _reflection.GeneratedProtocolMessageType('Policy', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_POLICY,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.Policy)
+ ))
+ ,
+
+ KeyContainer = _reflection.GeneratedProtocolMessageType('KeyContainer', (_message.Message,), dict(
+
+ OutputProtection = _reflection.GeneratedProtocolMessageType('OutputProtection', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_OUTPUTPROTECTION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.OutputProtection)
+ ))
+ ,
+
+ KeyControl = _reflection.GeneratedProtocolMessageType('KeyControl', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_KEYCONTROL,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.KeyControl)
+ ))
+ ,
+
+ OperatorSessionKeyPermissions = _reflection.GeneratedProtocolMessageType('OperatorSessionKeyPermissions', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_OPERATORSESSIONKEYPERMISSIONS,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.OperatorSessionKeyPermissions)
+ ))
+ ,
+
+ VideoResolutionConstraint = _reflection.GeneratedProtocolMessageType('VideoResolutionConstraint', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSE_KEYCONTAINER_VIDEORESOLUTIONCONSTRAINT,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer.VideoResolutionConstraint)
+ ))
+ ,
+ DESCRIPTOR = _LICENSE_KEYCONTAINER,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License.KeyContainer)
+ ))
+ ,
+ DESCRIPTOR = _LICENSE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:License)
+ ))
+_sym_db.RegisterMessage(License)
+_sym_db.RegisterMessage(License.Policy)
+_sym_db.RegisterMessage(License.KeyContainer)
+_sym_db.RegisterMessage(License.KeyContainer.OutputProtection)
+_sym_db.RegisterMessage(License.KeyContainer.KeyControl)
+_sym_db.RegisterMessage(License.KeyContainer.OperatorSessionKeyPermissions)
+_sym_db.RegisterMessage(License.KeyContainer.VideoResolutionConstraint)
+
+LicenseError = _reflection.GeneratedProtocolMessageType('LicenseError', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEERROR,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseError)
+ ))
+_sym_db.RegisterMessage(LicenseError)
+
+LicenseRequest = _reflection.GeneratedProtocolMessageType('LicenseRequest', (_message.Message,), dict(
+
+ ContentIdentification = _reflection.GeneratedProtocolMessageType('ContentIdentification', (_message.Message,), dict(
+
+ CENC = _reflection.GeneratedProtocolMessageType('CENC', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_CENC,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.CENC)
+ ))
+ ,
+
+ WebM = _reflection.GeneratedProtocolMessageType('WebM', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_WEBM,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.WebM)
+ ))
+ ,
+
+ ExistingLicense = _reflection.GeneratedProtocolMessageType('ExistingLicense', (_message.Message,), dict(
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION_EXISTINGLICENSE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification.ExistingLicense)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUEST_CONTENTIDENTIFICATION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest.ContentIdentification)
+ ))
+ ,
+ DESCRIPTOR = _LICENSEREQUEST,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:LicenseRequest)
+ ))
+_sym_db.RegisterMessage(LicenseRequest)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.CENC)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.WebM)
+_sym_db.RegisterMessage(LicenseRequest.ContentIdentification.ExistingLicense)
+
+ProvisionedDeviceInfo = _reflection.GeneratedProtocolMessageType('ProvisionedDeviceInfo', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONEDDEVICEINFO,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisionedDeviceInfo)
+ ))
+_sym_db.RegisterMessage(ProvisionedDeviceInfo)
+
+ProvisioningOptions = _reflection.GeneratedProtocolMessageType('ProvisioningOptions', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGOPTIONS,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningOptions)
+ ))
+_sym_db.RegisterMessage(ProvisioningOptions)
+
+ProvisioningRequest = _reflection.GeneratedProtocolMessageType('ProvisioningRequest', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGREQUEST,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningRequest)
+ ))
+_sym_db.RegisterMessage(ProvisioningRequest)
+
+ProvisioningResponse = _reflection.GeneratedProtocolMessageType('ProvisioningResponse', (_message.Message,), dict(
+ DESCRIPTOR = _PROVISIONINGRESPONSE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:ProvisioningResponse)
+ ))
+_sym_db.RegisterMessage(ProvisioningResponse)
+
+RemoteAttestation = _reflection.GeneratedProtocolMessageType('RemoteAttestation', (_message.Message,), dict(
+ DESCRIPTOR = _REMOTEATTESTATION,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:RemoteAttestation)
+ ))
+_sym_db.RegisterMessage(RemoteAttestation)
+
+SessionInit = _reflection.GeneratedProtocolMessageType('SessionInit', (_message.Message,), dict(
+ DESCRIPTOR = _SESSIONINIT,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SessionInit)
+ ))
+_sym_db.RegisterMessage(SessionInit)
+
+SessionState = _reflection.GeneratedProtocolMessageType('SessionState', (_message.Message,), dict(
+ DESCRIPTOR = _SESSIONSTATE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SessionState)
+ ))
+_sym_db.RegisterMessage(SessionState)
+
+SignedCertificateStatusList = _reflection.GeneratedProtocolMessageType('SignedCertificateStatusList', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDCERTIFICATESTATUSLIST,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedCertificateStatusList)
+ ))
+_sym_db.RegisterMessage(SignedCertificateStatusList)
+
+SignedDeviceCertificate = _reflection.GeneratedProtocolMessageType('SignedDeviceCertificate', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDDEVICECERTIFICATE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedDeviceCertificate)
+ ))
+_sym_db.RegisterMessage(SignedDeviceCertificate)
+
+SignedProvisioningMessage = _reflection.GeneratedProtocolMessageType('SignedProvisioningMessage', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDPROVISIONINGMESSAGE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedProvisioningMessage)
+ ))
+_sym_db.RegisterMessage(SignedProvisioningMessage)
+
+SignedMessage = _reflection.GeneratedProtocolMessageType('SignedMessage', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDMESSAGE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedMessage)
+ ))
+_sym_db.RegisterMessage(SignedMessage)
+
+WidevineCencHeader = _reflection.GeneratedProtocolMessageType('WidevineCencHeader', (_message.Message,), dict(
+ DESCRIPTOR = _WIDEVINECENCHEADER,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:WidevineCencHeader)
+ ))
+_sym_db.RegisterMessage(WidevineCencHeader)
+
+SignedLicenseRequest = _reflection.GeneratedProtocolMessageType('SignedLicenseRequest', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDLICENSEREQUEST,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedLicenseRequest)
+ ))
+_sym_db.RegisterMessage(SignedLicenseRequest)
+
+SignedLicense = _reflection.GeneratedProtocolMessageType('SignedLicense', (_message.Message,), dict(
+ DESCRIPTOR = _SIGNEDLICENSE,
+ __module__ = 'wv_proto3_pb2'
+ # @@protoc_insertion_point(class_scope:SignedLicense)
+ ))
+_sym_db.RegisterMessage(SignedLicense)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/pywidevine/cdm/key.py b/pywidevine/cdm/key.py
new file mode 100644
index 0000000..2fe17ac
--- /dev/null
+++ b/pywidevine/cdm/key.py
@@ -0,0 +1,19 @@
+# uncompyle6 version 3.3.2
+# Python bytecode 3.6 (3379)
+# Decompiled from: Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]
+# Embedded file name: pywidevine\cdm\key.py
+import binascii
+
+class Key:
+
+ def __init__(self, kid, type, key, permissions=[]):
+ self.kid = kid
+ self.type = type
+ self.key = key
+ self.permissions = permissions
+
+ def __repr__(self):
+ if self.type == 'OPERATOR_SESSION':
+ return ('key(kid={}, type={}, key={}, permissions={})').format(self.kid, self.type, binascii.hexlify(self.key), self.permissions)
+ else:
+ return ('key(kid={}, type={}, key={})').format(self.kid, self.type, binascii.hexlify(self.key))
\ No newline at end of file
diff --git a/pywidevine/cdm/session.py b/pywidevine/cdm/session.py
new file mode 100644
index 0000000..531d66b
--- /dev/null
+++ b/pywidevine/cdm/session.py
@@ -0,0 +1,23 @@
+# uncompyle6 version 3.3.2
+# Python bytecode 3.6 (3379)
+# Decompiled from: Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]
+# Embedded file name: pywidevine\cdm\session.py
+
+
+class Session:
+
+ def __init__(self, session_id, init_data, device_config, offline):
+ self.session_id = session_id
+ self.init_data = init_data
+ self.offline = offline
+ self.device_config = device_config
+ self.device_key = None
+ self.session_key = None
+ self.derived_keys = {'enc':None,
+ 'auth_1':None,
+ 'auth_2':None}
+ self.license_request = None
+ self.license = None
+ self.service_certificate = None
+ self.privacy_mode = False
+ self.keys = []
\ No newline at end of file
diff --git a/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-36.pyc b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-36.pyc
new file mode 100644
index 0000000..0aae8c8
Binary files /dev/null and b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-36.pyc differ
diff --git a/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-37.pyc b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-37.pyc
new file mode 100644
index 0000000..b9c5b9b
Binary files /dev/null and b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-37.pyc differ
diff --git a/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-38.pyc b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-38.pyc
new file mode 100644
index 0000000..a4aa1c2
Binary files /dev/null and b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-38.pyc differ
diff --git a/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-39.pyc b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-39.pyc
new file mode 100644
index 0000000..81e800a
Binary files /dev/null and b/pywidevine/decrypt/__pycache__/wvdecryptcustom.cpython-39.pyc differ
diff --git a/pywidevine/decrypt/wvdecryptcustom.py b/pywidevine/decrypt/wvdecryptcustom.py
new file mode 100644
index 0000000..53afde0
--- /dev/null
+++ b/pywidevine/decrypt/wvdecryptcustom.py
@@ -0,0 +1,79 @@
+import logging
+import subprocess
+import re
+import base64
+
+from pywidevine.cdm import cdm, deviceconfig
+
+
+class WvDecrypt(object):
+ WV_SYSTEM_ID = [
+ 237,
+ 239,
+ 139,
+ 169,
+ 121,
+ 214,
+ 74,
+ 206,
+ 163,
+ 200,
+ 39,
+ 220,
+ 213,
+ 29,
+ 33,
+ 237,
+ ]
+
+ def __init__(self, init_data_b64, cert_data_b64, device):
+ self.init_data_b64 = init_data_b64
+ self.cert_data_b64 = cert_data_b64
+ self.device = device
+
+ self.cdm = cdm.Cdm()
+
+ def check_pssh(pssh_b64):
+ pssh = base64.b64decode(pssh_b64)
+ if not pssh[12:28] == bytes(self.WV_SYSTEM_ID):
+ new_pssh = bytearray([0, 0, 0])
+ new_pssh.append(32 + len(pssh))
+ new_pssh[4:] = bytearray(b"pssh")
+ new_pssh[8:] = [0, 0, 0, 0]
+ new_pssh[13:] = self.WV_SYSTEM_ID
+ new_pssh[29:] = [0, 0, 0, 0]
+ new_pssh[31] = len(pssh)
+ new_pssh[32:] = pssh
+ return base64.b64encode(new_pssh)
+ else:
+ return pssh_b64
+
+ self.session = self.cdm.open_session(
+ check_pssh(self.init_data_b64), deviceconfig.DeviceConfig(self.device)
+ )
+
+ if self.cert_data_b64:
+ self.cdm.set_service_certificate(self.session, self.cert_data_b64)
+
+ def log_message(self, msg):
+ return "{}".format(msg)
+
+ def start_process(self):
+ keyswvdecrypt = []
+ try:
+ for key in self.cdm.get_keys(self.session):
+ if key.type == "CONTENT":
+ keyswvdecrypt.append(
+ self.log_message("{}:{}".format(key.kid.hex(), key.key.hex()))
+ )
+ except Exception:
+ return False, keyswvdecrypt
+
+ return True, keyswvdecrypt
+ def get_challenge(self):
+ return self.cdm.get_license_request(self.session)
+
+ def update_license(self, license_b64):
+ self.cdm.provide_license(self.session, license_b64)
+ return True
+
diff --git a/services/__pycache__/netflix.cpython-36.pyc b/services/__pycache__/netflix.cpython-36.pyc
new file mode 100644
index 0000000..e81b4dc
Binary files /dev/null and b/services/__pycache__/netflix.cpython-36.pyc differ
diff --git a/services/__pycache__/netflix.cpython-39.pyc b/services/__pycache__/netflix.cpython-39.pyc
new file mode 100644
index 0000000..b703372
Binary files /dev/null and b/services/__pycache__/netflix.cpython-39.pyc differ
diff --git a/services/netflix.py b/services/netflix.py
new file mode 100644
index 0000000..96d0a37
--- /dev/null
+++ b/services/netflix.py
@@ -0,0 +1,969 @@
+import argparse, configparser, glob, json, logging, os, re, shutil, subprocess, sys, time, ffmpy, pycountry, requests, tqdm
+from bs4 import BeautifulSoup
+from threading import Thread
+from urllib.parse import urlsplit
+import utils.modules.pycaption as pycaption
+from http.cookiejar import MozillaCookieJar
+from configs.config import tool
+from helpers.aria2 import aria2
+from helpers.dfxp_to_srt import dfxp_to_srt
+from helpers.keyloader import keysaver
+from helpers.Muxer import Muxer
+from helpers.Parsers.Netflix import get_keys
+from helpers.Parsers.Netflix.get_manifest import get_manifest
+from helpers.ripprocess import EpisodesNumbersHandler, ripprocess
+from helpers.vpn import connect
+from pywidevine.cdm import cdm, deviceconfig
+from pywidevine.decrypt.wvdecryptcustom import WvDecrypt
+
+class netflix:
+ def __init__(self, args, commands):
+ self.logger = logging.getLogger(__name__)
+ self.args = args
+ self.tool = tool()
+ self.config = self.tool.config("NETFLIX")
+ self.bin = self.tool.bin()
+ self.ripprocess = ripprocess()
+ self.EpisodesNumbersHandler = EpisodesNumbersHandler()
+ self.commands = commands
+ self.keysaver = keysaver(keys_file=self.config["keys_file"])
+ self.logdata = {} # to save title data for debug or use later
+ self.source_tag = "NF"
+ self.dfxp_to_srt = dfxp_to_srt()
+ self.aria2 = aria2()
+ self.video_settings = self.tool.video_settings()
+ self.checkList = list()
+
+ def DumpStoredData(self, nfid):
+ if nfid:
+ return
+ name = "NETFLIX-{}.json".format(nfid)
+ nfid_json = os.path.join(self.config["jsonpath"], name)
+ with open(nfid_json, "w", encoding="utf-8") as file_:
+ file_.write(json.dumps(self.logdata, indent=4))
+ file_.flush()
+ file_.close()
+
+ def store(self, data, keyword):
+ self.logdata.update({keyword: data})
+ return
+
+ def get_build(self, cookies): #
+ BUILD_REGEX = r'"BUILD_IDENTIFIER":"([a-z0-9]+)"'
+
+ session = requests.Session()
+ session.headers = {
+ "Connection": "keep-alive",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
+ "Sec-Fetch-Site": "none",
+ "Sec-Fetch-Mode": "navigate",
+ "Sec-Fetch-Dest": "document",
+ "Accept-Language": "en,en-US;q=0.9",
+ }
+
+ r = session.get("https://www.netflix.com/browse", cookies=cookies)
+
+ if not re.search(BUILD_REGEX, r.text):
+ print(
+ "cannot get BUILD_IDENTIFIER from the cookies you saved from the browser..."
+ )
+ sys.exit()
+
+ return re.search(BUILD_REGEX, r.text).group(1)
+
+ def save(self, cookies, build): #
+ cookie_data = {}
+ for name, value in cookies.items():
+ cookie_data[name] = [value, 0]
+ logindata = {"BUILD_IDENTIFIER": build, "cookies": cookie_data}
+ with open(self.config["cookies_file"], "w", encoding="utf8") as f:
+ f.write(json.dumps(logindata, indent=4))
+ f.close()
+ os.remove(self.config["cookies_txt"])
+
+ def read_userdata(self): #
+ cookies = None
+ build = None
+
+ if not os.path.isfile(self.config["cookies_file"]):
+ try:
+ cj = MozillaCookieJar(self.config["cookies_txt"])
+ cj.load()
+ except Exception:
+ print("invalid netscape format cookies file")
+ sys.exit()
+
+ cookies = dict()
+
+ for cookie in cj:
+ cookies[cookie.name] = cookie.value
+
+ build = self.get_build(cookies)
+ self.save(cookies, build)
+
+ with open(self.config["cookies_file"], "rb") as f:
+ content = f.read().decode("utf-8")
+
+ if "NetflixId" not in content:
+ self.logger.warning("(Some) cookies expired, renew...")
+ return cookies, build
+
+ jso = json.loads(content)
+ build = jso["BUILD_IDENTIFIER"]
+ cookies = jso["cookies"]
+ for cookie in cookies:
+ cookie_data = cookies[cookie]
+ value = cookie_data[0]
+ if cookie != "flwssn":
+ cookies[cookie] = value
+ if cookies.get("flwssn"):
+ del cookies["flwssn"]
+
+ return cookies, build
+
+ def shakti_api(self, nfid): #
+ url = f"https://www.netflix.com/api/shakti/{self.build}/metadata"
+ headers = {
+ "Accept": "*/*",
+ "Accept-Encoding": "gzip, deflate, br",
+ "Accept-Language": "es,ca;q=0.9,en;q=0.8",
+ "Cache-Control": "no-cache",
+ "Connection": "keep-alive",
+ "Host": "www.netflix.com",
+ "Pragma": "no-cache",
+ "Sec-Fetch-Mode": "cors",
+ "Sec-Fetch-Site": "same-origin",
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36",
+ "X-Netflix.browserName": "Chrome",
+ "X-Netflix.browserVersion": "79",
+ "X-Netflix.clientType": "akira",
+ "X-Netflix.esnPrefix": "NFCDCH-02-",
+ "X-Netflix.osFullName": "Windows 10",
+ "X-Netflix.osName": "Windows",
+ "X-Netflix.osVersion": "10.0",
+ "X-Netflix.playerThroughput": "1706",
+ "X-Netflix.uiVersion": self.build,
+ }
+
+ params = {
+ "movieid": nfid,
+ "drmSystem": "widevine",
+ "isWatchlistEnabled": "false",
+ "isShortformEnabled": "false",
+ "isVolatileBillboardsEnabled": "false",
+ "languages": self.config["metada_language"],
+ }
+
+ while True:
+ resp = requests.get(
+ url=url, headers=headers, params=params, cookies=self.cookies
+ )
+
+ if resp.status_code == 401:
+ self.logger.warning("401 Unauthorized, cookies is invalid.")
+ elif resp.text.strip() == "":
+ self.logger.error("title is not available in your Netflix region.")
+ exit(-1)
+
+ try:
+ t = resp.json()["video"]["type"]
+ return resp.json()
+ except Exception:
+ os.remove(self.config["cookies_file"])
+ self.logger.warning(
+ "Error getting metadata: Cookies expired\nplease fetch new cookies.txt"
+ )
+ exit(-1)
+
+ def Search(self, query):
+ session = requests.Session()
+ session.headers = {
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0"
+ }
+ # select profile
+ '''profiles = list()
+ resp = session.get("https://www.netflix.com/browse", cookies=self.cookies)
+ bs = BeautifulSoup(resp.text, "html.parser")
+ profiles_ = bs.find_all("a", {"class": "profile-link"})
+
+ for profile in profiles_:
+ profiles.append(
+ (profile.find("span", {"class": "profile-name"}).text, profile["href"])
+ )
+
+ if profiles == []:
+ self.logger.warning(
+ "Cannot select user profile, maybe cookies is invalid or the account has no profies."
+ )
+ return None
+
+ # request page with the profile
+ session.get("https://www.netflix.com" + profiles[0][1], cookies=self.cookies)'''
+ # search for title
+ resp = session.get(
+ "https://www.netflix.com/search?q=" + query, cookies=self.cookies
+ )
+
+ if not resp.status_code == 200:
+ self.logger.error("error searching, maybe invalid cookies.")
+ return None
+
+ # add all search itmes
+ itmes = []
+ bs = BeautifulSoup(resp.text, "html.parser")
+ titles = bs.find_all("div", {"class": "title-card-container"})
+
+ for title in titles:
+ itmes.append(
+ {
+ "name": title.find(
+ "div", {"class": "fallback-text-container"}
+ ).text,
+ "id": title.find("a", href=True)["href"]
+ .split("?")[0]
+ .split("/")[2],
+ }
+ )
+
+ if itmes == []:
+ self.logger.error(
+ f'Your search for "{query}" did not have any matches, try different keywords.'
+ )
+ return None
+
+ # usually first item is the right items
+ self.logger.info("Founded: {} items".format(str(len(itmes))))
+ self.logger.info("id: {} - name: {}".format(itmes[0]["id"], itmes[0]["name"]))
+ isRightItem = input("if this what you looking: Enter yes or no: ").strip()
+ if isRightItem.lower() == "y" or isRightItem.lower() == "yes":
+ return int(itmes[0]["id"])
+
+ # first item is wrong
+
+ self.logger.info("The available items is: ")
+ for idx, item in enumerate(itmes, start=1):
+ self.logger.info(
+ "[{}] - id: {} - name: {}".format(idx, item["id"], item["name"])
+ )
+
+ item_number = input("\nChoose item number: ").strip()
+ if item_number.isdigit():
+ item = itmes[item_number - 1]["id"]
+ return int(item)
+
+ return None
+
+ def get_nfid(self, content_id): #
+ if content_id.isdigit():
+ return int(content_id)
+
+ validUrl = re.compile(
+ r'https?://(?:www\.)?netflix\.com/(\w+)?/?(?:title|watch|browse?jbv=)/?(?P\d+)'
+ )
+
+ nfID = validUrl.match(content_id)
+
+ if nfID:
+ return int(nfID.group('id'))
+
+ else:
+ nfID = re.search(r'[0-9]{8}$', content_id)
+
+ if nfID:
+ return int(nfID[0])
+
+ else:
+ self.logger.error('Detection of NF ID from the given url: Failed.')
+ sys.exit()
+
+ def CleanSubtitleVTT(self, file_content):
+ file_content = re.sub(r"{.*?}", "", file_content)
+ file_content = re.sub(
+ r"(.*\bposition:50.00%.*\bline:10.00%)\s*(.*)",
+ r"\1\n{\\an8}\2",
+ file_content,
+ )
+
+ file_content = re.sub(r"", "\u202B", file_content)
+ file_content = re.sub(r"", "\u202A", file_content)
+ file_content = re.sub(r"&", "&", file_content)
+ file_content = re.sub(r"([\d]+)\.([\d]+)", r"\1,\2", file_content)
+ file_content = re.sub(r"WEBVTT\n\n", "", file_content)
+ file_content = re.sub(r"NOTE.*\n", "", file_content)
+ file_content = re.sub(r"\n\s+\n", "", file_content)
+ file_content = re.sub(r" position:.+%", "", file_content)
+ file_content = re.sub(r"?c.+?>", "", file_content)
+ return file_content
+
+ def downloadFile2(self, url, file_name):
+ with open(file_name, "wb") as f:
+ response = requests.get(url, stream=True)
+ #response.encoding = 'UTF-8'
+ f.write(response.content)
+
+ return
+
+ def downloadFile(self, url, file_name, silent=False):
+ self.logger.info("\n" + file_name)
+
+ if self.args.noaria2c:
+ self.ripprocess.tqdm_downloader(url, file_name)
+ return
+
+ options = self.aria2.aria2Options(
+ allow_overwrite=True,
+ quiet=silent,
+ file_allocation=None,
+ auto_file_renaming=False,
+ async_dns="skip",
+ retry_wait=5,
+ summary_interval=0,
+ enable_color=True,
+ connection=16,
+ concurrent_downloads=16,
+ split=16,
+ uri_selector="inorder",
+ console_log_level="warn",
+ download_result="hide",
+ extra_commands=[]
+ if self.args.no_download_proxy
+ else self.commands["aria2c_extra_commands"],
+ )
+
+ self.aria2.aria2DownloadUrl(
+ url=url, output=file_name, options=options, debug=False, moded=False
+ )
+
+ return
+
+ def GetKeys(self, IDNet, profilename):
+ video_keys = []
+ available_profiles = [
+ "High KEYS",
+ "HEVC KEYS",
+ "HDR-10 KEYS",
+ "Main KEYS"
+ ]
+
+ if not profilename in available_profiles:
+ self.logger.error("Error: Unknown profile: {}".format(profilename))
+ sys.exit(1)
+
+ try:
+ video_keys = get_keys.GettingKEYS_Netflixv2(IDNet, profilename)
+ if not video_keys == []:
+ video_keys = list(set(video_keys))
+ video_keys = [profilename] + video_keys
+ self.logger.info("Done!")
+ else:
+ self.logger.error("Error!")
+ except Exception as e:
+ self.logger.error("Error!: {}".format(e))
+
+ return video_keys
+
+ def GetAudioCocedName(self, audioList):
+ codecs = {
+ "ddplus-atmos-dash": "DDP5.1.Atmos",
+ "ddplus-5.1hq-dash": "DDP5.1",
+ "ddplus-5.1-dash": "DDP5.1",
+ "dd-5.1-dash": "DD5.1",
+ "ddplus-2.0-dash": "DDP2.0",
+ "heaac-5.1hq-dash": "AAC5.1",
+ "heaac-5.1-dash": "AAC5.1",
+ "heaac-2-dash": "AAC2.0",
+ "heaac-2hq-dash": "AAC2.0",
+ "playready-oggvorbis-2-dash": "OGG2.0",
+ }
+
+ profiles = [x["Profile"] for x in audioList]
+ if not profiles == []:
+ for profile in profiles:
+ try:
+ return codecs[profile]
+ except KeyError:
+ pass
+
+ return "DDP5.1"
+
+ def RemuxVideo(self, outputVideoTemp, outputVideo, Name):
+ self.logger.info("\nRemuxing video...")
+ ff = ffmpy.FFmpeg(
+ executable=self.bin["ffmpeg"],
+ inputs={outputVideoTemp: None},
+ outputs={outputVideo: "-c copy"},
+ global_options="-y -hide_banner -loglevel warning",
+ )
+
+ ff.run()
+ time.sleep(50.0 / 1000.0)
+ os.remove(outputVideoTemp)
+ self.logger.info("Done!")
+ return True
+
+ def DecryptVideo_withtxtkeys(self, inputVideo, outputVideoTemp, outputVideo, kid, Name):
+ with open(self.config["keys_file"] + "NETFLIX.keys", "r") as keys_file_netflix:
+ keys_video = keys_file_netflix.readlines()
+
+ keys_video = [x.strip() for x in keys_video if ":" in x]
+ if not keys_video == []:
+ for key in keys_video:
+ if key[0:32] == kid:
+ self.logger.info("\nDecrypting video...")
+ self.logger.info("Using KEY: " + key)
+ subprocess.call(
+ [
+ self.bin["mp4decrypt"],
+ "--show-progress",
+ "--key",
+ key,
+ inputVideo,
+ outputVideoTemp,
+ ]
+ )
+ self.RemuxVideo(outputVideoTemp, outputVideo, Name)
+ return True
+ self.logger.warning("\nKEY for " + inputVideo + " is not in txt.")
+ return False
+
+ def DecryptVideo(self, inputVideo, outputVideoTemp, outputVideo, IDNet, Name, Profile, silent=False):
+ KID = self.keysaver.generate_kid(inputVideo)
+ KEYS = self.keysaver.get_key_by_kid(KID)
+
+ if KEYS == []:
+ self.logger.info("\nKEY for {} not saved before.".format(inputVideo))
+ self.logger.info("\nGetting Video KEYS...")
+
+ if self.args.video_high:
+ KEYS = self.GetKeys(IDNet, "High KEYS")
+ else:
+ if self.args.hevc:
+ KEYS = self.GetKeys(IDNet, "HEVC KEYS")
+ else:
+ if self.args.hdr:
+ KEYS = self.GetKeys(IDNet, "HDR-10 KEYS")
+ else:
+ if "playready-h264hpl" in Profile:
+ KEYS = self.GetKeys(IDNet, "High KEYS")
+ else:
+ KEYS = self.GetKeys(IDNet, "Main KEYS")
+ # ~
+ if KEYS == []:
+ return False
+
+ KEYS = self.keysaver.dump_keys(
+ keys=[key for key in KEYS if ":" in key], pssh=None, name=Name
+ )
+
+ only1key = [x for x in KEYS if x["KID"] == KID]
+ if not only1key == []:
+ KEYS = only1key
+
+ self.ripprocess.mp4_decrypt(
+ encrypted=inputVideo,
+ decrypted=outputVideoTemp,
+ keys=KEYS,
+ moded_decrypter=True,
+ no_kid=False,
+ silent=silent,
+ )
+
+ if not "NETFLIX".lower() in list(
+ map(lambda x: x.lower(), self.video_settings["skip_video_demux"])
+ ):
+ self.ripprocess.DemuxVideo(
+ outputVideoTemp=outputVideoTemp,
+ outputVideo=outputVideo,
+ ffmpeg=True,
+ mp4box=False,
+ )
+ else:
+ os.rename(outputVideoTemp, outputVideo)
+
+ return True
+
+ def SubtitleThreader(self, subtitlesList, name):
+ for z in subtitlesList:
+ if str(dict(z)["isForced"]) == "YES":
+ langAbbrev = "forced-" + str(dict(z)["langAbbrev"])
+ elif str(dict(z)["isForced"]) == "SDH":
+ langAbbrev = "sdh-" + str(dict(z)["langAbbrev"])
+ else:
+ langAbbrev = str(dict(z)["langAbbrev"])
+
+ ext = "dfxp" if str(dict(z)["Profile"]) == "dfxp-ls-sdh" else "vtt"
+ inputSubtitleDFXP = f"{name} {langAbbrev}.{ext}"
+ inputSubtitleSrt = f"{name} {langAbbrev}.srt"
+ if os.path.isfile(inputSubtitleDFXP) or os.path.isfile(inputSubtitleSrt):
+ pass
+ else:
+ self.downloadFile2(str(dict(z)["Url"]), inputSubtitleDFXP)
+
+ dfxp = glob.glob(name + "*.dfxp")
+ vtt = glob.glob(name + "*.vtt")
+ if not dfxp == []:
+ for f in dfxp:
+ self.dfxp_to_srt.convert(f, f.replace(".dfxp", ".srt"))
+ os.remove(f)
+
+ if not vtt == []:
+ for f in vtt:
+ with open(f, "r+", encoding="utf-8") as x:
+ old = x.read()
+ with open(f.replace(".vtt", ".srt"), "w+", encoding="utf-8") as x:
+ x.write(self.CleanSubtitleVTT(old))
+ os.remove(f)
+
+ def downloadItem(self, item):
+
+ TitleName = item["TitleName"]
+ FolderName = item["FolderName"]
+
+ try:
+ CurrentHeigh = str(item["video"]["Height"])
+ CurrentWidth = str(item["video"]["Width"])
+ except Exception:
+ CurrentHeigh = "None"
+ CurrentWidth = "None"
+
+ if not self.args.nosubs:
+ SubsThread = Thread(
+ target=self.SubtitleThreader,
+ args=(item["subtitle"] + item["forced"], TitleName,),
+ )
+ SubsThread.start()
+ self.logger.info("\nSubtitle Thread download started.")
+
+ if not self.args.novideo:
+ self.logger.info("\nDownloading video...")
+ if self.args.hevc:
+ inputVideo = f"{TitleName} [{CurrentHeigh}p] [HEVC].mp4"
+ outputVideoTemp = (
+ f"{TitleName} [{CurrentHeigh}p] [HEVC]_DecryptTemp.mp4"
+ )
+ inputVideo_demuxed = f"{TitleName} [{CurrentHeigh}p] [HEVC]_Demuxed.mp4"
+ elif self.args.hdr:
+ inputVideo = f"{TitleName} [{CurrentHeigh}p] [HDR].mp4"
+ outputVideoTemp = f"{TitleName} [{CurrentHeigh}p] [HDR]_DecryptTemp.mp4"
+ inputVideo_demuxed = f"{TitleName} [{CurrentHeigh}p] [HDR]_Demuxed.mp4"
+ else:
+ if "playready-h264hpl" in str(
+ item["video"]["Profile"]
+ ) or "playready-h264shpl" in str(item["video"]["Profile"]):
+ inputVideo = f"{TitleName} [{CurrentHeigh}p] [HIGH].mp4"
+ outputVideoTemp = (
+ f"{TitleName} [{CurrentHeigh}p] [HIGH]_DecryptTemp.mp4"
+ )
+ inputVideo_demuxed = (
+ f"{TitleName} [{CurrentHeigh}p] [HIGH]_Demuxed.mp4"
+ )
+ else:
+ inputVideo = f"{TitleName} [{CurrentHeigh}p].mp4"
+ outputVideoTemp = f"{TitleName} [{CurrentHeigh}p]_DecryptTemp.mp4"
+ inputVideo_demuxed = f"{TitleName} [{CurrentHeigh}p]_Demuxed.mp4"
+
+ if (
+ os.path.isfile(inputVideo)
+ and not os.path.isfile(inputVideo + ".aria2")
+ or os.path.isfile(inputVideo_demuxed)
+ ):
+ self.logger.info(
+ "\n"
+ + inputVideo
+ + "\nFile has already been successfully downloaded previously."
+ )
+ else:
+ self.downloadFile(item["video"]["Url"], inputVideo)
+
+ #################################################################################
+
+ if not self.args.noaudio:
+ self.logger.info("\nDownloading audio...")
+ for audio in item["audio"]:
+ langAbbrev = dict(audio)["Language"]
+ inputAudio = f"{TitleName} {langAbbrev}-audio.mp4"
+ inputAudio2 = f"{TitleName} {langAbbrev}.ac3"
+ inputAudio3 = f"{TitleName} {langAbbrev}.eac3"
+ inputAudio4 = f"{TitleName} {langAbbrev}.m4a"
+ inputAudio5 = f"{TitleName} {langAbbrev}.oga"
+ if (
+ os.path.isfile(inputAudio)
+ and not os.path.isfile(inputAudio + ".aria2")
+ or os.path.isfile(inputAudio2)
+ or os.path.isfile(inputAudio3)
+ or os.path.isfile(inputAudio4)
+ or os.path.isfile(inputAudio5)
+ ):
+ self.logger.info(
+ "\n"
+ + inputAudio
+ + "\nFile has already been successfully downloaded previously."
+ )
+ else:
+ self.downloadFile(str(dict(audio)["Url"]), inputAudio)
+
+ #################################################################################
+
+ IDNet = item["NetflixID"]
+ self.CorrectDecryptVideo = False
+
+ if not self.args.novideo:
+ if not os.path.isfile(inputVideo_demuxed):
+ self.CorrectDecryptVideo = self.DecryptVideo(
+ inputVideo=inputVideo,
+ outputVideoTemp=outputVideoTemp,
+ outputVideo=inputVideo_demuxed,
+ IDNet=IDNet,
+ Name=TitleName,
+ Profile=str(item["video"]["Profile"]),
+ )
+ else:
+ self.CorrectDecryptVideo = True
+
+ if not self.args.noaudio:
+ for audio in item["audio"]:
+ langAbbrev = dict(audio)["Language"]
+ inputAudio = f"{TitleName} {langAbbrev}-audio.mp4"
+ inputAudio2 = f"{TitleName} {langAbbrev}.ac3"
+ inputAudio3 = f"{TitleName} {langAbbrev}.eac3"
+ inputAudio4 = f"{TitleName} {langAbbrev}.m4a"
+ inputAudio5 = f"{TitleName} {langAbbrev}.oga"
+ if (
+ os.path.isfile(inputAudio2)
+ or os.path.isfile(inputAudio3)
+ or os.path.isfile(inputAudio4)
+ or os.path.isfile(inputAudio5)
+ ):
+ pass
+ else:
+ self.ripprocess.DemuxAudio(inputAudio, "-audio.mp4")
+
+ #################################################################################
+
+ if not self.args.nosubs:
+ SubsThread.join()
+
+ muxedFile = None
+
+ if (
+ not self.args.novideo
+ and not self.args.noaudio
+ and self.CorrectDecryptVideo is True
+ ):
+ mkvmuxer = Muxer(
+ CurrentName=TitleName,
+ SeasonFolder=FolderName,
+ CurrentHeigh=CurrentHeigh,
+ CurrentWidth=CurrentWidth,
+ mkvmerge=self.bin["mkvmerge"],
+ Source=self.source_tag,
+ group=self.commands["group"],
+ )
+ muxedFile = mkvmuxer.startMux()
+
+ if not self.args.keep:
+ self.ripprocess.do_clean(
+ TitleName, exclude=self.args.clean_exclude, added=self.args.clean_add
+ )
+
+ self.store(item, "item_info")
+ self.DumpStoredData(item["NetflixID"])
+ self.logger.info("Done!")
+
+ return
+
+ def getItem(self, NetflixID, TitleName, FolderName):
+
+ self.FilesInFolder = []
+ if FolderName:
+ GlobFiles = glob.glob(f"{FolderName}/*.*", recursive=True)
+ if not GlobFiles == []:
+ for files in GlobFiles:
+ self.FilesInFolder.append(os.path.basename(files))
+
+ if self.args.license:
+ KEYS = []
+
+ self.logger.info("\nGetting KEYS...")
+
+ if self.args.hevc:
+ KEYS += self.GetKeys(NetflixID, "HEVC KEYS")
+
+ elif self.args.hdr:
+ KEYS += self.GetKeys(NetflixID, "HDR-10 KEYS")
+
+ else:
+ for profile in ["Main KEYS", "High KEYS"]:
+ KEYS += self.GetKeys(NetflixID, profile)
+
+ self.logger.info("\n" + TitleName + "\n")
+ self.logger.info("\n".join(KEYS))
+ KEYS = [x for x in KEYS if ":" in x]
+ if not KEYS == []:
+ KEYS = self.keysaver.dump_keys(keys=KEYS, pssh=None, name=TitleName)
+ return
+
+ VideoList, AudioList, SubtitleList, ForcedList, checkerinfo = get_manifest(
+ self.args, NetflixID
+ ).LoadManifest()
+
+ if self.args.check:
+ itemdata = [
+ {
+ 'title': re.search(r'S\d+E\d+', TitleName)[0]
+ if self.netflixType == 'show'
+ else TitleName,
+ 'checkinfo': checkerinfo,
+ 'videolist': VideoList
+ }
+ ]
+ self.checkList.extend(itemdata)
+ return
+
+ if not self.args.novideo:
+ self.logger.info(checkerinfo)
+ self.logger.info(
+ "VIDEO - Bitrate: {}kbps | Profile: {} | Size: {} | Fps: {} | Vmaf: {} | Drm: {} | Resolution: {}x{}".format(
+ str(dict(VideoList[-1])["Bitrate"]),
+ str(dict(VideoList[-1])["Profile"]),
+ str(dict(VideoList[-1])["Size"]),
+ str(dict(VideoList[-1])["FrameRate"]),
+ str(dict(VideoList[-1])["vmaf"]),
+ dict(VideoList[-1])["Drm"],
+ str(dict(VideoList[-1])["Width"]),
+ str(dict(VideoList[-1])["Height"]),
+ )
+ )
+
+ if not self.args.noaudio:
+ self.logger.info("\n")
+ for Audio in AudioList:
+ self.logger.info(
+ "AUDIO - Bitrate: {}kbps | Profile: {} | Size: {} | Original: {} | Drm: {} | Channels: {}ch | Language: {}".format(
+ str(dict(Audio)["Bitrate"]),
+ str(dict(Audio)["Profile"]),
+ str(dict(Audio)["Size"]),
+ str(dict(Audio)["Original"]),
+ dict(Audio)["Drm"],
+ str(dict(Audio)["channels"]),
+ str(dict(Audio)["Language"]),
+ )
+ )
+
+ if not self.args.nosubs:
+ self.logger.info("\n")
+ for Subtitle in SubtitleList + ForcedList:
+ self.logger.info(
+ "SUBTITLE - Profile: {} | Type: {} | isForced: {} | Language: {}".format(
+ str(dict(Subtitle)["Profile"]),
+ str(dict(Subtitle)["rawTrackType"]),
+ str(dict(Subtitle)["isForced"]),
+ str(dict(Subtitle)["Language"]),
+ )
+ )
+
+ self.logger.info(f"\n{TitleName}\n")
+
+ downloaddict = {
+ "NetflixID": NetflixID,
+ "TitleName": TitleName,
+ "FolderName": FolderName,
+ "video": VideoList[-1] if not VideoList == [] else VideoList,
+ "audio": AudioList,
+ "subtitle": SubtitleList,
+ "forced": ForcedList,
+ }
+
+ self.logger.debug("downloaddict: {}".format(downloaddict))
+
+ if not self.args.prompt:
+ choice = "y"
+ else:
+ choice = input("\nDoes this look right? Answer yes to download. (y/n): ")
+
+ if choice.lower() == "y" or choice.lower() == "yes":
+ self.downloadItem(downloaddict)
+ elif choice.lower() == "n" or choice.lower() == "no":
+ self.logger.info("Quitting...")
+
+ return
+
+ def main_netflix(self):
+ self.cookies, self.build = self.read_userdata()
+ self.nfID = None
+ if self.args.content:
+ self.nfID = self.get_nfid(self.args.content)
+ if not self.nfID:
+ self.logger.error(
+ "Cannot detect netflix id: {}".format(self.args.content)
+ )
+ exit(-1)
+ elif self.args.search:
+ self.logger.info("\nSearching NetFlix For: {}".format(self.args.search))
+ SearchItem = self.Search(str(self.args.search))
+ if not SearchItem:
+ self.logger.error("Search Failed: {}".format(self.args.search))
+ exit(-1)
+
+ self.nfID = int(SearchItem)
+ else:
+ self.nfID = self.get_nfid(
+ input("Netflix viewable ID / watch URL: ").strip()
+ )
+
+ self.logger.info("Getting Metadata...")
+ data = self.shakti_api(str(self.nfID))
+ self.logger.debug("Metadata: {}".format(data))
+
+ if data["video"]["type"] == "movie":
+ self.netflixType = "movie"
+ else:
+ if data["video"]["type"] == "show":
+ self.netflixType = "show"
+ else:
+ if data["video"]["type"] == "supplemental":
+ self.netflixType = "supplemental"
+ else:
+ self.logger.info(data["video"]["type"] + " is a unrecognized type!")
+ sys.exit(0)
+
+ ######################################
+ if self.args.output:
+ dl_location = self.args.output
+ if not os.path.exists(dl_location):
+ os.makedirs(dl_location)
+ else:
+ try:
+ temp_download = "{}/{}".format(
+ tool().paths()["DL_FOLDER"], "downloads/netflix"
+ )
+ if not os.path.exists(temp_download):
+ os.makedirs(temp_download)
+ dl_location = temp_download
+ except Exception:
+ temp_download = "downloads/netflix"
+ if not os.path.exists(temp_download):
+ os.makedirs(temp_download)
+ dl_location = temp_download
+
+ os.chdir(dl_location)
+ ######################################
+
+ self.items = []
+ isAEpisode = False
+
+ if self.netflixType == "movie" or self.netflixType == "supplemental":
+ mainTitle = "{} {}".format(
+ self.ripprocess.RemoveCharcters(data["video"]["title"]),
+ self.ripprocess.RemoveCharcters(str(data["video"]["year"])),
+ )
+ else:
+ mainTitle = self.ripprocess.RemoveCharcters(data["video"]["title"])
+
+ try:
+ if (
+ str(data["video"]["currentEpisode"]) == str(self.nfID)
+ and self.netflixType == "show"
+ ):
+ isAEpisode = True
+ except Exception:
+ pass
+
+ if self.netflixType == "movie" or self.netflixType == "supplemental":
+ self.getItem(
+ self.nfID,
+ self.args.titlecustom[0] if self.args.titlecustom else mainTitle,
+ None,
+ )
+
+ elif self.netflixType == "show":
+ if isAEpisode:
+ self.logger.info("\nID or URL belongs to episode...")
+ for season in data["video"]["seasons"]:
+ for episode in season["episodes"]:
+ if int(episode["id"]) == int(self.nfID):
+ self.items.append(
+ {
+ "TitleName": "{} S{}E{} {}".format(
+ self.args.titlecustom[0]
+ if self.args.titlecustom
+ else mainTitle,
+ str(season["seq"]).zfill(2),
+ str(episode["seq"]).zfill(2),
+ self.ripprocess.RemoveCharcters(
+ episode["title"]
+ ),
+ ),
+ "FolderName": "{} S{}".format(
+ self.args.titlecustom[0]
+ if self.args.titlecustom
+ else mainTitle,
+ str(season["seq"]).zfill(2),
+ ),
+ "NetflixID": episode["episodeId"],
+ }
+ )
+ else:
+ seasonMatchNumber = (
+ str(self.args.season).lstrip("0")
+ if self.args.season
+ else str(input("ENTER Season Number: ").strip()).lstrip("0")
+ )
+
+ AllowedEpisodesNumbers = (
+ self.EpisodesNumbersHandler.sortNumbers(
+ str(self.args.episodeStart).lstrip("0")
+ )
+ if self.args.episodeStart
+ else self.EpisodesNumbersHandler.sortNumbers("~")
+ )
+
+ for season in data["video"]["seasons"]:
+ if int(season["seq"]) == int(seasonMatchNumber):
+ for episode in season["episodes"]:
+ if int(episode["seq"]) in AllowedEpisodesNumbers:
+ self.items.append(
+ {
+ "TitleName": "{} S{}E{} {}".format(
+ self.args.titlecustom[0]
+ if self.args.titlecustom
+ else mainTitle,
+ str(season["seq"]).zfill(2),
+ str(episode["seq"]).zfill(2),
+ self.ripprocess.RemoveCharcters(
+ episode["title"]
+ ),
+ ),
+ "FolderName": "{} S{}".format(
+ self.args.titlecustom[0]
+ if self.args.titlecustom
+ else mainTitle,
+ str(season["seq"]).zfill(2),
+ ),
+ "NetflixID": episode["episodeId"],
+ }
+ )
+
+ self.logger.info("\nTotal items will be downloaded: {}".format(len(self.items)))
+ for idx, epsiode in enumerate(self.items, start=1):
+ self.logger.info(
+ "downloading: {} of {}".format(
+ str(idx).zfill(2), str(len(self.items)).zfill(2)
+ )
+ )
+ self.getItem(
+ epsiode["NetflixID"],
+ self.ripprocess.RemoveCharcters(epsiode["TitleName"]),
+ epsiode["FolderName"],
+ )
+
+ if self.args.check:
+ self.logger.info('\nCheck Result')
+ for item in self.checkList:
+ if "MAIN is Better" in item['checkinfo']:
+ self.logger.info(item['title'] + ' : MAIN')
+ else:
+ L3 = str(dict(item['videolist'][-1])["L3"])
+ self.logger.info(item['title'] + ' : HIGH ' + L3)
\ No newline at end of file
diff --git a/utils/__init__.py b/utils/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/utils/__pycache__/__init__.cpython-36.pyc b/utils/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..f9542fd
Binary files /dev/null and b/utils/__pycache__/__init__.cpython-36.pyc differ
diff --git a/utils/__pycache__/__init__.cpython-39.pyc b/utils/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..a3323c7
Binary files /dev/null and b/utils/__pycache__/__init__.cpython-39.pyc differ
diff --git a/utils/modules/kanji_to_romaji/__init__.py b/utils/modules/kanji_to_romaji/__init__.py
new file mode 100644
index 0000000..43c8f6c
--- /dev/null
+++ b/utils/modules/kanji_to_romaji/__init__.py
@@ -0,0 +1,5 @@
+from .kanji_to_romaji_module import convert_hiragana_to_katakana, translate_to_romaji, translate_soukon, \
+ translate_long_vowel, translate_soukon_ch, kanji_to_romaji
+__all__ = ["load_mappings_dict", "convert_hiragana_to_katakana", "convert_katakana_to_hiragana",
+ "translate_to_romaji", "translate_soukon",
+ "translate_long_vowel", "translate_soukon_ch", "kanji_to_romaji"]
diff --git a/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-36.pyc b/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-36.pyc
new file mode 100644
index 0000000..261c1b2
Binary files /dev/null and b/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-36.pyc differ
diff --git a/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-37.pyc b/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..d342899
Binary files /dev/null and b/utils/modules/kanji_to_romaji/__pycache__/__init__.cpython-37.pyc differ
diff --git a/utils/modules/kanji_to_romaji/__pycache__/desktop.ini b/utils/modules/kanji_to_romaji/__pycache__/desktop.ini
new file mode 100644
index 0000000..8b35761
Binary files /dev/null and b/utils/modules/kanji_to_romaji/__pycache__/desktop.ini differ
diff --git a/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-36.pyc b/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-36.pyc
new file mode 100644
index 0000000..d852324
Binary files /dev/null and b/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-36.pyc differ
diff --git a/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-37.pyc b/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-37.pyc
new file mode 100644
index 0000000..b7b21f2
Binary files /dev/null and b/utils/modules/kanji_to_romaji/__pycache__/kanji_to_romaji_module.cpython-37.pyc differ
diff --git a/utils/modules/kanji_to_romaji/desktop.ini b/utils/modules/kanji_to_romaji/desktop.ini
new file mode 100644
index 0000000..8b35761
Binary files /dev/null and b/utils/modules/kanji_to_romaji/desktop.ini differ
diff --git a/utils/modules/kanji_to_romaji/jp_mappings/conjugated_godan_kanji.json b/utils/modules/kanji_to_romaji/jp_mappings/conjugated_godan_kanji.json
new file mode 100644
index 0000000..03c81df
--- /dev/null
+++ b/utils/modules/kanji_to_romaji/jp_mappings/conjugated_godan_kanji.json
@@ -0,0 +1,174698 @@
+{
+ "削り落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kezuriotosa"
+ },
+ "削り落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "kezuriotoshi"
+ },
+ "削り落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kezuriotose"
+ },
+ "削り落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kezuriotoso"
+ },
+ "削り落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kezuriotoshita"
+ },
+ "削り落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kezuriotoshite"
+ },
+ "遣り過さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yarisugosa"
+ },
+ "遣り過し": {
+ "w_type": "godan verb stem",
+ "romaji": "yarisugoshi"
+ },
+ "遣り過せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarisugose"
+ },
+ "遣り過そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yarisugoso"
+ },
+ "遣り過した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarisugoshita"
+ },
+ "遣り過して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarisugoshite"
+ },
+ "転げ回ら": {
+ "w_type": "godan verb stem",
+ "romaji": "korogemawara"
+ },
+ "転げ回り": {
+ "w_type": "godan verb stem",
+ "romaji": "korogemawari"
+ },
+ "転げ回れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korogemaware"
+ },
+ "転げ回ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "korogemawaro"
+ },
+ "転げ回った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korogemawatta"
+ },
+ "転げ回って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korogemawatte"
+ },
+ "のけ反ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nokezora"
+ },
+ "のけ反り": {
+ "w_type": "godan verb stem",
+ "romaji": "nokezori"
+ },
+ "のけ反れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nokezore"
+ },
+ "のけ反ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nokezoro"
+ },
+ "のけ反った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nokezotta"
+ },
+ "のけ反って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nokezotte"
+ },
+ "踏みつぶさ": {
+ "w_type": "godan verb stem",
+ "romaji": "fumitsubusa"
+ },
+ "踏みつぶし": {
+ "w_type": "godan verb stem",
+ "romaji": "fumitsubushi"
+ },
+ "踏みつぶせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumitsubuse"
+ },
+ "踏みつぶそ": {
+ "w_type": "godan verb stem",
+ "romaji": "fumitsubuso"
+ },
+ "踏みつぶした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumitsubushita"
+ },
+ "踏みつぶして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumitsubushite"
+ },
+ "竦み上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "sukumiagara"
+ },
+ "竦み上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "sukumiagari"
+ },
+ "竦み上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukumiagare"
+ },
+ "竦み上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukumiagaro"
+ },
+ "竦み上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukumiagatta"
+ },
+ "竦み上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukumiagatte"
+ },
+ "生えかわら": {
+ "w_type": "godan verb stem",
+ "romaji": "haekawara"
+ },
+ "生えかわり": {
+ "w_type": "godan verb stem",
+ "romaji": "haekawari"
+ },
+ "生えかわれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haekaware"
+ },
+ "生えかわろ": {
+ "w_type": "godan verb stem",
+ "romaji": "haekawaro"
+ },
+ "生えかわった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haekawatta"
+ },
+ "生えかわって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haekawatte"
+ },
+ "恃ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tanoma"
+ },
+ "恃み": {
+ "w_type": "godan verb stem",
+ "romaji": "tanomi"
+ },
+ "恃め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tanome"
+ },
+ "恃も": {
+ "w_type": "godan verb stem",
+ "romaji": "tanomo"
+ },
+ "恃んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tanonda"
+ },
+ "恃んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tanonde"
+ },
+ "刈取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "karitora"
+ },
+ "刈取り": {
+ "w_type": "godan verb stem",
+ "romaji": "karitori"
+ },
+ "刈取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karitore"
+ },
+ "刈取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "karitoro"
+ },
+ "刈取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karitotta"
+ },
+ "刈取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karitotte"
+ },
+ "燈さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tomosa"
+ },
+ "燈し": {
+ "w_type": "godan verb stem",
+ "romaji": "tomoshi"
+ },
+ "燈せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomose"
+ },
+ "燈そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tomoso"
+ },
+ "燈した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomoshita"
+ },
+ "燈して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomoshite"
+ },
+ "待ちあぐま": {
+ "w_type": "godan verb stem",
+ "romaji": "machiaguma"
+ },
+ "待ちあぐみ": {
+ "w_type": "godan verb stem",
+ "romaji": "machiagumi"
+ },
+ "待ちあぐめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "machiagume"
+ },
+ "待ちあぐも": {
+ "w_type": "godan verb stem",
+ "romaji": "machiagumo"
+ },
+ "待ちあぐんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "machiagunda"
+ },
+ "待ちあぐんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "machiagunde"
+ },
+ "現わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "arawasa"
+ },
+ "現わし": {
+ "w_type": "godan verb stem",
+ "romaji": "arawashi"
+ },
+ "現わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arawase"
+ },
+ "現わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "arawaso"
+ },
+ "現わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arawashita"
+ },
+ "現わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arawashite"
+ },
+ "降らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "furasa"
+ },
+ "降らし": {
+ "w_type": "godan verb stem",
+ "romaji": "furashi"
+ },
+ "降らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furase"
+ },
+ "降らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "furaso"
+ },
+ "降らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furashita"
+ },
+ "降らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furashite"
+ },
+ "屈ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kagama"
+ },
+ "屈み": {
+ "w_type": "godan verb stem",
+ "romaji": "kagami"
+ },
+ "屈め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagame"
+ },
+ "屈も": {
+ "w_type": "godan verb stem",
+ "romaji": "kagamo"
+ },
+ "屈んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaganda"
+ },
+ "屈んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagande"
+ },
+ "強請ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nedara"
+ },
+ "強請り": {
+ "w_type": "godan verb stem",
+ "romaji": "nedari"
+ },
+ "強請れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nedare"
+ },
+ "強請ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nedaro"
+ },
+ "強請った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nedatta"
+ },
+ "強請って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nedatte"
+ },
+ "爪繰ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumagura"
+ },
+ "爪繰り": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumaguri"
+ },
+ "爪繰れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumagure"
+ },
+ "爪繰ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumaguro"
+ },
+ "爪繰った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumagutta"
+ },
+ "爪繰って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumagutte"
+ },
+ "後じさら": {
+ "w_type": "godan verb stem",
+ "romaji": "atozusara"
+ },
+ "後じさり": {
+ "w_type": "godan verb stem",
+ "romaji": "atozusari"
+ },
+ "後じされ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atozusare"
+ },
+ "後じさろ": {
+ "w_type": "godan verb stem",
+ "romaji": "atozusaro"
+ },
+ "後じさった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atozusatta"
+ },
+ "後じさって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atozusatte"
+ },
+ "突き落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiotosa"
+ },
+ "突き落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiotoshi"
+ },
+ "突き落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiotose"
+ },
+ "突き落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiotoso"
+ },
+ "突き落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiotoshita"
+ },
+ "突き落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiotoshite"
+ },
+ "象ら": {
+ "w_type": "godan verb stem",
+ "romaji": "katadora"
+ },
+ "象り": {
+ "w_type": "godan verb stem",
+ "romaji": "katadori"
+ },
+ "象れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katadore"
+ },
+ "象ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "katadoro"
+ },
+ "象った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katadotta"
+ },
+ "象って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katadotte"
+ },
+ "貴ば": {
+ "w_type": "godan verb stem",
+ "romaji": "toutoba"
+ },
+ "貴び": {
+ "w_type": "godan verb stem",
+ "romaji": "toutobi"
+ },
+ "貴べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toutobe"
+ },
+ "貴ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "toutobo"
+ },
+ "貴んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toutonda"
+ },
+ "貴んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toutonde"
+ },
+ "解解さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tokihogusa"
+ },
+ "解解し": {
+ "w_type": "godan verb stem",
+ "romaji": "tokihogushi"
+ },
+ "解解せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokihoguse"
+ },
+ "解解そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tokihoguso"
+ },
+ "解解した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokihogushita"
+ },
+ "解解して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokihogushite"
+ },
+ "泣き頻ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikira"
+ },
+ "泣き頻り": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikiri"
+ },
+ "泣き頻れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikire"
+ },
+ "泣き頻ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikiro"
+ },
+ "泣き頻った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikitta"
+ },
+ "泣き頻って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikitte"
+ },
+ "荒らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "arasa"
+ },
+ "荒らし": {
+ "w_type": "godan verb stem",
+ "romaji": "arashi"
+ },
+ "荒らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arase"
+ },
+ "荒らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "araso"
+ },
+ "荒らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arashita"
+ },
+ "荒らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arashite"
+ },
+ "使いこま": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaikoma"
+ },
+ "使いこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaikomi"
+ },
+ "使いこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaikome"
+ },
+ "使いこも": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaikomo"
+ },
+ "使いこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaikonda"
+ },
+ "使いこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaikonde"
+ },
+ "与ら": {
+ "w_type": "godan verb stem",
+ "romaji": "azukara"
+ },
+ "与り": {
+ "w_type": "godan verb stem",
+ "romaji": "azukari"
+ },
+ "与れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "azukare"
+ },
+ "与ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "azukaro"
+ },
+ "与った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "azukatta"
+ },
+ "与って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "azukatte"
+ },
+ "橈ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tawama"
+ },
+ "橈み": {
+ "w_type": "godan verb stem",
+ "romaji": "tawami"
+ },
+ "橈め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tawame"
+ },
+ "橈も": {
+ "w_type": "godan verb stem",
+ "romaji": "tawamo"
+ },
+ "橈んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tawanda"
+ },
+ "橈んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tawande"
+ },
+ "切り拓か": {
+ "w_type": "godan verb stem",
+ "romaji": "kirihiraka"
+ },
+ "切り拓き": {
+ "w_type": "godan verb stem",
+ "romaji": "kirihiraki"
+ },
+ "切り拓け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirihirake"
+ },
+ "切り拓こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirihirako"
+ },
+ "切り拓いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirihiraita"
+ },
+ "切り拓いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirihiraite"
+ },
+ "放ったらかさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hottarakasa"
+ },
+ "放ったらかし": {
+ "w_type": "godan verb stem",
+ "romaji": "hottarakashi"
+ },
+ "放ったらかせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottarakase"
+ },
+ "放ったらかそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hottarakaso"
+ },
+ "放ったらかした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottarakashita"
+ },
+ "放ったらかして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottarakashite"
+ },
+ "仕舞い込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shimaikoma"
+ },
+ "仕舞い込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shimaikomi"
+ },
+ "仕舞い込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimaikome"
+ },
+ "仕舞い込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shimaikomo"
+ },
+ "仕舞い込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimaikonda"
+ },
+ "仕舞い込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimaikonde"
+ },
+ "落ちゆか": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiyuka"
+ },
+ "落ちゆき": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiyuki"
+ },
+ "落ちゆけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiyuke"
+ },
+ "落ちゆこ": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiyuko"
+ },
+ "落ちゆいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiyuita"
+ },
+ "落ちゆいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiyuite"
+ },
+ "掻き込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kakikoma"
+ },
+ "掻き込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kakikomi"
+ },
+ "掻き込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakikome"
+ },
+ "掻き込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kakikomo"
+ },
+ "掻き込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakikonda"
+ },
+ "掻き込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakikonde"
+ },
+ "聴き取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kikitora"
+ },
+ "聴き取り": {
+ "w_type": "godan verb stem",
+ "romaji": "kikitori"
+ },
+ "聴き取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikitore"
+ },
+ "聴き取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kikitoro"
+ },
+ "聴き取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikitotta"
+ },
+ "聴き取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikitotte"
+ },
+ "擲り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikoma"
+ },
+ "擲り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikomi"
+ },
+ "擲り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikome"
+ },
+ "擲り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikomo"
+ },
+ "擲り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikonda"
+ },
+ "擲り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikonde"
+ },
+ "釣り上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriagara"
+ },
+ "釣り上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriagari"
+ },
+ "釣り上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriagare"
+ },
+ "釣り上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriagaro"
+ },
+ "釣り上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriagatta"
+ },
+ "釣り上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriagatte"
+ },
+ "浮かび上ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagara"
+ },
+ "浮かび上り": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagari"
+ },
+ "浮かび上れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagare"
+ },
+ "浮かび上ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagaro"
+ },
+ "浮かび上った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagatta"
+ },
+ "浮かび上って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagatte"
+ },
+ "踏み迷わ": {
+ "w_type": "godan verb stem",
+ "romaji": "fumimayowa"
+ },
+ "踏み迷い": {
+ "w_type": "godan verb stem",
+ "romaji": "fumimayoi"
+ },
+ "踏み迷え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumimayoe"
+ },
+ "踏み迷お": {
+ "w_type": "godan verb stem",
+ "romaji": "fumimayoo"
+ },
+ "踏み迷った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumimayotta"
+ },
+ "踏み迷って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumimayotte"
+ },
+ "突っ伏さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuppusa"
+ },
+ "突っ伏し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuppushi"
+ },
+ "突っ伏せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuppuse"
+ },
+ "突っ伏そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuppuso"
+ },
+ "突っ伏した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuppushita"
+ },
+ "突っ伏して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuppushite"
+ },
+ "すまし込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sumashikoma"
+ },
+ "すまし込み": {
+ "w_type": "godan verb stem",
+ "romaji": "sumashikomi"
+ },
+ "すまし込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sumashikome"
+ },
+ "すまし込も": {
+ "w_type": "godan verb stem",
+ "romaji": "sumashikomo"
+ },
+ "すまし込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sumashikonda"
+ },
+ "すまし込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sumashikonde"
+ },
+ "切り合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiriawa"
+ },
+ "切り合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kiriai"
+ },
+ "切り合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiriae"
+ },
+ "切り合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kiriao"
+ },
+ "切り合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiriatta"
+ },
+ "切り合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiriatte"
+ },
+ "夏めか": {
+ "w_type": "godan verb stem",
+ "romaji": "natsumeka"
+ },
+ "夏めき": {
+ "w_type": "godan verb stem",
+ "romaji": "natsumeki"
+ },
+ "夏めけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "natsumeke"
+ },
+ "夏めこ": {
+ "w_type": "godan verb stem",
+ "romaji": "natsumeko"
+ },
+ "夏めいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "natsumeita"
+ },
+ "夏めいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "natsumeite"
+ },
+ "踏みならさ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminarasa"
+ },
+ "踏みならし": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminarashi"
+ },
+ "踏みならせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarase"
+ },
+ "踏みならそ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminaraso"
+ },
+ "踏みならした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarashita"
+ },
+ "踏みならして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarashite"
+ },
+ "蘇ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yomigaera"
+ },
+ "蘇り": {
+ "w_type": "godan verb stem",
+ "romaji": "yomigaeri"
+ },
+ "蘇れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomigaere"
+ },
+ "蘇ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomigaero"
+ },
+ "蘇った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomigaetta"
+ },
+ "蘇って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomigaette"
+ },
+ "買わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawa"
+ },
+ "買い": {
+ "w_type": "godan verb stem",
+ "romaji": "kai"
+ },
+ "買え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kae"
+ },
+ "買お": {
+ "w_type": "godan verb stem",
+ "romaji": "kao"
+ },
+ "買った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katta"
+ },
+ "買って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katte"
+ },
+ "誘い合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "sasoiawa"
+ },
+ "誘い合い": {
+ "w_type": "godan verb stem",
+ "romaji": "sasoiai"
+ },
+ "誘い合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasoiae"
+ },
+ "誘い合お": {
+ "w_type": "godan verb stem",
+ "romaji": "sasoiao"
+ },
+ "誘い合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasoiatta"
+ },
+ "誘い合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasoiatte"
+ },
+ "見過ごさ": {
+ "w_type": "godan verb stem",
+ "romaji": "misugosa"
+ },
+ "見過ごし": {
+ "w_type": "godan verb stem",
+ "romaji": "misugoshi"
+ },
+ "見過ごせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugose"
+ },
+ "見過ごそ": {
+ "w_type": "godan verb stem",
+ "romaji": "misugoso"
+ },
+ "見過ごした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugoshita"
+ },
+ "見過ごして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugoshite"
+ },
+ "呼慣らわさ": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawasa"
+ },
+ "呼慣らわし": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawashi"
+ },
+ "呼慣らわせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawase"
+ },
+ "呼慣らわそ": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawaso"
+ },
+ "呼慣らわした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawashita"
+ },
+ "呼慣らわして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawashite"
+ },
+ "嵌め込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekoma"
+ },
+ "嵌め込み": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomi"
+ },
+ "嵌め込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekome"
+ },
+ "嵌め込も": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomo"
+ },
+ "嵌め込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonda"
+ },
+ "嵌め込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonde"
+ },
+ "ぶっ倒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "buttaosa"
+ },
+ "ぶっ倒し": {
+ "w_type": "godan verb stem",
+ "romaji": "buttaoshi"
+ },
+ "ぶっ倒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttaose"
+ },
+ "ぶっ倒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "buttaoso"
+ },
+ "ぶっ倒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttaoshita"
+ },
+ "ぶっ倒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttaoshite"
+ },
+ "突きささ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisasa"
+ },
+ "突きさし": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisashi"
+ },
+ "突きさせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisase"
+ },
+ "突きさそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisaso"
+ },
+ "突きさした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisashita"
+ },
+ "突きさして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisashite"
+ },
+ "抱えこま": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekoma"
+ },
+ "抱えこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekomi"
+ },
+ "抱えこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekome"
+ },
+ "抱えこも": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekomo"
+ },
+ "抱えこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekonda"
+ },
+ "抱えこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekonde"
+ },
+ "落ち入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiira"
+ },
+ "落ち入り": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiiri"
+ },
+ "落ち入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiire"
+ },
+ "落ち入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ochiiro"
+ },
+ "落ち入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiitta"
+ },
+ "落ち入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ochiitte"
+ },
+ "剥ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hezura"
+ },
+ "剥り": {
+ "w_type": "godan verb stem",
+ "romaji": "hezuri"
+ },
+ "剥れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hezure"
+ },
+ "剥ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hezuro"
+ },
+ "剥った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hezutta"
+ },
+ "剥って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hezutte"
+ },
+ "気にかから": {
+ "w_type": "godan verb stem",
+ "romaji": "kinikakara"
+ },
+ "気にかかり": {
+ "w_type": "godan verb stem",
+ "romaji": "kinikakari"
+ },
+ "気にかかれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinikakare"
+ },
+ "気にかかろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kinikakaro"
+ },
+ "気にかかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinikakatta"
+ },
+ "気にかかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinikakatte"
+ },
+ "乗りかから": {
+ "w_type": "godan verb stem",
+ "romaji": "norikakara"
+ },
+ "乗りかかり": {
+ "w_type": "godan verb stem",
+ "romaji": "norikakari"
+ },
+ "乗りかかれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikakare"
+ },
+ "乗りかかろ": {
+ "w_type": "godan verb stem",
+ "romaji": "norikakaro"
+ },
+ "乗りかかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikakatta"
+ },
+ "乗りかかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikakatte"
+ },
+ "押入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiira"
+ },
+ "押入り": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiiri"
+ },
+ "押入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiire"
+ },
+ "押入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiiro"
+ },
+ "押入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiitta"
+ },
+ "押入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiitte"
+ },
+ "戦が": {
+ "w_type": "godan verb stem",
+ "romaji": "soyoga"
+ },
+ "戦ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "soyogi"
+ },
+ "戦げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soyoge"
+ },
+ "戦ご": {
+ "w_type": "godan verb stem",
+ "romaji": "soyogo"
+ },
+ "戦いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soyoida"
+ },
+ "戦いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soyoide"
+ },
+ "喉鳴らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "nodonarasa"
+ },
+ "喉鳴らし": {
+ "w_type": "godan verb stem",
+ "romaji": "nodonarashi"
+ },
+ "喉鳴らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nodonarase"
+ },
+ "喉鳴らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "nodonaraso"
+ },
+ "喉鳴らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nodonarashita"
+ },
+ "喉鳴らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nodonarashite"
+ },
+ "物語ら": {
+ "w_type": "godan verb stem",
+ "romaji": "monogatara"
+ },
+ "物語り": {
+ "w_type": "godan verb stem",
+ "romaji": "monogatari"
+ },
+ "物語れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "monogatare"
+ },
+ "物語ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "monogataro"
+ },
+ "物語った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "monogatatta"
+ },
+ "物語って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "monogatatte"
+ },
+ "捲れあがら": {
+ "w_type": "godan verb stem",
+ "romaji": "mekureagara"
+ },
+ "捲れあがり": {
+ "w_type": "godan verb stem",
+ "romaji": "mekureagari"
+ },
+ "捲れあがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekureagare"
+ },
+ "捲れあがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "mekureagaro"
+ },
+ "捲れあがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekureagatta"
+ },
+ "捲れあがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekureagatte"
+ },
+ "嵌めこま": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekoma"
+ },
+ "嵌めこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomi"
+ },
+ "嵌めこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekome"
+ },
+ "嵌めこも": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomo"
+ },
+ "嵌めこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonda"
+ },
+ "嵌めこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonde"
+ },
+ "探ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sagura"
+ },
+ "探り": {
+ "w_type": "godan verb stem",
+ "romaji": "saguri"
+ },
+ "探れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagure"
+ },
+ "探ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "saguro"
+ },
+ "探った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagutta"
+ },
+ "探って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagutte"
+ },
+ "引下がら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagara"
+ },
+ "引下がり": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagari"
+ },
+ "引下がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagare"
+ },
+ "引下がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagaro"
+ },
+ "引下がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagatta"
+ },
+ "引下がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagatte"
+ },
+ "畏まら": {
+ "w_type": "godan verb stem",
+ "romaji": "kashikomara"
+ },
+ "畏まり": {
+ "w_type": "godan verb stem",
+ "romaji": "kashikomari"
+ },
+ "畏まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kashikomare"
+ },
+ "畏まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kashikomaro"
+ },
+ "畏まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kashikomatta"
+ },
+ "畏まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kashikomatte"
+ },
+ "出向か": {
+ "w_type": "godan verb stem",
+ "romaji": "demuka"
+ },
+ "出向き": {
+ "w_type": "godan verb stem",
+ "romaji": "demuki"
+ },
+ "出向け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "demuke"
+ },
+ "出向こ": {
+ "w_type": "godan verb stem",
+ "romaji": "demuko"
+ },
+ "出向いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "demuita"
+ },
+ "出向いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "demuite"
+ },
+ "恋い忍ば": {
+ "w_type": "godan verb stem",
+ "romaji": "koishinoba"
+ },
+ "恋い忍び": {
+ "w_type": "godan verb stem",
+ "romaji": "koishinobi"
+ },
+ "恋い忍べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "koishinobe"
+ },
+ "恋い忍ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "koishinobo"
+ },
+ "恋い忍んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "koishinonda"
+ },
+ "恋い忍んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "koishinonde"
+ },
+ "相調わ": {
+ "w_type": "godan verb stem",
+ "romaji": "aitotonowa"
+ },
+ "相調い": {
+ "w_type": "godan verb stem",
+ "romaji": "aitotonoi"
+ },
+ "相調え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitotonoe"
+ },
+ "相調お": {
+ "w_type": "godan verb stem",
+ "romaji": "aitotonoo"
+ },
+ "相調った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitotonotta"
+ },
+ "相調って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitotonotte"
+ },
+ "舞いあがら": {
+ "w_type": "godan verb stem",
+ "romaji": "maiagara"
+ },
+ "舞いあがり": {
+ "w_type": "godan verb stem",
+ "romaji": "maiagari"
+ },
+ "舞いあがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maiagare"
+ },
+ "舞いあがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "maiagaro"
+ },
+ "舞いあがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maiagatta"
+ },
+ "舞いあがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maiagatte"
+ },
+ "葬ら": {
+ "w_type": "godan verb stem",
+ "romaji": "houmura"
+ },
+ "葬り": {
+ "w_type": "godan verb stem",
+ "romaji": "houmuri"
+ },
+ "葬れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "houmure"
+ },
+ "葬ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "houmuro"
+ },
+ "葬った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "houmutta"
+ },
+ "葬って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "houmutte"
+ },
+ "流さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagasa"
+ },
+ "流し": {
+ "w_type": "godan verb stem",
+ "romaji": "nagashi"
+ },
+ "流せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagase"
+ },
+ "流そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagaso"
+ },
+ "流した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagashita"
+ },
+ "流して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagashite"
+ },
+ "許さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yurusa"
+ },
+ "許し": {
+ "w_type": "godan verb stem",
+ "romaji": "yurushi"
+ },
+ "許せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yuruse"
+ },
+ "許そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yuruso"
+ },
+ "許した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yurushita"
+ },
+ "許して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yurushite"
+ },
+ "擲ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nagura"
+ },
+ "擲り": {
+ "w_type": "godan verb stem",
+ "romaji": "naguri"
+ },
+ "擲れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagure"
+ },
+ "擲ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "naguro"
+ },
+ "擲った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagutta"
+ },
+ "擲って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagutte"
+ },
+ "衝き動かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiugokasa"
+ },
+ "衝き動かし": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiugokashi"
+ },
+ "衝き動かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiugokase"
+ },
+ "衝き動かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiugokaso"
+ },
+ "衝き動かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiugokashita"
+ },
+ "衝き動かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiugokashite"
+ },
+ "引っ張ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hippara"
+ },
+ "引っ張り": {
+ "w_type": "godan verb stem",
+ "romaji": "hippari"
+ },
+ "引っ張れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hippare"
+ },
+ "引っ張ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hipparo"
+ },
+ "引っ張った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hippatta"
+ },
+ "引っ張って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hippatte"
+ },
+ "撃ち合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiawa"
+ },
+ "撃ち合い": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiai"
+ },
+ "撃ち合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiae"
+ },
+ "撃ち合お": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiao"
+ },
+ "撃ち合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiatta"
+ },
+ "撃ち合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiatte"
+ },
+ "読み過さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisugosa"
+ },
+ "読み過し": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisugoshi"
+ },
+ "読み過せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisugose"
+ },
+ "読み過そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisugoso"
+ },
+ "読み過した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisugoshita"
+ },
+ "読み過して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisugoshite"
+ },
+ "分かり合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakariawa"
+ },
+ "分かり合い": {
+ "w_type": "godan verb stem",
+ "romaji": "wakariai"
+ },
+ "分かり合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakariae"
+ },
+ "分かり合お": {
+ "w_type": "godan verb stem",
+ "romaji": "wakariao"
+ },
+ "分かり合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakariatta"
+ },
+ "分かり合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakariatte"
+ },
+ "抜き去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nukisara"
+ },
+ "抜き去り": {
+ "w_type": "godan verb stem",
+ "romaji": "nukisari"
+ },
+ "抜き去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukisare"
+ },
+ "抜き去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nukisaro"
+ },
+ "抜き去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukisatta"
+ },
+ "抜き去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukisatte"
+ },
+ "貴ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tattoma"
+ },
+ "貴み": {
+ "w_type": "godan verb stem",
+ "romaji": "tattomi"
+ },
+ "貴め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tattome"
+ },
+ "貴も": {
+ "w_type": "godan verb stem",
+ "romaji": "tattomo"
+ },
+ "いじくり回さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ijikurimawasa"
+ },
+ "いじくり回し": {
+ "w_type": "godan verb stem",
+ "romaji": "ijikurimawashi"
+ },
+ "いじくり回せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ijikurimawase"
+ },
+ "いじくり回そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ijikurimawaso"
+ },
+ "いじくり回した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ijikurimawashita"
+ },
+ "いじくり回して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ijikurimawashite"
+ },
+ "食い違わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuichigawa"
+ },
+ "食い違い": {
+ "w_type": "godan verb stem",
+ "romaji": "kuichigai"
+ },
+ "食い違え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuichigae"
+ },
+ "食い違お": {
+ "w_type": "godan verb stem",
+ "romaji": "kuichigao"
+ },
+ "食い違った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuichigatta"
+ },
+ "食い違って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuichigatte"
+ },
+ "出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "dasa"
+ },
+ "出し": {
+ "w_type": "godan verb stem",
+ "romaji": "dashi"
+ },
+ "出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dase"
+ },
+ "出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "daso"
+ },
+ "出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashita"
+ },
+ "出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashite"
+ },
+ "ブチ壊さ": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowasa"
+ },
+ "ブチ壊し": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowashi"
+ },
+ "ブチ壊せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowase"
+ },
+ "ブチ壊そ": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowaso"
+ },
+ "ブチ壊した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowashita"
+ },
+ "ブチ壊して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowashite"
+ },
+ "咲きそろわ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakisorowa"
+ },
+ "咲きそろい": {
+ "w_type": "godan verb stem",
+ "romaji": "sakisoroi"
+ },
+ "咲きそろえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakisoroe"
+ },
+ "咲きそろお": {
+ "w_type": "godan verb stem",
+ "romaji": "sakisoroo"
+ },
+ "咲きそろった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakisorotta"
+ },
+ "咲きそろって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakisorotte"
+ },
+ "説及ば": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyoba"
+ },
+ "説及び": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyobi"
+ },
+ "説及べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyobe"
+ },
+ "説及ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyobo"
+ },
+ "説及んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyonda"
+ },
+ "説及んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyonde"
+ },
+ "冴えわたら": {
+ "w_type": "godan verb stem",
+ "romaji": "saewatara"
+ },
+ "冴えわたり": {
+ "w_type": "godan verb stem",
+ "romaji": "saewatari"
+ },
+ "冴えわたれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saewatare"
+ },
+ "冴えわたろ": {
+ "w_type": "godan verb stem",
+ "romaji": "saewataro"
+ },
+ "冴えわたった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saewatatta"
+ },
+ "冴えわたって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saewatatte"
+ },
+ "喚か": {
+ "w_type": "godan verb stem",
+ "romaji": "wameka"
+ },
+ "喚き": {
+ "w_type": "godan verb stem",
+ "romaji": "wameki"
+ },
+ "喚け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wameke"
+ },
+ "喚こ": {
+ "w_type": "godan verb stem",
+ "romaji": "wameko"
+ },
+ "喚いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wameita"
+ },
+ "喚いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wameite"
+ },
+ "誤ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ayamara"
+ },
+ "誤り": {
+ "w_type": "godan verb stem",
+ "romaji": "ayamari"
+ },
+ "誤れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ayamare"
+ },
+ "誤ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ayamaro"
+ },
+ "誤った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ayamatta"
+ },
+ "誤って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ayamatte"
+ },
+ "書き直さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaosa"
+ },
+ "書き直し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaoshi"
+ },
+ "書き直せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaose"
+ },
+ "書き直そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaoso"
+ },
+ "書き直した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaoshita"
+ },
+ "書き直して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaoshite"
+ },
+ "切り下ろさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiriorosa"
+ },
+ "切り下ろし": {
+ "w_type": "godan verb stem",
+ "romaji": "kirioroshi"
+ },
+ "切り下ろせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiriorose"
+ },
+ "切り下ろそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirioroso"
+ },
+ "切り下ろした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirioroshita"
+ },
+ "切り下ろして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirioroshite"
+ },
+ "蹴とばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "ketobasa"
+ },
+ "蹴とばし": {
+ "w_type": "godan verb stem",
+ "romaji": "ketobashi"
+ },
+ "蹴とばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ketobase"
+ },
+ "蹴とばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "ketobaso"
+ },
+ "蹴とばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ketobashita"
+ },
+ "蹴とばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ketobashite"
+ },
+ "焼か": {
+ "w_type": "godan verb stem",
+ "romaji": "yaka"
+ },
+ "焼き": {
+ "w_type": "godan verb stem",
+ "romaji": "yaki"
+ },
+ "焼け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yake"
+ },
+ "焼こ": {
+ "w_type": "godan verb stem",
+ "romaji": "yako"
+ },
+ "焼いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaita"
+ },
+ "焼いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaite"
+ },
+ "打っ放さ": {
+ "w_type": "godan verb stem",
+ "romaji": "buppanasa"
+ },
+ "打っ放し": {
+ "w_type": "godan verb stem",
+ "romaji": "buppanashi"
+ },
+ "打っ放せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buppanase"
+ },
+ "打っ放そ": {
+ "w_type": "godan verb stem",
+ "romaji": "buppanaso"
+ },
+ "打っ放した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buppanashita"
+ },
+ "打っ放して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buppanashite"
+ },
+ "御出でなさら": {
+ "w_type": "godan verb stem",
+ "romaji": "oidenasara"
+ },
+ "御出でなさり": {
+ "w_type": "godan verb stem",
+ "romaji": "oidenasari"
+ },
+ "御出でなされ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oidenasare"
+ },
+ "御出でなさろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oidenasaro"
+ },
+ "御出でなさった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oidenasatta"
+ },
+ "御出でなさって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oidenasatte"
+ },
+ "締切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shimekira"
+ },
+ "締切り": {
+ "w_type": "godan verb stem",
+ "romaji": "shimekiri"
+ },
+ "締切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimekire"
+ },
+ "締切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shimekiro"
+ },
+ "締切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimekitta"
+ },
+ "締切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimekitte"
+ },
+ "追いこさ": {
+ "w_type": "godan verb stem",
+ "romaji": "oikosa"
+ },
+ "追いこし": {
+ "w_type": "godan verb stem",
+ "romaji": "oikoshi"
+ },
+ "追いこせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikose"
+ },
+ "追いこそ": {
+ "w_type": "godan verb stem",
+ "romaji": "oikoso"
+ },
+ "追いこした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikoshita"
+ },
+ "追いこして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikoshite"
+ },
+ "飛越さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikosa"
+ },
+ "飛越し": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikoshi"
+ },
+ "飛越せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikose"
+ },
+ "飛越そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikoso"
+ },
+ "飛越した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikoshita"
+ },
+ "飛越して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikoshite"
+ },
+ "絡み合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "karamiawa"
+ },
+ "絡み合い": {
+ "w_type": "godan verb stem",
+ "romaji": "karamiai"
+ },
+ "絡み合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karamiae"
+ },
+ "絡み合お": {
+ "w_type": "godan verb stem",
+ "romaji": "karamiao"
+ },
+ "絡み合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karamiatta"
+ },
+ "絡み合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karamiatte"
+ },
+ "機嫌を直さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kigen wo naosa"
+ },
+ "機嫌を直し": {
+ "w_type": "godan verb stem",
+ "romaji": "kigen wo naoshi"
+ },
+ "機嫌を直せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kigen wo naose"
+ },
+ "機嫌を直そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kigen wo naoso"
+ },
+ "機嫌を直した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kigen wo naoshita"
+ },
+ "機嫌を直して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kigen wo naoshite"
+ },
+ "言い直さ": {
+ "w_type": "godan verb stem",
+ "romaji": "iinaosa"
+ },
+ "言い直し": {
+ "w_type": "godan verb stem",
+ "romaji": "iinaoshi"
+ },
+ "言い直せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iinaose"
+ },
+ "言い直そ": {
+ "w_type": "godan verb stem",
+ "romaji": "iinaoso"
+ },
+ "言い直した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iinaoshita"
+ },
+ "言い直して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iinaoshite"
+ },
+ "俏さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yatsusa"
+ },
+ "俏し": {
+ "w_type": "godan verb stem",
+ "romaji": "yatsushi"
+ },
+ "俏せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatsuse"
+ },
+ "俏そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yatsuso"
+ },
+ "俏した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatsushita"
+ },
+ "俏して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatsushite"
+ },
+ "ふるい落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiotosa"
+ },
+ "ふるい落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiotoshi"
+ },
+ "ふるい落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiotose"
+ },
+ "ふるい落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiotoso"
+ },
+ "ふるい落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiotoshita"
+ },
+ "ふるい落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiotoshite"
+ },
+ "啀み合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "igamiawa"
+ },
+ "啀み合い": {
+ "w_type": "godan verb stem",
+ "romaji": "igamiai"
+ },
+ "啀み合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "igamiae"
+ },
+ "啀み合お": {
+ "w_type": "godan verb stem",
+ "romaji": "igamiao"
+ },
+ "啀み合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "igamiatta"
+ },
+ "啀み合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "igamiatte"
+ },
+ "梃摺ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tekozura"
+ },
+ "梃摺り": {
+ "w_type": "godan verb stem",
+ "romaji": "tekozuri"
+ },
+ "梃摺れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tekozure"
+ },
+ "梃摺ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tekozuro"
+ },
+ "梃摺った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tekozutta"
+ },
+ "梃摺って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tekozutte"
+ },
+ "成り上ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nariagara"
+ },
+ "成り上り": {
+ "w_type": "godan verb stem",
+ "romaji": "nariagari"
+ },
+ "成り上れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nariagare"
+ },
+ "成り上ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nariagaro"
+ },
+ "成り上った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nariagatta"
+ },
+ "成り上って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nariagatte"
+ },
+ "こき落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kokiotosa"
+ },
+ "こき落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "kokiotoshi"
+ },
+ "こき落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokiotose"
+ },
+ "こき落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kokiotoso"
+ },
+ "こき落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokiotoshita"
+ },
+ "こき落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokiotoshite"
+ },
+ "往か": {
+ "w_type": "godan verb stem",
+ "romaji": "ika"
+ },
+ "往き": {
+ "w_type": "godan verb stem",
+ "romaji": "iki"
+ },
+ "往け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ike"
+ },
+ "往こ": {
+ "w_type": "godan verb stem",
+ "romaji": "iko"
+ },
+ "往いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iita"
+ },
+ "往いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iite"
+ },
+ "食っ付か": {
+ "w_type": "godan verb stem",
+ "romaji": "kuttsuka"
+ },
+ "食っ付き": {
+ "w_type": "godan verb stem",
+ "romaji": "kuttsuki"
+ },
+ "食っ付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuttsuke"
+ },
+ "食っ付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuttsuko"
+ },
+ "食っ付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuttsuita"
+ },
+ "食っ付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuttsuite"
+ },
+ "避わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawasa"
+ },
+ "避わし": {
+ "w_type": "godan verb stem",
+ "romaji": "kawashi"
+ },
+ "避わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawase"
+ },
+ "避わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawaso"
+ },
+ "避わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashita"
+ },
+ "避わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashite"
+ },
+ "請出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukedasa"
+ },
+ "請出し": {
+ "w_type": "godan verb stem",
+ "romaji": "ukedashi"
+ },
+ "請出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukedase"
+ },
+ "請出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukedaso"
+ },
+ "請出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukedashita"
+ },
+ "請出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukedashite"
+ },
+ "綴じ込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tojikoma"
+ },
+ "綴じ込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tojikomi"
+ },
+ "綴じ込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tojikome"
+ },
+ "綴じ込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tojikomo"
+ },
+ "綴じ込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tojikonda"
+ },
+ "綴じ込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tojikonde"
+ },
+ "誉めちぎら": {
+ "w_type": "godan verb stem",
+ "romaji": "homechigira"
+ },
+ "誉めちぎり": {
+ "w_type": "godan verb stem",
+ "romaji": "homechigiri"
+ },
+ "誉めちぎれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homechigire"
+ },
+ "誉めちぎろ": {
+ "w_type": "godan verb stem",
+ "romaji": "homechigiro"
+ },
+ "誉めちぎった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homechigitta"
+ },
+ "誉めちぎって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homechigitte"
+ },
+ "寄り合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yoriawa"
+ },
+ "寄り合い": {
+ "w_type": "godan verb stem",
+ "romaji": "yoriai"
+ },
+ "寄り合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoriae"
+ },
+ "寄り合お": {
+ "w_type": "godan verb stem",
+ "romaji": "yoriao"
+ },
+ "寄り合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoriatta"
+ },
+ "寄り合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoriatte"
+ },
+ "仕出来さ": {
+ "w_type": "godan verb stem",
+ "romaji": "shidekasa"
+ },
+ "仕出来し": {
+ "w_type": "godan verb stem",
+ "romaji": "shidekashi"
+ },
+ "仕出来せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shidekase"
+ },
+ "仕出来そ": {
+ "w_type": "godan verb stem",
+ "romaji": "shidekaso"
+ },
+ "仕出来した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shidekashita"
+ },
+ "仕出来して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shidekashite"
+ },
+ "移りゆか": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuka"
+ },
+ "移りゆき": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuki"
+ },
+ "移りゆけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuke"
+ },
+ "移りゆこ": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuko"
+ },
+ "移りゆいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuita"
+ },
+ "移りゆいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuite"
+ },
+ "轢か": {
+ "w_type": "godan verb stem",
+ "romaji": "hika"
+ },
+ "轢き": {
+ "w_type": "godan verb stem",
+ "romaji": "hiki"
+ },
+ "轢け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hike"
+ },
+ "轢こ": {
+ "w_type": "godan verb stem",
+ "romaji": "hiko"
+ },
+ "轢いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiita"
+ },
+ "轢いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiite"
+ },
+ "鳴きしきら": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikira"
+ },
+ "鳴きしきり": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikiri"
+ },
+ "鳴きしきれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikire"
+ },
+ "鳴きしきろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakishikiro"
+ },
+ "鳴きしきった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikitta"
+ },
+ "鳴きしきって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakishikitte"
+ },
+ "迫り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "seridasa"
+ },
+ "迫り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "seridashi"
+ },
+ "迫り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seridase"
+ },
+ "迫り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "seridaso"
+ },
+ "迫り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seridashita"
+ },
+ "迫り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seridashite"
+ },
+ "言い送ら": {
+ "w_type": "godan verb stem",
+ "romaji": "iiokura"
+ },
+ "言い送り": {
+ "w_type": "godan verb stem",
+ "romaji": "iiokuri"
+ },
+ "言い送れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiokure"
+ },
+ "言い送ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "iiokuro"
+ },
+ "言い送った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiokutta"
+ },
+ "言い送って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiokutte"
+ },
+ "撮ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tora"
+ },
+ "撮り": {
+ "w_type": "godan verb stem",
+ "romaji": "tori"
+ },
+ "撮れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tore"
+ },
+ "撮ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "toro"
+ },
+ "撮った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "totta"
+ },
+ "撮って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "totte"
+ },
+ "抱え込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekoma"
+ },
+ "抱え込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekomi"
+ },
+ "抱え込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekome"
+ },
+ "抱え込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaekomo"
+ },
+ "抱え込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekonda"
+ },
+ "抱え込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakaekonde"
+ },
+ "流し出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagashidasa"
+ },
+ "流し出し": {
+ "w_type": "godan verb stem",
+ "romaji": "nagashidashi"
+ },
+ "流し出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagashidase"
+ },
+ "流し出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagashidaso"
+ },
+ "流し出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagashidashita"
+ },
+ "流し出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagashidashite"
+ },
+ "言い止さ": {
+ "w_type": "godan verb stem",
+ "romaji": "iisasa"
+ },
+ "言い止し": {
+ "w_type": "godan verb stem",
+ "romaji": "iisashi"
+ },
+ "言い止せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisase"
+ },
+ "言い止そ": {
+ "w_type": "godan verb stem",
+ "romaji": "iisaso"
+ },
+ "言い止した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisashita"
+ },
+ "言い止して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisashite"
+ },
+ "切り組ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikuma"
+ },
+ "切り組み": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikumi"
+ },
+ "切り組め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikume"
+ },
+ "切り組も": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikumo"
+ },
+ "切り組んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikunda"
+ },
+ "切り組んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikunde"
+ },
+ "微笑ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hohoema"
+ },
+ "微笑み": {
+ "w_type": "godan verb stem",
+ "romaji": "hohoemi"
+ },
+ "微笑め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hohoeme"
+ },
+ "微笑も": {
+ "w_type": "godan verb stem",
+ "romaji": "hohoemo"
+ },
+ "微笑んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hohoenda"
+ },
+ "微笑んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hohoende"
+ },
+ "噴か": {
+ "w_type": "godan verb stem",
+ "romaji": "fuka"
+ },
+ "噴き": {
+ "w_type": "godan verb stem",
+ "romaji": "fuki"
+ },
+ "噴け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuke"
+ },
+ "噴こ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuko"
+ },
+ "噴いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuita"
+ },
+ "噴いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuite"
+ },
+ "追いまわさ": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawasa"
+ },
+ "追いまわし": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawashi"
+ },
+ "追いまわせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawase"
+ },
+ "追いまわそ": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawaso"
+ },
+ "追いまわした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawashita"
+ },
+ "追いまわして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawashite"
+ },
+ "咲き残ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sakinokora"
+ },
+ "咲き残り": {
+ "w_type": "godan verb stem",
+ "romaji": "sakinokori"
+ },
+ "咲き残れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakinokore"
+ },
+ "咲き残ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakinokoro"
+ },
+ "咲き残った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakinokotta"
+ },
+ "咲き残って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakinokotte"
+ },
+ "引っ掴ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hittsukama"
+ },
+ "引っ掴み": {
+ "w_type": "godan verb stem",
+ "romaji": "hittsukami"
+ },
+ "引っ掴め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hittsukame"
+ },
+ "引っ掴も": {
+ "w_type": "godan verb stem",
+ "romaji": "hittsukamo"
+ },
+ "引っ掴んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hittsukanda"
+ },
+ "引っ掴んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hittsukande"
+ },
+ "押し開か": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihiraka"
+ },
+ "押し開き": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihiraki"
+ },
+ "押し開け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihirake"
+ },
+ "押し開こ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihirako"
+ },
+ "押し開いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihiraita"
+ },
+ "押し開いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihiraite"
+ },
+ "駆け巡ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemegura"
+ },
+ "駆け巡り": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemeguri"
+ },
+ "駆け巡れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegure"
+ },
+ "駆け巡ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemeguro"
+ },
+ "駆け巡った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegutta"
+ },
+ "駆け巡って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegutte"
+ },
+ "見出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "miidasa"
+ },
+ "見出し": {
+ "w_type": "godan verb stem",
+ "romaji": "miidashi"
+ },
+ "見出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miidase"
+ },
+ "見出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "miidaso"
+ },
+ "見出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miidashita"
+ },
+ "見出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miidashite"
+ },
+ "押隠さ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikakusa"
+ },
+ "押隠し": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikakushi"
+ },
+ "押隠せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikakuse"
+ },
+ "押隠そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikakuso"
+ },
+ "押隠した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikakushita"
+ },
+ "押隠して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikakushite"
+ },
+ "活かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikasa"
+ },
+ "活かし": {
+ "w_type": "godan verb stem",
+ "romaji": "ikashi"
+ },
+ "活かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikase"
+ },
+ "活かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikaso"
+ },
+ "活かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikashita"
+ },
+ "活かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikashite"
+ },
+ "差しださ": {
+ "w_type": "godan verb stem",
+ "romaji": "sashidasa"
+ },
+ "差しだし": {
+ "w_type": "godan verb stem",
+ "romaji": "sashidashi"
+ },
+ "差しだせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashidase"
+ },
+ "差しだそ": {
+ "w_type": "godan verb stem",
+ "romaji": "sashidaso"
+ },
+ "差しだした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashidashita"
+ },
+ "差しだして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashidashite"
+ },
+ "伸び広がら": {
+ "w_type": "godan verb stem",
+ "romaji": "nobihirogara"
+ },
+ "伸び広がり": {
+ "w_type": "godan verb stem",
+ "romaji": "nobihirogari"
+ },
+ "伸び広がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobihirogare"
+ },
+ "伸び広がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nobihirogaro"
+ },
+ "伸び広がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobihirogatta"
+ },
+ "伸び広がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobihirogatte"
+ },
+ "見失わ": {
+ "w_type": "godan verb stem",
+ "romaji": "miushinawa"
+ },
+ "見失い": {
+ "w_type": "godan verb stem",
+ "romaji": "miushinai"
+ },
+ "見失え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miushinae"
+ },
+ "見失お": {
+ "w_type": "godan verb stem",
+ "romaji": "miushinao"
+ },
+ "見失った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miushinatta"
+ },
+ "見失って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "miushinatte"
+ },
+ "差し戻さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sashimodosa"
+ },
+ "差し戻し": {
+ "w_type": "godan verb stem",
+ "romaji": "sashimodoshi"
+ },
+ "差し戻せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashimodose"
+ },
+ "差し戻そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sashimodoso"
+ },
+ "差し戻した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashimodoshita"
+ },
+ "差し戻して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashimodoshite"
+ },
+ "嵩張ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kasabara"
+ },
+ "嵩張り": {
+ "w_type": "godan verb stem",
+ "romaji": "kasabari"
+ },
+ "嵩張れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasabare"
+ },
+ "嵩張ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kasabaro"
+ },
+ "嵩張った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasabatta"
+ },
+ "嵩張って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasabatte"
+ },
+ "繋が": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunaga"
+ },
+ "繋ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunagi"
+ },
+ "繋げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunage"
+ },
+ "繋ご": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunago"
+ },
+ "繋いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunaida"
+ },
+ "繋いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunaide"
+ },
+ "知り尽くさ": {
+ "w_type": "godan verb stem",
+ "romaji": "shiritsukusa"
+ },
+ "知り尽くし": {
+ "w_type": "godan verb stem",
+ "romaji": "shiritsukushi"
+ },
+ "知り尽くせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiritsukuse"
+ },
+ "知り尽くそ": {
+ "w_type": "godan verb stem",
+ "romaji": "shiritsukuso"
+ },
+ "知り尽くした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiritsukushita"
+ },
+ "知り尽くして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiritsukushite"
+ },
+ "浮き足立た": {
+ "w_type": "godan verb stem",
+ "romaji": "ukiashidata"
+ },
+ "浮き足立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "ukiashidachi"
+ },
+ "浮き足立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukiashidate"
+ },
+ "浮き足立と": {
+ "w_type": "godan verb stem",
+ "romaji": "ukiashidato"
+ },
+ "浮き足立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukiashidatta"
+ },
+ "浮き足立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukiashidatte"
+ },
+ "息吹か": {
+ "w_type": "godan verb stem",
+ "romaji": "ibuka"
+ },
+ "息吹き": {
+ "w_type": "godan verb stem",
+ "romaji": "ibuki"
+ },
+ "息吹け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ibuke"
+ },
+ "息吹こ": {
+ "w_type": "godan verb stem",
+ "romaji": "ibuko"
+ },
+ "息吹いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ibuita"
+ },
+ "息吹いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ibuite"
+ },
+ "吹飛ば": {
+ "w_type": "godan verb stem",
+ "romaji": "fukitoba"
+ },
+ "吹飛び": {
+ "w_type": "godan verb stem",
+ "romaji": "fukitobi"
+ },
+ "吹飛べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukitobe"
+ },
+ "吹飛ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukitobo"
+ },
+ "吹飛んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukitonda"
+ },
+ "吹飛んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukitonde"
+ },
+ "食み出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hamidasa"
+ },
+ "食み出し": {
+ "w_type": "godan verb stem",
+ "romaji": "hamidashi"
+ },
+ "食み出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamidase"
+ },
+ "食み出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hamidaso"
+ },
+ "食み出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamidashita"
+ },
+ "食み出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamidashite"
+ },
+ "燃え付か": {
+ "w_type": "godan verb stem",
+ "romaji": "moetsuka"
+ },
+ "燃え付き": {
+ "w_type": "godan verb stem",
+ "romaji": "moetsuki"
+ },
+ "燃え付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moetsuke"
+ },
+ "燃え付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "moetsuko"
+ },
+ "燃え付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moetsuita"
+ },
+ "燃え付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moetsuite"
+ },
+ "訊か": {
+ "w_type": "godan verb stem",
+ "romaji": "kika"
+ },
+ "訊き": {
+ "w_type": "godan verb stem",
+ "romaji": "kiki"
+ },
+ "訊け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kike"
+ },
+ "訊こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiko"
+ },
+ "訊いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiita"
+ },
+ "訊いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiite"
+ },
+ "叩き込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikoma"
+ },
+ "叩き込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikomi"
+ },
+ "叩き込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikome"
+ },
+ "叩き込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikomo"
+ },
+ "叩き込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikonda"
+ },
+ "叩き込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikonde"
+ },
+ "張付か": {
+ "w_type": "godan verb stem",
+ "romaji": "haritsuka"
+ },
+ "張付き": {
+ "w_type": "godan verb stem",
+ "romaji": "haritsuki"
+ },
+ "張付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritsuke"
+ },
+ "張付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "haritsuko"
+ },
+ "張付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritsuita"
+ },
+ "張付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritsuite"
+ },
+ "賺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukasa"
+ },
+ "賺し": {
+ "w_type": "godan verb stem",
+ "romaji": "sukashi"
+ },
+ "賺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukase"
+ },
+ "賺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukaso"
+ },
+ "賺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukashita"
+ },
+ "賺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukashite"
+ },
+ "打っ遣らかさ": {
+ "w_type": "godan verb stem",
+ "romaji": "utcharakasa"
+ },
+ "打っ遣らかし": {
+ "w_type": "godan verb stem",
+ "romaji": "utcharakashi"
+ },
+ "打っ遣らかせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utcharakase"
+ },
+ "打っ遣らかそ": {
+ "w_type": "godan verb stem",
+ "romaji": "utcharakaso"
+ },
+ "打っ遣らかした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utcharakashita"
+ },
+ "打っ遣らかして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utcharakashite"
+ },
+ "縊ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kubira"
+ },
+ "縊り": {
+ "w_type": "godan verb stem",
+ "romaji": "kubiri"
+ },
+ "縊れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kubire"
+ },
+ "縊ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kubiro"
+ },
+ "縊った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kubitta"
+ },
+ "縊って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kubitte"
+ },
+ "鎖さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tozasa"
+ },
+ "鎖し": {
+ "w_type": "godan verb stem",
+ "romaji": "tozashi"
+ },
+ "鎖せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tozase"
+ },
+ "鎖そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tozaso"
+ },
+ "鎖した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tozashita"
+ },
+ "鎖して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tozashite"
+ },
+ "召し上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "meshiagara"
+ },
+ "召し上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "meshiagari"
+ },
+ "召し上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meshiagare"
+ },
+ "召し上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "meshiagaro"
+ },
+ "召し上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meshiagatta"
+ },
+ "召し上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meshiagatte"
+ },
+ "冷かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hiyakasa"
+ },
+ "冷かし": {
+ "w_type": "godan verb stem",
+ "romaji": "hiyakashi"
+ },
+ "冷かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiyakase"
+ },
+ "冷かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hiyakaso"
+ },
+ "冷かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiyakashita"
+ },
+ "冷かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiyakashite"
+ },
+ "振飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "furitobasa"
+ },
+ "振飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "furitobashi"
+ },
+ "振飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furitobase"
+ },
+ "振飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "furitobaso"
+ },
+ "振飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furitobashita"
+ },
+ "振飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furitobashite"
+ },
+ "すっ飛ば": {
+ "w_type": "godan verb stem",
+ "romaji": "suttoba"
+ },
+ "すっ飛び": {
+ "w_type": "godan verb stem",
+ "romaji": "suttobi"
+ },
+ "すっ飛べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suttobe"
+ },
+ "すっ飛ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "suttobo"
+ },
+ "すっ飛んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suttonda"
+ },
+ "すっ飛んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suttonde"
+ },
+ "蹴り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kerikoma"
+ },
+ "蹴り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kerikomi"
+ },
+ "蹴り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kerikome"
+ },
+ "蹴り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kerikomo"
+ },
+ "蹴り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kerikonda"
+ },
+ "蹴り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kerikonde"
+ },
+ "使い回さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaimawasa"
+ },
+ "使い回し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaimawashi"
+ },
+ "使い回せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaimawase"
+ },
+ "使い回そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaimawaso"
+ },
+ "使い回した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaimawashita"
+ },
+ "使い回して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaimawashite"
+ },
+ "言渋ら": {
+ "w_type": "godan verb stem",
+ "romaji": "iishibura"
+ },
+ "言渋り": {
+ "w_type": "godan verb stem",
+ "romaji": "iishiburi"
+ },
+ "言渋れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iishibure"
+ },
+ "言渋ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "iishiburo"
+ },
+ "言渋った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iishibutta"
+ },
+ "言渋って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iishibutte"
+ },
+ "登り切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "noborikira"
+ },
+ "登り切り": {
+ "w_type": "godan verb stem",
+ "romaji": "noborikiri"
+ },
+ "登り切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noborikire"
+ },
+ "登り切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "noborikiro"
+ },
+ "登り切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noborikitta"
+ },
+ "登り切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noborikitte"
+ },
+ "洗い去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "araisara"
+ },
+ "洗い去り": {
+ "w_type": "godan verb stem",
+ "romaji": "araisari"
+ },
+ "洗い去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araisare"
+ },
+ "洗い去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "araisaro"
+ },
+ "洗い去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araisatta"
+ },
+ "洗い去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araisatte"
+ },
+ "下さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kudasa"
+ },
+ "下し": {
+ "w_type": "godan verb stem",
+ "romaji": "kudashi"
+ },
+ "下せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudase"
+ },
+ "下そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kudaso"
+ },
+ "下した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudashita"
+ },
+ "下して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudashite"
+ },
+ "噛ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kama"
+ },
+ "噛み": {
+ "w_type": "godan verb stem",
+ "romaji": "kami"
+ },
+ "噛め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kame"
+ },
+ "噛も": {
+ "w_type": "godan verb stem",
+ "romaji": "kamo"
+ },
+ "噛んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanda"
+ },
+ "噛んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kande"
+ },
+ "深まら": {
+ "w_type": "godan verb stem",
+ "romaji": "fukamara"
+ },
+ "深まり": {
+ "w_type": "godan verb stem",
+ "romaji": "fukamari"
+ },
+ "深まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukamare"
+ },
+ "深まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukamaro"
+ },
+ "深まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukamatta"
+ },
+ "深まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukamatte"
+ },
+ "選び取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "erabitora"
+ },
+ "選び取り": {
+ "w_type": "godan verb stem",
+ "romaji": "erabitori"
+ },
+ "選び取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabitore"
+ },
+ "選び取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "erabitoro"
+ },
+ "選び取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabitotta"
+ },
+ "選び取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabitotte"
+ },
+ "沁み込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikoma"
+ },
+ "沁み込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomi"
+ },
+ "沁み込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikome"
+ },
+ "沁み込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomo"
+ },
+ "沁み込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonda"
+ },
+ "沁み込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonde"
+ },
+ "脹らま": {
+ "w_type": "godan verb stem",
+ "romaji": "fukurama"
+ },
+ "脹らみ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukurami"
+ },
+ "脹らめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukurame"
+ },
+ "脹らも": {
+ "w_type": "godan verb stem",
+ "romaji": "fukuramo"
+ },
+ "脹らんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukuranda"
+ },
+ "脹らんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukurande"
+ },
+ "刻み込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kizamikoma"
+ },
+ "刻み込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kizamikomi"
+ },
+ "刻み込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizamikome"
+ },
+ "刻み込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kizamikomo"
+ },
+ "刻み込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizamikonda"
+ },
+ "刻み込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizamikonde"
+ },
+ "言いこなさ": {
+ "w_type": "godan verb stem",
+ "romaji": "iikonasa"
+ },
+ "言いこなし": {
+ "w_type": "godan verb stem",
+ "romaji": "iikonashi"
+ },
+ "言いこなせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikonase"
+ },
+ "言いこなそ": {
+ "w_type": "godan verb stem",
+ "romaji": "iikonaso"
+ },
+ "言いこなした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikonashita"
+ },
+ "言いこなして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikonashite"
+ },
+ "かき出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidasa"
+ },
+ "かき出し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidashi"
+ },
+ "かき出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidase"
+ },
+ "かき出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidaso"
+ },
+ "かき出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidashita"
+ },
+ "かき出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidashite"
+ },
+ "書き尽さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitsukusa"
+ },
+ "書き尽し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitsukushi"
+ },
+ "書き尽せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitsukuse"
+ },
+ "書き尽そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitsukuso"
+ },
+ "書き尽した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitsukushita"
+ },
+ "書き尽して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitsukushite"
+ },
+ "見放さ": {
+ "w_type": "godan verb stem",
+ "romaji": "mihanasa"
+ },
+ "見放し": {
+ "w_type": "godan verb stem",
+ "romaji": "mihanashi"
+ },
+ "見放せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mihanase"
+ },
+ "見放そ": {
+ "w_type": "godan verb stem",
+ "romaji": "mihanaso"
+ },
+ "見放した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mihanashita"
+ },
+ "見放して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mihanashite"
+ },
+ "充た": {
+ "w_type": "godan verb stem",
+ "romaji": "mita"
+ },
+ "充ち": {
+ "w_type": "godan verb stem",
+ "romaji": "michi"
+ },
+ "充て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mite"
+ },
+ "充と": {
+ "w_type": "godan verb stem",
+ "romaji": "mito"
+ },
+ "充った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitta"
+ },
+ "充って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitte"
+ },
+ "涌き出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakidasa"
+ },
+ "涌き出し": {
+ "w_type": "godan verb stem",
+ "romaji": "wakidashi"
+ },
+ "涌き出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakidase"
+ },
+ "涌き出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakidaso"
+ },
+ "涌き出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakidashita"
+ },
+ "涌き出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakidashite"
+ },
+ "たらし込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikoma"
+ },
+ "たらし込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikomi"
+ },
+ "たらし込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikome"
+ },
+ "たらし込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikomo"
+ },
+ "たらし込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikonda"
+ },
+ "たらし込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikonde"
+ },
+ "打ちまもら": {
+ "w_type": "godan verb stem",
+ "romaji": "uchimamora"
+ },
+ "打ちまもり": {
+ "w_type": "godan verb stem",
+ "romaji": "uchimamori"
+ },
+ "打ちまもれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchimamore"
+ },
+ "打ちまもろ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchimamoro"
+ },
+ "打ちまもった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchimamotta"
+ },
+ "打ちまもって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchimamotte"
+ },
+ "鋤き起こさ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukiokosa"
+ },
+ "鋤き起こし": {
+ "w_type": "godan verb stem",
+ "romaji": "sukiokoshi"
+ },
+ "鋤き起こせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukiokose"
+ },
+ "鋤き起こそ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukiokoso"
+ },
+ "鋤き起こした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukiokoshita"
+ },
+ "鋤き起こして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukiokoshite"
+ },
+ "嘆か": {
+ "w_type": "godan verb stem",
+ "romaji": "nageka"
+ },
+ "嘆き": {
+ "w_type": "godan verb stem",
+ "romaji": "nageki"
+ },
+ "嘆け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageke"
+ },
+ "嘆こ": {
+ "w_type": "godan verb stem",
+ "romaji": "nageko"
+ },
+ "嘆いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageita"
+ },
+ "嘆いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageite"
+ },
+ "突刺さら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisasara"
+ },
+ "突刺さり": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisasari"
+ },
+ "突刺され": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisasare"
+ },
+ "突刺さろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukisasaro"
+ },
+ "突刺さった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisasatta"
+ },
+ "突刺さって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukisasatte"
+ },
+ "撥ね飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobasa"
+ },
+ "撥ね飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobashi"
+ },
+ "撥ね飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobase"
+ },
+ "撥ね飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobaso"
+ },
+ "撥ね飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobashita"
+ },
+ "撥ね飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobashite"
+ },
+ "識ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shira"
+ },
+ "識り": {
+ "w_type": "godan verb stem",
+ "romaji": "shiri"
+ },
+ "識れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shire"
+ },
+ "識ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shiro"
+ },
+ "識った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitta"
+ },
+ "識って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitte"
+ },
+ "つき合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiawa"
+ },
+ "つき合い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiai"
+ },
+ "つき合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiae"
+ },
+ "つき合お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiao"
+ },
+ "つき合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiatta"
+ },
+ "つき合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiatte"
+ },
+ "含ま": {
+ "w_type": "godan verb stem",
+ "romaji": "fukuma"
+ },
+ "含み": {
+ "w_type": "godan verb stem",
+ "romaji": "fukumi"
+ },
+ "含め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukume"
+ },
+ "含も": {
+ "w_type": "godan verb stem",
+ "romaji": "fukumo"
+ },
+ "含んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukunda"
+ },
+ "含んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukunde"
+ },
+ "眠り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nemurikoma"
+ },
+ "眠り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "nemurikomi"
+ },
+ "眠り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemurikome"
+ },
+ "眠り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "nemurikomo"
+ },
+ "眠り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemurikonda"
+ },
+ "眠り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemurikonde"
+ },
+ "直走ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashira"
+ },
+ "直走り": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashiri"
+ },
+ "直走れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashire"
+ },
+ "直走ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashiro"
+ },
+ "直走った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashitta"
+ },
+ "直走って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashitte"
+ },
+ "火が点か": {
+ "w_type": "godan verb stem",
+ "romaji": "higatsuka"
+ },
+ "火が点き": {
+ "w_type": "godan verb stem",
+ "romaji": "higatsuki"
+ },
+ "火が点け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higatsuke"
+ },
+ "火が点こ": {
+ "w_type": "godan verb stem",
+ "romaji": "higatsuko"
+ },
+ "火が点いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higatsuita"
+ },
+ "火が点いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higatsuite"
+ },
+ "飲み止さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nomisasa"
+ },
+ "飲み止し": {
+ "w_type": "godan verb stem",
+ "romaji": "nomisashi"
+ },
+ "飲み止せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomisase"
+ },
+ "飲み止そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nomisaso"
+ },
+ "飲み止した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomisashita"
+ },
+ "飲み止して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomisashite"
+ },
+ "誑し込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikoma"
+ },
+ "誑し込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikomi"
+ },
+ "誑し込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikome"
+ },
+ "誑し込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tarashikomo"
+ },
+ "誑し込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikonda"
+ },
+ "誑し込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarashikonde"
+ },
+ "善がら": {
+ "w_type": "godan verb stem",
+ "romaji": "yogara"
+ },
+ "善がり": {
+ "w_type": "godan verb stem",
+ "romaji": "yogari"
+ },
+ "善がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yogare"
+ },
+ "善がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yogaro"
+ },
+ "善がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yogatta"
+ },
+ "善がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yogatte"
+ },
+ "拐かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowakasa"
+ },
+ "拐かし": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowakashi"
+ },
+ "拐かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowakase"
+ },
+ "拐かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowakaso"
+ },
+ "拐かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowakashita"
+ },
+ "拐かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowakashite"
+ },
+ "焼け残ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yakenokora"
+ },
+ "焼け残り": {
+ "w_type": "godan verb stem",
+ "romaji": "yakenokori"
+ },
+ "焼け残れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakenokore"
+ },
+ "焼け残ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yakenokoro"
+ },
+ "焼け残った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakenokotta"
+ },
+ "焼け残って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakenokotte"
+ },
+ "騒が": {
+ "w_type": "godan verb stem",
+ "romaji": "sawaga"
+ },
+ "騒ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "sawagi"
+ },
+ "騒げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawage"
+ },
+ "騒ご": {
+ "w_type": "godan verb stem",
+ "romaji": "sawago"
+ },
+ "騒いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawaida"
+ },
+ "騒いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawaide"
+ },
+ "喚ば": {
+ "w_type": "godan verb stem",
+ "romaji": "yoba"
+ },
+ "喚び": {
+ "w_type": "godan verb stem",
+ "romaji": "yobi"
+ },
+ "喚べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobe"
+ },
+ "喚ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "yobo"
+ },
+ "喚んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yonda"
+ },
+ "喚んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yonde"
+ },
+ "匂わ": {
+ "w_type": "godan verb stem",
+ "romaji": "niowa"
+ },
+ "匂い": {
+ "w_type": "godan verb stem",
+ "romaji": "nioi"
+ },
+ "匂え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nioe"
+ },
+ "匂お": {
+ "w_type": "godan verb stem",
+ "romaji": "nioo"
+ },
+ "匂った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niotta"
+ },
+ "匂って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niotte"
+ },
+ "嵌まら": {
+ "w_type": "godan verb stem",
+ "romaji": "hamara"
+ },
+ "嵌まり": {
+ "w_type": "godan verb stem",
+ "romaji": "hamari"
+ },
+ "嵌まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamare"
+ },
+ "嵌まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hamaro"
+ },
+ "嵌まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamatta"
+ },
+ "嵌まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamatte"
+ },
+ "焙り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "aburidasa"
+ },
+ "焙り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "aburidashi"
+ },
+ "焙り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aburidase"
+ },
+ "焙り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "aburidaso"
+ },
+ "焙り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aburidashita"
+ },
+ "焙り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aburidashite"
+ },
+ "しくしく泣か": {
+ "w_type": "godan verb stem",
+ "romaji": "shikushikunaka"
+ },
+ "しくしく泣き": {
+ "w_type": "godan verb stem",
+ "romaji": "shikushikunaki"
+ },
+ "しくしく泣け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikushikunake"
+ },
+ "しくしく泣こ": {
+ "w_type": "godan verb stem",
+ "romaji": "shikushikunako"
+ },
+ "しくしく泣いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikushikunaita"
+ },
+ "しくしく泣いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikushikunaite"
+ },
+ "雇わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yatowa"
+ },
+ "雇い": {
+ "w_type": "godan verb stem",
+ "romaji": "yatoi"
+ },
+ "雇え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatoe"
+ },
+ "雇お": {
+ "w_type": "godan verb stem",
+ "romaji": "yatoo"
+ },
+ "雇った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatotta"
+ },
+ "雇って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatotte"
+ },
+ "怒鳴り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridasa"
+ },
+ "怒鳴り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridashi"
+ },
+ "怒鳴り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridase"
+ },
+ "怒鳴り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridaso"
+ },
+ "怒鳴り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridashita"
+ },
+ "怒鳴り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridashite"
+ },
+ "転ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "korobasa"
+ },
+ "転ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "korobashi"
+ },
+ "転ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korobase"
+ },
+ "転ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "korobaso"
+ },
+ "転ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korobashita"
+ },
+ "転ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korobashite"
+ },
+ "吹き流さ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukinagasa"
+ },
+ "吹き流し": {
+ "w_type": "godan verb stem",
+ "romaji": "fukinagashi"
+ },
+ "吹き流せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukinagase"
+ },
+ "吹き流そ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukinagaso"
+ },
+ "吹き流した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukinagashita"
+ },
+ "吹き流して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukinagashite"
+ },
+ "猛り立た": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritata"
+ },
+ "猛り立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritachi"
+ },
+ "猛り立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritate"
+ },
+ "猛り立と": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritato"
+ },
+ "猛り立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritatta"
+ },
+ "猛り立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritatte"
+ },
+ "下ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kudara"
+ },
+ "下り": {
+ "w_type": "godan verb stem",
+ "romaji": "kudari"
+ },
+ "下れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudare"
+ },
+ "下ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kudaro"
+ },
+ "下った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudatta"
+ },
+ "下って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kudatte"
+ },
+ "弾け飛ば": {
+ "w_type": "godan verb stem",
+ "romaji": "hajiketoba"
+ },
+ "弾け飛び": {
+ "w_type": "godan verb stem",
+ "romaji": "hajiketobi"
+ },
+ "弾け飛べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajiketobe"
+ },
+ "弾け飛ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "hajiketobo"
+ },
+ "弾け飛んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajiketonda"
+ },
+ "弾け飛んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajiketonde"
+ },
+ "歳とら": {
+ "w_type": "godan verb stem",
+ "romaji": "toshitora"
+ },
+ "歳とり": {
+ "w_type": "godan verb stem",
+ "romaji": "toshitori"
+ },
+ "歳とれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toshitore"
+ },
+ "歳とろ": {
+ "w_type": "godan verb stem",
+ "romaji": "toshitoro"
+ },
+ "歳とった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toshitotta"
+ },
+ "歳とって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toshitotte"
+ },
+ "漏れ出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "moredasa"
+ },
+ "漏れ出し": {
+ "w_type": "godan verb stem",
+ "romaji": "moredashi"
+ },
+ "漏れ出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moredase"
+ },
+ "漏れ出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "moredaso"
+ },
+ "漏れ出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moredashita"
+ },
+ "漏れ出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moredashite"
+ },
+ "迷わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mayowa"
+ },
+ "迷い": {
+ "w_type": "godan verb stem",
+ "romaji": "mayoi"
+ },
+ "迷え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mayoe"
+ },
+ "迷お": {
+ "w_type": "godan verb stem",
+ "romaji": "mayoo"
+ },
+ "迷った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mayotta"
+ },
+ "迷って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mayotte"
+ },
+ "恐れ入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreira"
+ },
+ "恐れ入り": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreiri"
+ },
+ "恐れ入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreire"
+ },
+ "恐れ入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreiro"
+ },
+ "恐れ入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreitta"
+ },
+ "恐れ入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreitte"
+ },
+ "切り立た": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritata"
+ },
+ "切り立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritachi"
+ },
+ "切り立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritate"
+ },
+ "切り立と": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritato"
+ },
+ "切り立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritatta"
+ },
+ "切り立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritatte"
+ },
+ "言誤ら": {
+ "w_type": "godan verb stem",
+ "romaji": "iiayamara"
+ },
+ "言誤り": {
+ "w_type": "godan verb stem",
+ "romaji": "iiayamari"
+ },
+ "言誤れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiayamare"
+ },
+ "言誤ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "iiayamaro"
+ },
+ "言誤った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiayamatta"
+ },
+ "言誤って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiayamatte"
+ },
+ "忍込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobikoma"
+ },
+ "忍込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobikomi"
+ },
+ "忍込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobikome"
+ },
+ "忍込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobikomo"
+ },
+ "忍込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobikonda"
+ },
+ "忍込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobikonde"
+ },
+ "形造ら": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukura"
+ },
+ "形造り": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukuri"
+ },
+ "形造れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukure"
+ },
+ "形造ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukuro"
+ },
+ "形造った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukutta"
+ },
+ "形造って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukutte"
+ },
+ "出で立た": {
+ "w_type": "godan verb stem",
+ "romaji": "idetata"
+ },
+ "出で立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "idetachi"
+ },
+ "出で立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "idetate"
+ },
+ "出で立と": {
+ "w_type": "godan verb stem",
+ "romaji": "idetato"
+ },
+ "出で立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "idetatta"
+ },
+ "出で立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "idetatte"
+ },
+ "見つめ合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsumeawa"
+ },
+ "見つめ合い": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsumeai"
+ },
+ "見つめ合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsumeae"
+ },
+ "見つめ合お": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsumeao"
+ },
+ "見つめ合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsumeatta"
+ },
+ "見つめ合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsumeatte"
+ },
+ "誇ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hokora"
+ },
+ "誇り": {
+ "w_type": "godan verb stem",
+ "romaji": "hokori"
+ },
+ "誇れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hokore"
+ },
+ "誇ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hokoro"
+ },
+ "誇った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hokotta"
+ },
+ "誇って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hokotte"
+ },
+ "吹っ切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "fukkira"
+ },
+ "吹っ切り": {
+ "w_type": "godan verb stem",
+ "romaji": "fukkiri"
+ },
+ "吹っ切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukkire"
+ },
+ "吹っ切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukkiro"
+ },
+ "吹っ切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukkitta"
+ },
+ "吹っ切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukkitte"
+ },
+ "聴き込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kikikoma"
+ },
+ "聴き込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kikikomi"
+ },
+ "聴き込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikikome"
+ },
+ "聴き込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kikikomo"
+ },
+ "聴き込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikikonda"
+ },
+ "聴き込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikikonde"
+ },
+ "打ち抜か": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuka"
+ },
+ "打ち抜き": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuki"
+ },
+ "打ち抜け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuke"
+ },
+ "打ち抜こ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuko"
+ },
+ "打ち抜いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuita"
+ },
+ "打ち抜いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuite"
+ },
+ "助け守ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tasukemamora"
+ },
+ "助け守り": {
+ "w_type": "godan verb stem",
+ "romaji": "tasukemamori"
+ },
+ "助け守れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasukemamore"
+ },
+ "助け守ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tasukemamoro"
+ },
+ "助け守った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasukemamotta"
+ },
+ "助け守って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasukemamotte"
+ },
+ "仰ら": {
+ "w_type": "godan verb stem",
+ "romaji": "osshara"
+ },
+ "仰り": {
+ "w_type": "godan verb stem",
+ "romaji": "osshari"
+ },
+ "仰れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osshare"
+ },
+ "仰ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ossharo"
+ },
+ "仰った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osshatta"
+ },
+ "仰って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osshatte"
+ },
+ "倦ま": {
+ "w_type": "godan verb stem",
+ "romaji": "aguma"
+ },
+ "倦み": {
+ "w_type": "godan verb stem",
+ "romaji": "agumi"
+ },
+ "倦め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agume"
+ },
+ "倦も": {
+ "w_type": "godan verb stem",
+ "romaji": "agumo"
+ },
+ "倦んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agunda"
+ },
+ "倦んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agunde"
+ },
+ "揉みしだか": {
+ "w_type": "godan verb stem",
+ "romaji": "momishidaka"
+ },
+ "揉みしだき": {
+ "w_type": "godan verb stem",
+ "romaji": "momishidaki"
+ },
+ "揉みしだけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momishidake"
+ },
+ "揉みしだこ": {
+ "w_type": "godan verb stem",
+ "romaji": "momishidako"
+ },
+ "揉みしだいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momishidaita"
+ },
+ "揉みしだいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momishidaite"
+ },
+ "闘わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakawasa"
+ },
+ "闘わし": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakawashi"
+ },
+ "闘わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakawase"
+ },
+ "闘わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakawaso"
+ },
+ "闘わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakawashita"
+ },
+ "闘わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakawashite"
+ },
+ "押し黙ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamara"
+ },
+ "押し黙り": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamari"
+ },
+ "押し黙れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamare"
+ },
+ "押し黙ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamaro"
+ },
+ "押し黙った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamatta"
+ },
+ "押し黙って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamatte"
+ },
+ "借金で苦しま": {
+ "w_type": "godan verb stem",
+ "romaji": "shakkindekurushima"
+ },
+ "借金で苦しみ": {
+ "w_type": "godan verb stem",
+ "romaji": "shakkindekurushimi"
+ },
+ "借金で苦しめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shakkindekurushime"
+ },
+ "借金で苦しも": {
+ "w_type": "godan verb stem",
+ "romaji": "shakkindekurushimo"
+ },
+ "借金で苦しんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shakkindekurushinda"
+ },
+ "借金で苦しんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shakkindekurushinde"
+ },
+ "気遣わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kizukawa"
+ },
+ "気遣い": {
+ "w_type": "godan verb stem",
+ "romaji": "kizukai"
+ },
+ "気遣え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizukae"
+ },
+ "気遣お": {
+ "w_type": "godan verb stem",
+ "romaji": "kizukao"
+ },
+ "気遣った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizukatta"
+ },
+ "気遣って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizukatte"
+ },
+ "斎か": {
+ "w_type": "godan verb stem",
+ "romaji": "itsuka"
+ },
+ "斎き": {
+ "w_type": "godan verb stem",
+ "romaji": "itsuki"
+ },
+ "斎け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itsuke"
+ },
+ "斎こ": {
+ "w_type": "godan verb stem",
+ "romaji": "itsuko"
+ },
+ "斎いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itsuita"
+ },
+ "斎いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itsuite"
+ },
+ "立退か": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoka"
+ },
+ "立退き": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoki"
+ },
+ "立退け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoke"
+ },
+ "立退こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoko"
+ },
+ "立退いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoita"
+ },
+ "立退いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoite"
+ },
+ "煮えくりかえら": {
+ "w_type": "godan verb stem",
+ "romaji": "niekurikaera"
+ },
+ "煮えくりかえり": {
+ "w_type": "godan verb stem",
+ "romaji": "niekurikaeri"
+ },
+ "煮えくりかえれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niekurikaere"
+ },
+ "煮えくりかえろ": {
+ "w_type": "godan verb stem",
+ "romaji": "niekurikaero"
+ },
+ "煮えくりかえった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niekurikaetta"
+ },
+ "煮えくりかえって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niekurikaette"
+ },
+ "噛み付か": {
+ "w_type": "godan verb stem",
+ "romaji": "kamitsuka"
+ },
+ "噛み付き": {
+ "w_type": "godan verb stem",
+ "romaji": "kamitsuki"
+ },
+ "噛み付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamitsuke"
+ },
+ "噛み付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamitsuko"
+ },
+ "噛み付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamitsuita"
+ },
+ "噛み付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamitsuite"
+ },
+ "立ち並ば": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinaraba"
+ },
+ "立ち並び": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinarabi"
+ },
+ "立ち並べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinarabe"
+ },
+ "立ち並ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinarabo"
+ },
+ "立ち並んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinaranda"
+ },
+ "立ち並んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinarande"
+ },
+ "劣ら": {
+ "w_type": "godan verb stem",
+ "romaji": "otora"
+ },
+ "劣り": {
+ "w_type": "godan verb stem",
+ "romaji": "otori"
+ },
+ "劣れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "otore"
+ },
+ "劣ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "otoro"
+ },
+ "劣った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ototta"
+ },
+ "劣って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ototte"
+ },
+ "遣りなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "yarinaosa"
+ },
+ "遣りなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "yarinaoshi"
+ },
+ "遣りなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarinaose"
+ },
+ "遣りなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "yarinaoso"
+ },
+ "遣りなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarinaoshita"
+ },
+ "遣りなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yarinaoshite"
+ },
+ "商わ": {
+ "w_type": "godan verb stem",
+ "romaji": "akinawa"
+ },
+ "商い": {
+ "w_type": "godan verb stem",
+ "romaji": "akinai"
+ },
+ "商え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akinae"
+ },
+ "商お": {
+ "w_type": "godan verb stem",
+ "romaji": "akinao"
+ },
+ "商った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akinatta"
+ },
+ "商って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akinatte"
+ },
+ "忍ば": {
+ "w_type": "godan verb stem",
+ "romaji": "shinoba"
+ },
+ "忍び": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobi"
+ },
+ "忍べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobe"
+ },
+ "忍ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobo"
+ },
+ "忍んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinonda"
+ },
+ "忍んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinonde"
+ },
+ "伺い知ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ukagaishira"
+ },
+ "伺い知り": {
+ "w_type": "godan verb stem",
+ "romaji": "ukagaishiri"
+ },
+ "伺い知れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukagaishire"
+ },
+ "伺い知ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukagaishiro"
+ },
+ "伺い知った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukagaishitta"
+ },
+ "伺い知って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukagaishitte"
+ },
+ "乗りこま": {
+ "w_type": "godan verb stem",
+ "romaji": "norikoma"
+ },
+ "乗りこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "norikomi"
+ },
+ "乗りこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikome"
+ },
+ "乗りこも": {
+ "w_type": "godan verb stem",
+ "romaji": "norikomo"
+ },
+ "乗りこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikonda"
+ },
+ "乗りこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norikonde"
+ },
+ "図ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hakara"
+ },
+ "図り": {
+ "w_type": "godan verb stem",
+ "romaji": "hakari"
+ },
+ "図れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakare"
+ },
+ "図ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakaro"
+ },
+ "図った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakatta"
+ },
+ "図って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakatte"
+ },
+ "作り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridasa"
+ },
+ "作り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridashi"
+ },
+ "作り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridase"
+ },
+ "作り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridaso"
+ },
+ "作り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridashita"
+ },
+ "作り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridashite"
+ },
+ "着なおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kinaosa"
+ },
+ "着なおし": {
+ "w_type": "godan verb stem",
+ "romaji": "kinaoshi"
+ },
+ "着なおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinaose"
+ },
+ "着なおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kinaoso"
+ },
+ "着なおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinaoshita"
+ },
+ "着なおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kinaoshite"
+ },
+ "打ち延ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinobasa"
+ },
+ "打ち延ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinobashi"
+ },
+ "打ち延ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinobase"
+ },
+ "打ち延ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinobaso"
+ },
+ "打ち延ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinobashita"
+ },
+ "打ち延ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinobashite"
+ },
+ "形づくら": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukura"
+ },
+ "形づくり": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukuri"
+ },
+ "形づくれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukure"
+ },
+ "形づくろ": {
+ "w_type": "godan verb stem",
+ "romaji": "katachizukuro"
+ },
+ "形づくった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukutta"
+ },
+ "形づくって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katachizukutte"
+ },
+ "節榑立た": {
+ "w_type": "godan verb stem",
+ "romaji": "fushikuredata"
+ },
+ "節榑立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "fushikuredachi"
+ },
+ "節榑立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fushikuredate"
+ },
+ "節榑立と": {
+ "w_type": "godan verb stem",
+ "romaji": "fushikuredato"
+ },
+ "節榑立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fushikuredatta"
+ },
+ "節榑立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fushikuredatte"
+ },
+ "引き取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitora"
+ },
+ "引き取り": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitori"
+ },
+ "引き取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitore"
+ },
+ "引き取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitoro"
+ },
+ "引き取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitotta"
+ },
+ "引き取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitotte"
+ },
+ "飽足ら": {
+ "w_type": "godan verb stem",
+ "romaji": "akitara"
+ },
+ "飽足り": {
+ "w_type": "godan verb stem",
+ "romaji": "akitari"
+ },
+ "飽足れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akitare"
+ },
+ "飽足ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "akitaro"
+ },
+ "飽足った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akitatta"
+ },
+ "飽足って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akitatte"
+ },
+ "打克た": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikata"
+ },
+ "打克ち": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikachi"
+ },
+ "打克て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikate"
+ },
+ "打克と": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikato"
+ },
+ "打克った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatta"
+ },
+ "打克って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatte"
+ },
+ "踏み均さ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminarasa"
+ },
+ "踏み均し": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminarashi"
+ },
+ "踏み均せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarase"
+ },
+ "踏み均そ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuminaraso"
+ },
+ "踏み均した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarashita"
+ },
+ "踏み均して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuminarashite"
+ },
+ "主立た": {
+ "w_type": "godan verb stem",
+ "romaji": "omodata"
+ },
+ "主立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "omodachi"
+ },
+ "主立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omodate"
+ },
+ "主立と": {
+ "w_type": "godan verb stem",
+ "romaji": "omodato"
+ },
+ "主立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omodatta"
+ },
+ "主立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omodatte"
+ },
+ "わかち合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiawa"
+ },
+ "わかち合い": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiai"
+ },
+ "わかち合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiae"
+ },
+ "わかち合お": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiao"
+ },
+ "わかち合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiatta"
+ },
+ "わかち合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiatte"
+ },
+ "変ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kawara"
+ },
+ "変り": {
+ "w_type": "godan verb stem",
+ "romaji": "kawari"
+ },
+ "変れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaware"
+ },
+ "変ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawaro"
+ },
+ "変った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawatta"
+ },
+ "変って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawatte"
+ },
+ "数えなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kazoenaosa"
+ },
+ "数えなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "kazoenaoshi"
+ },
+ "数えなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazoenaose"
+ },
+ "数えなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kazoenaoso"
+ },
+ "数えなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazoenaoshita"
+ },
+ "数えなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazoenaoshite"
+ },
+ "はじき出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hajikidasa"
+ },
+ "はじき出し": {
+ "w_type": "godan verb stem",
+ "romaji": "hajikidashi"
+ },
+ "はじき出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajikidase"
+ },
+ "はじき出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hajikidaso"
+ },
+ "はじき出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajikidashita"
+ },
+ "はじき出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hajikidashite"
+ },
+ "銜え込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwaekoma"
+ },
+ "銜え込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwaekomi"
+ },
+ "銜え込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwaekome"
+ },
+ "銜え込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwaekomo"
+ },
+ "銜え込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwaekonda"
+ },
+ "銜え込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwaekonde"
+ },
+ "伸び悩ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nobinayama"
+ },
+ "伸び悩み": {
+ "w_type": "godan verb stem",
+ "romaji": "nobinayami"
+ },
+ "伸び悩め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobinayame"
+ },
+ "伸び悩も": {
+ "w_type": "godan verb stem",
+ "romaji": "nobinayamo"
+ },
+ "伸び悩んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobinayanda"
+ },
+ "伸び悩んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobinayande"
+ },
+ "寛が": {
+ "w_type": "godan verb stem",
+ "romaji": "kutsuroga"
+ },
+ "寛ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "kutsurogi"
+ },
+ "寛げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kutsuroge"
+ },
+ "寛ご": {
+ "w_type": "godan verb stem",
+ "romaji": "kutsurogo"
+ },
+ "寛いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kutsuroida"
+ },
+ "寛いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kutsuroide"
+ },
+ "沸き立た": {
+ "w_type": "godan verb stem",
+ "romaji": "wakitata"
+ },
+ "沸き立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "wakitachi"
+ },
+ "沸き立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakitate"
+ },
+ "沸き立と": {
+ "w_type": "godan verb stem",
+ "romaji": "wakitato"
+ },
+ "沸き立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakitatta"
+ },
+ "沸き立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakitatte"
+ },
+ "食いしばら": {
+ "w_type": "godan verb stem",
+ "romaji": "kuishibara"
+ },
+ "食いしばり": {
+ "w_type": "godan verb stem",
+ "romaji": "kuishibari"
+ },
+ "食いしばれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuishibare"
+ },
+ "食いしばろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuishibaro"
+ },
+ "食いしばった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuishibatta"
+ },
+ "食いしばって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuishibatte"
+ },
+ "速まら": {
+ "w_type": "godan verb stem",
+ "romaji": "hayamara"
+ },
+ "速まり": {
+ "w_type": "godan verb stem",
+ "romaji": "hayamari"
+ },
+ "速まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hayamare"
+ },
+ "速まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hayamaro"
+ },
+ "速まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hayamatta"
+ },
+ "速まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hayamatte"
+ },
+ "弛まら": {
+ "w_type": "godan verb stem",
+ "romaji": "yurumara"
+ },
+ "弛まり": {
+ "w_type": "godan verb stem",
+ "romaji": "yurumari"
+ },
+ "弛まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yurumare"
+ },
+ "弛まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yurumaro"
+ },
+ "弛まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yurumatta"
+ },
+ "弛まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yurumatte"
+ },
+ "求むら": {
+ "w_type": "godan verb stem",
+ "romaji": "motomura"
+ },
+ "求むり": {
+ "w_type": "godan verb stem",
+ "romaji": "motomuri"
+ },
+ "求むれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motomure"
+ },
+ "求むろ": {
+ "w_type": "godan verb stem",
+ "romaji": "motomuro"
+ },
+ "求むった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motomutta"
+ },
+ "求むって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motomutte"
+ },
+ "科さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kasa"
+ },
+ "科し": {
+ "w_type": "godan verb stem",
+ "romaji": "kashi"
+ },
+ "科せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kase"
+ },
+ "科そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaso"
+ },
+ "科した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kashita"
+ },
+ "科して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kashite"
+ },
+ "下回ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shitamawara"
+ },
+ "下回り": {
+ "w_type": "godan verb stem",
+ "romaji": "shitamawari"
+ },
+ "下回れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitamaware"
+ },
+ "下回ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shitamawaro"
+ },
+ "下回った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitamawatta"
+ },
+ "下回って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitamawatte"
+ },
+ "駆けめぐら": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemegura"
+ },
+ "駆けめぐり": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemeguri"
+ },
+ "駆けめぐれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegure"
+ },
+ "駆けめぐろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakemeguro"
+ },
+ "駆けめぐった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegutta"
+ },
+ "駆けめぐって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakemegutte"
+ },
+ "着か": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuka"
+ },
+ "着き": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuki"
+ },
+ "着け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuke"
+ },
+ "着こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuko"
+ },
+ "着いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuita"
+ },
+ "着いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuite"
+ },
+ "教え込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiekoma"
+ },
+ "教え込み": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiekomi"
+ },
+ "教え込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiekome"
+ },
+ "教え込も": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiekomo"
+ },
+ "教え込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiekonda"
+ },
+ "教え込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiekonde"
+ },
+ "関わり合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakawariawa"
+ },
+ "関わり合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kakawariai"
+ },
+ "関わり合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakawariae"
+ },
+ "関わり合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kakawariao"
+ },
+ "関わり合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakawariatta"
+ },
+ "関わり合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakawariatte"
+ },
+ "折り畳ま": {
+ "w_type": "godan verb stem",
+ "romaji": "oritatama"
+ },
+ "折り畳み": {
+ "w_type": "godan verb stem",
+ "romaji": "oritatami"
+ },
+ "折り畳め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatame"
+ },
+ "折り畳も": {
+ "w_type": "godan verb stem",
+ "romaji": "oritatamo"
+ },
+ "折り畳んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatanda"
+ },
+ "折り畳んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatande"
+ },
+ "取計らわ": {
+ "w_type": "godan verb stem",
+ "romaji": "torihakarawa"
+ },
+ "取計らい": {
+ "w_type": "godan verb stem",
+ "romaji": "torihakarai"
+ },
+ "取計らえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihakarae"
+ },
+ "取計らお": {
+ "w_type": "godan verb stem",
+ "romaji": "torihakarao"
+ },
+ "取計らった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihakaratta"
+ },
+ "取計らって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihakaratte"
+ },
+ "滲み込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikoma"
+ },
+ "滲み込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomi"
+ },
+ "滲み込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikome"
+ },
+ "滲み込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomo"
+ },
+ "滲み込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonda"
+ },
+ "滲み込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonde"
+ },
+ "読み誤まら": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamara"
+ },
+ "読み誤まり": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamari"
+ },
+ "読み誤まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamare"
+ },
+ "読み誤まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamaro"
+ },
+ "読み誤まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamatta"
+ },
+ "読み誤まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamatte"
+ },
+ "解か": {
+ "w_type": "godan verb stem",
+ "romaji": "toka"
+ },
+ "解き": {
+ "w_type": "godan verb stem",
+ "romaji": "toki"
+ },
+ "解け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toke"
+ },
+ "解こ": {
+ "w_type": "godan verb stem",
+ "romaji": "toko"
+ },
+ "解いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toita"
+ },
+ "解いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toite"
+ },
+ "吸いつか": {
+ "w_type": "godan verb stem",
+ "romaji": "suitsuka"
+ },
+ "吸いつき": {
+ "w_type": "godan verb stem",
+ "romaji": "suitsuki"
+ },
+ "吸いつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suitsuke"
+ },
+ "吸いつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "suitsuko"
+ },
+ "吸いついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suitsuita"
+ },
+ "吸いついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suitsuite"
+ },
+ "解さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hogusa"
+ },
+ "解し": {
+ "w_type": "godan verb stem",
+ "romaji": "hogushi"
+ },
+ "解せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hoguse"
+ },
+ "解そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hoguso"
+ },
+ "解した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hogushita"
+ },
+ "解して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hogushite"
+ },
+ "申し込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "moushikoma"
+ },
+ "申し込み": {
+ "w_type": "godan verb stem",
+ "romaji": "moushikomi"
+ },
+ "申し込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moushikome"
+ },
+ "申し込も": {
+ "w_type": "godan verb stem",
+ "romaji": "moushikomo"
+ },
+ "申し込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moushikonda"
+ },
+ "申し込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moushikonde"
+ },
+ "たたき壊さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikowasa"
+ },
+ "たたき壊し": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikowashi"
+ },
+ "たたき壊せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikowase"
+ },
+ "たたき壊そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakikowaso"
+ },
+ "たたき壊した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikowashita"
+ },
+ "たたき壊して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakikowashite"
+ },
+ "事足ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kototara"
+ },
+ "事足り": {
+ "w_type": "godan verb stem",
+ "romaji": "kototari"
+ },
+ "事足れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kototare"
+ },
+ "事足ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kototaro"
+ },
+ "事足った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kototatta"
+ },
+ "事足って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kototatte"
+ },
+ "臥せら": {
+ "w_type": "godan verb stem",
+ "romaji": "fusera"
+ },
+ "臥せり": {
+ "w_type": "godan verb stem",
+ "romaji": "fuseri"
+ },
+ "臥せれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fusere"
+ },
+ "臥せろ": {
+ "w_type": "godan verb stem",
+ "romaji": "fusero"
+ },
+ "臥せった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fusetta"
+ },
+ "臥せって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fusette"
+ },
+ "聴か": {
+ "w_type": "godan verb stem",
+ "romaji": "kika"
+ },
+ "聴き": {
+ "w_type": "godan verb stem",
+ "romaji": "kiki"
+ },
+ "聴け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kike"
+ },
+ "聴こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiko"
+ },
+ "聴いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiita"
+ },
+ "聴いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiite"
+ },
+ "堪忍ば": {
+ "w_type": "godan verb stem",
+ "romaji": "taeshinoba"
+ },
+ "堪忍び": {
+ "w_type": "godan verb stem",
+ "romaji": "taeshinobi"
+ },
+ "堪忍べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "taeshinobe"
+ },
+ "堪忍ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "taeshinobo"
+ },
+ "堪忍んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "taeshinonda"
+ },
+ "堪忍んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "taeshinonde"
+ },
+ "引かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikasa"
+ },
+ "引かし": {
+ "w_type": "godan verb stem",
+ "romaji": "hikashi"
+ },
+ "引かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikase"
+ },
+ "引かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikaso"
+ },
+ "引かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikashita"
+ },
+ "引かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikashite"
+ },
+ "あふれ出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "afuredasa"
+ },
+ "あふれ出し": {
+ "w_type": "godan verb stem",
+ "romaji": "afuredashi"
+ },
+ "あふれ出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afuredase"
+ },
+ "あふれ出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "afuredaso"
+ },
+ "あふれ出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afuredashita"
+ },
+ "あふれ出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afuredashite"
+ },
+ "陰で動か": {
+ "w_type": "godan verb stem",
+ "romaji": "kagedeugoka"
+ },
+ "陰で動き": {
+ "w_type": "godan verb stem",
+ "romaji": "kagedeugoki"
+ },
+ "陰で動け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagedeugoke"
+ },
+ "陰で動こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kagedeugoko"
+ },
+ "陰で動いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagedeugoita"
+ },
+ "陰で動いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagedeugoite"
+ },
+ "射た": {
+ "w_type": "godan verb stem",
+ "romaji": "uta"
+ },
+ "射ち": {
+ "w_type": "godan verb stem",
+ "romaji": "uchi"
+ },
+ "射て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ute"
+ },
+ "射と": {
+ "w_type": "godan verb stem",
+ "romaji": "uto"
+ },
+ "射った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utta"
+ },
+ "射って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utte"
+ },
+ "引き締ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishimara"
+ },
+ "引き締り": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishimari"
+ },
+ "引き締れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishimare"
+ },
+ "引き締ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishimaro"
+ },
+ "引き締った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishimatta"
+ },
+ "引き締って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishimatte"
+ },
+ "損なわ": {
+ "w_type": "godan verb stem",
+ "romaji": "sokonawa"
+ },
+ "損ない": {
+ "w_type": "godan verb stem",
+ "romaji": "sokonai"
+ },
+ "損なえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokonae"
+ },
+ "損なお": {
+ "w_type": "godan verb stem",
+ "romaji": "sokonao"
+ },
+ "損なった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokonatta"
+ },
+ "損なって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokonatte"
+ },
+ "焼き殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yakikorosa"
+ },
+ "焼き殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "yakikoroshi"
+ },
+ "焼き殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakikorose"
+ },
+ "焼き殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yakikoroso"
+ },
+ "焼き殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakikoroshita"
+ },
+ "焼き殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakikoroshite"
+ },
+ "引っ被ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkabura"
+ },
+ "引っ被り": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkaburi"
+ },
+ "引っ被れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkabure"
+ },
+ "引っ被ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkaburo"
+ },
+ "引っ被った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkabutta"
+ },
+ "引っ被って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkabutte"
+ },
+ "浮び上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagara"
+ },
+ "浮び上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagari"
+ },
+ "浮び上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagare"
+ },
+ "浮び上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukabiagaro"
+ },
+ "浮び上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagatta"
+ },
+ "浮び上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukabiagatte"
+ },
+ "絡め取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "karametora"
+ },
+ "絡め取り": {
+ "w_type": "godan verb stem",
+ "romaji": "karametori"
+ },
+ "絡め取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametore"
+ },
+ "絡め取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "karametoro"
+ },
+ "絡め取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametotta"
+ },
+ "絡め取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametotte"
+ },
+ "温もら": {
+ "w_type": "godan verb stem",
+ "romaji": "nukumora"
+ },
+ "温もり": {
+ "w_type": "godan verb stem",
+ "romaji": "nukumori"
+ },
+ "温もれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukumore"
+ },
+ "温もろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nukumoro"
+ },
+ "温もった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukumotta"
+ },
+ "温もって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukumotte"
+ },
+ "甲走ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kanbashira"
+ },
+ "甲走り": {
+ "w_type": "godan verb stem",
+ "romaji": "kanbashiri"
+ },
+ "甲走れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanbashire"
+ },
+ "甲走ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kanbashiro"
+ },
+ "甲走った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanbashitta"
+ },
+ "甲走って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanbashitte"
+ },
+ "増やさ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuyasa"
+ },
+ "増やし": {
+ "w_type": "godan verb stem",
+ "romaji": "fuyashi"
+ },
+ "増やせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuyase"
+ },
+ "増やそ": {
+ "w_type": "godan verb stem",
+ "romaji": "fuyaso"
+ },
+ "増やした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuyashita"
+ },
+ "増やして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fuyashite"
+ },
+ "強まら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuyomara"
+ },
+ "強まり": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuyomari"
+ },
+ "強まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuyomare"
+ },
+ "強まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuyomaro"
+ },
+ "強まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuyomatta"
+ },
+ "強まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuyomatte"
+ },
+ "活気付か": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkizuka"
+ },
+ "活気付き": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkizuki"
+ },
+ "活気付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkizuke"
+ },
+ "活気付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkizuko"
+ },
+ "活気付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkizuita"
+ },
+ "活気付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkizuite"
+ },
+ "働き出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hatarakidasa"
+ },
+ "働き出し": {
+ "w_type": "godan verb stem",
+ "romaji": "hatarakidashi"
+ },
+ "働き出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatarakidase"
+ },
+ "働き出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hatarakidaso"
+ },
+ "働き出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatarakidashita"
+ },
+ "働き出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatarakidashite"
+ },
+ "武者振り付か": {
+ "w_type": "godan verb stem",
+ "romaji": "mushaburitsuka"
+ },
+ "武者振り付き": {
+ "w_type": "godan verb stem",
+ "romaji": "mushaburitsuki"
+ },
+ "武者振り付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mushaburitsuke"
+ },
+ "武者振り付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "mushaburitsuko"
+ },
+ "武者振り付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mushaburitsuita"
+ },
+ "武者振り付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mushaburitsuite"
+ },
+ "ぶち抜か": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuka"
+ },
+ "ぶち抜き": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuki"
+ },
+ "ぶち抜け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuke"
+ },
+ "ぶち抜こ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchinuko"
+ },
+ "ぶち抜いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuita"
+ },
+ "ぶち抜いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchinuite"
+ },
+ "繰合わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuriawasa"
+ },
+ "繰合わし": {
+ "w_type": "godan verb stem",
+ "romaji": "kuriawashi"
+ },
+ "繰合わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuriawase"
+ },
+ "繰合わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuriawaso"
+ },
+ "繰合わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuriawashita"
+ },
+ "繰合わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuriawashite"
+ },
+ "呪い殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "noroikorosa"
+ },
+ "呪い殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "noroikoroshi"
+ },
+ "呪い殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noroikorose"
+ },
+ "呪い殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "noroikoroso"
+ },
+ "呪い殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noroikoroshita"
+ },
+ "呪い殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noroikoroshite"
+ },
+ "持直さ": {
+ "w_type": "godan verb stem",
+ "romaji": "mochinaosa"
+ },
+ "持直し": {
+ "w_type": "godan verb stem",
+ "romaji": "mochinaoshi"
+ },
+ "持直せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochinaose"
+ },
+ "持直そ": {
+ "w_type": "godan verb stem",
+ "romaji": "mochinaoso"
+ },
+ "持直した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochinaoshita"
+ },
+ "持直して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochinaoshite"
+ },
+ "濟ま": {
+ "w_type": "godan verb stem",
+ "romaji": "suma"
+ },
+ "濟み": {
+ "w_type": "godan verb stem",
+ "romaji": "sumi"
+ },
+ "濟め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sume"
+ },
+ "濟も": {
+ "w_type": "godan verb stem",
+ "romaji": "sumo"
+ },
+ "濟んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sunda"
+ },
+ "濟んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sunde"
+ },
+ "引っかから": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkakara"
+ },
+ "引っかかり": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkakari"
+ },
+ "引っかかれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkakare"
+ },
+ "引っかかろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkakaro"
+ },
+ "引っかかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkakatta"
+ },
+ "引っかかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkakatte"
+ },
+ "行悩ま": {
+ "w_type": "godan verb stem",
+ "romaji": "yukinayama"
+ },
+ "行悩み": {
+ "w_type": "godan verb stem",
+ "romaji": "yukinayami"
+ },
+ "行悩め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukinayame"
+ },
+ "行悩も": {
+ "w_type": "godan verb stem",
+ "romaji": "yukinayamo"
+ },
+ "行悩んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukinayanda"
+ },
+ "行悩んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukinayande"
+ },
+ "楯つか": {
+ "w_type": "godan verb stem",
+ "romaji": "tatetsuka"
+ },
+ "楯つき": {
+ "w_type": "godan verb stem",
+ "romaji": "tatetsuki"
+ },
+ "楯つけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatetsuke"
+ },
+ "楯つこ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatetsuko"
+ },
+ "楯ついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatetsuita"
+ },
+ "楯ついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatetsuite"
+ },
+ "罹ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kakara"
+ },
+ "罹り": {
+ "w_type": "godan verb stem",
+ "romaji": "kakari"
+ },
+ "罹れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakare"
+ },
+ "罹ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakaro"
+ },
+ "罹った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakatta"
+ },
+ "罹って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakatte"
+ },
+ "取扱わ": {
+ "w_type": "godan verb stem",
+ "romaji": "toriatsukawa"
+ },
+ "取扱い": {
+ "w_type": "godan verb stem",
+ "romaji": "toriatsukai"
+ },
+ "取扱え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriatsukae"
+ },
+ "取扱お": {
+ "w_type": "godan verb stem",
+ "romaji": "toriatsukao"
+ },
+ "取扱った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriatsukatta"
+ },
+ "取扱って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriatsukatte"
+ },
+ "留ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tomara"
+ },
+ "留り": {
+ "w_type": "godan verb stem",
+ "romaji": "tomari"
+ },
+ "留れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomare"
+ },
+ "留ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tomaro"
+ },
+ "留った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomatta"
+ },
+ "留って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomatte"
+ },
+ "降り立た": {
+ "w_type": "godan verb stem",
+ "romaji": "oritata"
+ },
+ "降り立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "oritachi"
+ },
+ "降り立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritate"
+ },
+ "降り立と": {
+ "w_type": "godan verb stem",
+ "romaji": "oritato"
+ },
+ "降り立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatta"
+ },
+ "降り立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatte"
+ },
+ "吊るさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurusa"
+ },
+ "吊るし": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurushi"
+ },
+ "吊るせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuruse"
+ },
+ "吊るそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuruso"
+ },
+ "吊るした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurushita"
+ },
+ "吊るして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurushite"
+ },
+ "差し挾ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasama"
+ },
+ "差し挾み": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasami"
+ },
+ "差し挾め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasame"
+ },
+ "差し挾も": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasamo"
+ },
+ "差し挾んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasanda"
+ },
+ "差し挾んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasande"
+ },
+ "引きぬか": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinuka"
+ },
+ "引きぬき": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinuki"
+ },
+ "引きぬけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinuke"
+ },
+ "引きぬこ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinuko"
+ },
+ "引きぬいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinuita"
+ },
+ "引きぬいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinuite"
+ },
+ "喪わ": {
+ "w_type": "godan verb stem",
+ "romaji": "ushinawa"
+ },
+ "喪い": {
+ "w_type": "godan verb stem",
+ "romaji": "ushinai"
+ },
+ "喪え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ushinae"
+ },
+ "喪お": {
+ "w_type": "godan verb stem",
+ "romaji": "ushinao"
+ },
+ "喪った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ushinatta"
+ },
+ "喪って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ushinatte"
+ },
+ "やり出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yaridasa"
+ },
+ "やり出し": {
+ "w_type": "godan verb stem",
+ "romaji": "yaridashi"
+ },
+ "やり出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaridase"
+ },
+ "やり出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yaridaso"
+ },
+ "やり出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaridashita"
+ },
+ "やり出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaridashite"
+ },
+ "採ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tora"
+ },
+ "採り": {
+ "w_type": "godan verb stem",
+ "romaji": "tori"
+ },
+ "採れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tore"
+ },
+ "採ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "toro"
+ },
+ "採った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "totta"
+ },
+ "採って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "totte"
+ },
+ "出そろわ": {
+ "w_type": "godan verb stem",
+ "romaji": "desorowa"
+ },
+ "出そろい": {
+ "w_type": "godan verb stem",
+ "romaji": "desoroi"
+ },
+ "出そろえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "desoroe"
+ },
+ "出そろお": {
+ "w_type": "godan verb stem",
+ "romaji": "desoroo"
+ },
+ "出そろった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "desorotta"
+ },
+ "出そろって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "desorotte"
+ },
+ "食入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kuiira"
+ },
+ "食入り": {
+ "w_type": "godan verb stem",
+ "romaji": "kuiiri"
+ },
+ "食入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuiire"
+ },
+ "食入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuiiro"
+ },
+ "食入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuiitta"
+ },
+ "食入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuiitte"
+ },
+ "突きこま": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukikoma"
+ },
+ "突きこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukikomi"
+ },
+ "突きこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukikome"
+ },
+ "突きこも": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukikomo"
+ },
+ "突きこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukikonda"
+ },
+ "突きこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukikonde"
+ },
+ "闘わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakawa"
+ },
+ "闘い": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakai"
+ },
+ "闘え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakae"
+ },
+ "闘お": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakao"
+ },
+ "闘った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakatta"
+ },
+ "闘って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakatte"
+ },
+ "振向か": {
+ "w_type": "godan verb stem",
+ "romaji": "furimuka"
+ },
+ "振向き": {
+ "w_type": "godan verb stem",
+ "romaji": "furimuki"
+ },
+ "振向け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimuke"
+ },
+ "振向こ": {
+ "w_type": "godan verb stem",
+ "romaji": "furimuko"
+ },
+ "振向いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimuita"
+ },
+ "振向いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimuite"
+ },
+ "目覚まさ": {
+ "w_type": "godan verb stem",
+ "romaji": "mezamasa"
+ },
+ "目覚まし": {
+ "w_type": "godan verb stem",
+ "romaji": "mezamashi"
+ },
+ "目覚ませ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mezamase"
+ },
+ "目覚まそ": {
+ "w_type": "godan verb stem",
+ "romaji": "mezamaso"
+ },
+ "目覚ました": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mezamashita"
+ },
+ "目覚まして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mezamashite"
+ },
+ "飛び上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "tobiagara"
+ },
+ "飛び上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "tobiagari"
+ },
+ "飛び上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobiagare"
+ },
+ "飛び上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobiagaro"
+ },
+ "飛び上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobiagatta"
+ },
+ "飛び上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobiagatte"
+ },
+ "織り成さ": {
+ "w_type": "godan verb stem",
+ "romaji": "orinasa"
+ },
+ "織り成し": {
+ "w_type": "godan verb stem",
+ "romaji": "orinashi"
+ },
+ "織り成せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orinase"
+ },
+ "織り成そ": {
+ "w_type": "godan verb stem",
+ "romaji": "orinaso"
+ },
+ "織り成した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orinashita"
+ },
+ "織り成して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orinashite"
+ },
+ "しゃちほこ張ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shachihokobara"
+ },
+ "しゃちほこ張り": {
+ "w_type": "godan verb stem",
+ "romaji": "shachihokobari"
+ },
+ "しゃちほこ張れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shachihokobare"
+ },
+ "しゃちほこ張ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shachihokobaro"
+ },
+ "しゃちほこ張った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shachihokobatta"
+ },
+ "しゃちほこ張って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shachihokobatte"
+ },
+ "毛羽立た": {
+ "w_type": "godan verb stem",
+ "romaji": "kebadata"
+ },
+ "毛羽立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "kebadachi"
+ },
+ "毛羽立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kebadate"
+ },
+ "毛羽立と": {
+ "w_type": "godan verb stem",
+ "romaji": "kebadato"
+ },
+ "毛羽立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kebadatta"
+ },
+ "毛羽立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kebadatte"
+ },
+ "ゆで上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagara"
+ },
+ "ゆで上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagari"
+ },
+ "ゆで上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagare"
+ },
+ "ゆで上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagaro"
+ },
+ "ゆで上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagatta"
+ },
+ "ゆで上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagatte"
+ },
+ "働か": {
+ "w_type": "godan verb stem",
+ "romaji": "hataraka"
+ },
+ "働き": {
+ "w_type": "godan verb stem",
+ "romaji": "hataraki"
+ },
+ "働け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatarake"
+ },
+ "働こ": {
+ "w_type": "godan verb stem",
+ "romaji": "hatarako"
+ },
+ "働いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hataraita"
+ },
+ "働いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hataraite"
+ },
+ "荘ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kazara"
+ },
+ "荘り": {
+ "w_type": "godan verb stem",
+ "romaji": "kazari"
+ },
+ "荘れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazare"
+ },
+ "荘ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kazaro"
+ },
+ "荘った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazatta"
+ },
+ "荘って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kazatte"
+ },
+ "先走ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibashira"
+ },
+ "先走り": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibashiri"
+ },
+ "先走れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibashire"
+ },
+ "先走ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibashiro"
+ },
+ "先走った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibashitta"
+ },
+ "先走って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibashitte"
+ },
+ "怯ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hiruma"
+ },
+ "怯み": {
+ "w_type": "godan verb stem",
+ "romaji": "hirumi"
+ },
+ "怯め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirume"
+ },
+ "怯も": {
+ "w_type": "godan verb stem",
+ "romaji": "hirumo"
+ },
+ "怯んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirunda"
+ },
+ "怯んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirunde"
+ },
+ "固まら": {
+ "w_type": "godan verb stem",
+ "romaji": "katamara"
+ },
+ "固まり": {
+ "w_type": "godan verb stem",
+ "romaji": "katamari"
+ },
+ "固まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katamare"
+ },
+ "固まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "katamaro"
+ },
+ "固まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katamatta"
+ },
+ "固まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "katamatte"
+ },
+ "逃げ惑わ": {
+ "w_type": "godan verb stem",
+ "romaji": "nigemadowa"
+ },
+ "逃げ惑い": {
+ "w_type": "godan verb stem",
+ "romaji": "nigemadoi"
+ },
+ "逃げ惑え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigemadoe"
+ },
+ "逃げ惑お": {
+ "w_type": "godan verb stem",
+ "romaji": "nigemadoo"
+ },
+ "逃げ惑った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigemadotta"
+ },
+ "逃げ惑って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigemadotte"
+ },
+ "透徹さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukitoosa"
+ },
+ "透徹し": {
+ "w_type": "godan verb stem",
+ "romaji": "sukitooshi"
+ },
+ "透徹せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukitoose"
+ },
+ "透徹そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukitooso"
+ },
+ "透徹した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukitooshita"
+ },
+ "透徹して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukitooshite"
+ },
+ "輝き渡ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kagayakiwatara"
+ },
+ "輝き渡り": {
+ "w_type": "godan verb stem",
+ "romaji": "kagayakiwatari"
+ },
+ "輝き渡れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagayakiwatare"
+ },
+ "輝き渡ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kagayakiwataro"
+ },
+ "輝き渡った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagayakiwatatta"
+ },
+ "輝き渡って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kagayakiwatatte"
+ },
+ "泊り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tomarikoma"
+ },
+ "泊り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tomarikomi"
+ },
+ "泊り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomarikome"
+ },
+ "泊り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tomarikomo"
+ },
+ "泊り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomarikonda"
+ },
+ "泊り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomarikonde"
+ },
+ "毒突か": {
+ "w_type": "godan verb stem",
+ "romaji": "dokuzuka"
+ },
+ "毒突き": {
+ "w_type": "godan verb stem",
+ "romaji": "dokuzuki"
+ },
+ "毒突け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dokuzuke"
+ },
+ "毒突こ": {
+ "w_type": "godan verb stem",
+ "romaji": "dokuzuko"
+ },
+ "毒突いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dokuzuita"
+ },
+ "毒突いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dokuzuite"
+ },
+ "書き送ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiokura"
+ },
+ "書き送り": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiokuri"
+ },
+ "書き送れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiokure"
+ },
+ "書き送ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiokuro"
+ },
+ "書き送った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiokutta"
+ },
+ "書き送って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiokutte"
+ },
+ "仕舞わ": {
+ "w_type": "godan verb stem",
+ "romaji": "shimawa"
+ },
+ "仕舞い": {
+ "w_type": "godan verb stem",
+ "romaji": "shimai"
+ },
+ "仕舞え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimae"
+ },
+ "仕舞お": {
+ "w_type": "godan verb stem",
+ "romaji": "shimao"
+ },
+ "仕舞った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimatta"
+ },
+ "仕舞って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimatte"
+ },
+ "もたれ掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "motarekakara"
+ },
+ "もたれ掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "motarekakari"
+ },
+ "もたれ掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motarekakare"
+ },
+ "もたれ掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "motarekakaro"
+ },
+ "もたれ掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motarekakatta"
+ },
+ "もたれ掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motarekakatte"
+ },
+ "篭ま": {
+ "w_type": "godan verb stem",
+ "romaji": "koma"
+ },
+ "篭み": {
+ "w_type": "godan verb stem",
+ "romaji": "komi"
+ },
+ "篭め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kome"
+ },
+ "篭も": {
+ "w_type": "godan verb stem",
+ "romaji": "komo"
+ },
+ "篭んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konda"
+ },
+ "篭んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konde"
+ },
+ "荒らし回ら": {
+ "w_type": "godan verb stem",
+ "romaji": "arashimawara"
+ },
+ "荒らし回り": {
+ "w_type": "godan verb stem",
+ "romaji": "arashimawari"
+ },
+ "荒らし回れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arashimaware"
+ },
+ "荒らし回ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "arashimawaro"
+ },
+ "荒らし回った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arashimawatta"
+ },
+ "荒らし回って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "arashimawatte"
+ },
+ "捜し回ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashimawara"
+ },
+ "捜し回り": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashimawari"
+ },
+ "捜し回れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashimaware"
+ },
+ "捜し回ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashimawaro"
+ },
+ "捜し回った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashimawatta"
+ },
+ "捜し回って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashimawatte"
+ },
+ "天降ら": {
+ "w_type": "godan verb stem",
+ "romaji": "amakudara"
+ },
+ "天降り": {
+ "w_type": "godan verb stem",
+ "romaji": "amakudari"
+ },
+ "天降れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "amakudare"
+ },
+ "天降ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "amakudaro"
+ },
+ "天降った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "amakudatta"
+ },
+ "天降って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "amakudatte"
+ },
+ "遜ら": {
+ "w_type": "godan verb stem",
+ "romaji": "herikudara"
+ },
+ "遜り": {
+ "w_type": "godan verb stem",
+ "romaji": "herikudari"
+ },
+ "遜れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "herikudare"
+ },
+ "遜ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "herikudaro"
+ },
+ "遜った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "herikudatta"
+ },
+ "遜って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "herikudatte"
+ },
+ "炊上ら": {
+ "w_type": "godan verb stem",
+ "romaji": "takiagara"
+ },
+ "炊上り": {
+ "w_type": "godan verb stem",
+ "romaji": "takiagari"
+ },
+ "炊上れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takiagare"
+ },
+ "炊上ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "takiagaro"
+ },
+ "炊上った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takiagatta"
+ },
+ "炊上って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takiagatte"
+ },
+ "組み敷か": {
+ "w_type": "godan verb stem",
+ "romaji": "kumishika"
+ },
+ "組み敷き": {
+ "w_type": "godan verb stem",
+ "romaji": "kumishiki"
+ },
+ "組み敷け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumishike"
+ },
+ "組み敷こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kumishiko"
+ },
+ "組み敷いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumishiita"
+ },
+ "組み敷いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumishiite"
+ },
+ "覚込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "oboekoma"
+ },
+ "覚込み": {
+ "w_type": "godan verb stem",
+ "romaji": "oboekomi"
+ },
+ "覚込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboekome"
+ },
+ "覚込も": {
+ "w_type": "godan verb stem",
+ "romaji": "oboekomo"
+ },
+ "覚込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboekonda"
+ },
+ "覚込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboekonde"
+ },
+ "補わ": {
+ "w_type": "godan verb stem",
+ "romaji": "oginawa"
+ },
+ "補い": {
+ "w_type": "godan verb stem",
+ "romaji": "oginai"
+ },
+ "補え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oginae"
+ },
+ "補お": {
+ "w_type": "godan verb stem",
+ "romaji": "oginao"
+ },
+ "補った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oginatta"
+ },
+ "補って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oginatte"
+ },
+ "跳ね返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaera"
+ },
+ "跳ね返り": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaeri"
+ },
+ "跳ね返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaere"
+ },
+ "跳ね返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaero"
+ },
+ "跳ね返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaetta"
+ },
+ "跳ね返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaette"
+ },
+ "鬻が": {
+ "w_type": "godan verb stem",
+ "romaji": "hisaga"
+ },
+ "鬻ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "hisagi"
+ },
+ "鬻げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hisage"
+ },
+ "鬻ご": {
+ "w_type": "godan verb stem",
+ "romaji": "hisago"
+ },
+ "鬻いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hisaida"
+ },
+ "鬻いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hisaide"
+ },
+ "ほっつき歩か": {
+ "w_type": "godan verb stem",
+ "romaji": "hottsukiaruka"
+ },
+ "ほっつき歩き": {
+ "w_type": "godan verb stem",
+ "romaji": "hottsukiaruki"
+ },
+ "ほっつき歩け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottsukiaruke"
+ },
+ "ほっつき歩こ": {
+ "w_type": "godan verb stem",
+ "romaji": "hottsukiaruko"
+ },
+ "ほっつき歩いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottsukiaruita"
+ },
+ "ほっつき歩いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hottsukiaruite"
+ },
+ "倚ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yora"
+ },
+ "倚り": {
+ "w_type": "godan verb stem",
+ "romaji": "yori"
+ },
+ "倚れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yore"
+ },
+ "倚ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yoro"
+ },
+ "倚った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yotta"
+ },
+ "倚って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yotte"
+ },
+ "起ち上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiagara"
+ },
+ "起ち上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiagari"
+ },
+ "起ち上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiagare"
+ },
+ "起ち上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiagaro"
+ },
+ "起ち上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiagatta"
+ },
+ "起ち上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiagatte"
+ },
+ "つけ入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukeira"
+ },
+ "つけ入り": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukeiri"
+ },
+ "つけ入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukeire"
+ },
+ "つけ入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukeiro"
+ },
+ "つけ入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukeitta"
+ },
+ "つけ入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukeitte"
+ },
+ "和らが": {
+ "w_type": "godan verb stem",
+ "romaji": "yawaraga"
+ },
+ "和らぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "yawaragi"
+ },
+ "和らげ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yawarage"
+ },
+ "和らご": {
+ "w_type": "godan verb stem",
+ "romaji": "yawarago"
+ },
+ "和らいだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yawaraida"
+ },
+ "和らいで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yawaraide"
+ },
+ "当てこすら": {
+ "w_type": "godan verb stem",
+ "romaji": "atekosura"
+ },
+ "当てこすり": {
+ "w_type": "godan verb stem",
+ "romaji": "atekosuri"
+ },
+ "当てこすれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atekosure"
+ },
+ "当てこすろ": {
+ "w_type": "godan verb stem",
+ "romaji": "atekosuro"
+ },
+ "当てこすった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atekosutta"
+ },
+ "当てこすって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atekosutte"
+ },
+ "威かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "odokasa"
+ },
+ "威かし": {
+ "w_type": "godan verb stem",
+ "romaji": "odokashi"
+ },
+ "威かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odokase"
+ },
+ "威かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "odokaso"
+ },
+ "威かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odokashita"
+ },
+ "威かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odokashite"
+ },
+ "跳ね返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaesa"
+ },
+ "跳ね返し": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaeshi"
+ },
+ "跳ね返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaese"
+ },
+ "跳ね返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanekaeso"
+ },
+ "跳ね返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaeshita"
+ },
+ "跳ね返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanekaeshite"
+ },
+ "妬か": {
+ "w_type": "godan verb stem",
+ "romaji": "yaka"
+ },
+ "妬き": {
+ "w_type": "godan verb stem",
+ "romaji": "yaki"
+ },
+ "妬け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yake"
+ },
+ "妬こ": {
+ "w_type": "godan verb stem",
+ "romaji": "yako"
+ },
+ "妬いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaita"
+ },
+ "妬いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yaite"
+ },
+ "そっぽを向か": {
+ "w_type": "godan verb stem",
+ "romaji": "soppo wo muka"
+ },
+ "そっぽを向き": {
+ "w_type": "godan verb stem",
+ "romaji": "soppo wo muki"
+ },
+ "そっぽを向け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soppo wo muke"
+ },
+ "そっぽを向こ": {
+ "w_type": "godan verb stem",
+ "romaji": "soppo wo muko"
+ },
+ "そっぽを向いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soppo wo muita"
+ },
+ "そっぽを向いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soppo wo muite"
+ },
+ "切り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiridasa"
+ },
+ "切り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "kiridashi"
+ },
+ "切り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiridase"
+ },
+ "切り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiridaso"
+ },
+ "切り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiridashita"
+ },
+ "切り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiridashite"
+ },
+ "読み終わら": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiowara"
+ },
+ "読み終わり": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiowari"
+ },
+ "読み終われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomioware"
+ },
+ "読み終わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiowaro"
+ },
+ "読み終わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiowatta"
+ },
+ "読み終わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiowatte"
+ },
+ "行き着か": {
+ "w_type": "godan verb stem",
+ "romaji": "yukitsuka"
+ },
+ "行き着き": {
+ "w_type": "godan verb stem",
+ "romaji": "yukitsuki"
+ },
+ "行き着け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukitsuke"
+ },
+ "行き着こ": {
+ "w_type": "godan verb stem",
+ "romaji": "yukitsuko"
+ },
+ "行き着いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukitsuita"
+ },
+ "行き着いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukitsuite"
+ },
+ "吐散らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakichirasa"
+ },
+ "吐散らし": {
+ "w_type": "godan verb stem",
+ "romaji": "hakichirashi"
+ },
+ "吐散らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakichirase"
+ },
+ "吐散らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakichiraso"
+ },
+ "吐散らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakichirashita"
+ },
+ "吐散らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakichirashite"
+ },
+ "咳か": {
+ "w_type": "godan verb stem",
+ "romaji": "shiwabuka"
+ },
+ "咳き": {
+ "w_type": "godan verb stem",
+ "romaji": "shiwabuki"
+ },
+ "咳け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiwabuke"
+ },
+ "咳こ": {
+ "w_type": "godan verb stem",
+ "romaji": "shiwabuko"
+ },
+ "咳いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiwabuita"
+ },
+ "咳いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiwabuite"
+ },
+ "取りなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "torinaosa"
+ },
+ "取りなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "torinaoshi"
+ },
+ "取りなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinaose"
+ },
+ "取りなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "torinaoso"
+ },
+ "取りなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinaoshita"
+ },
+ "取りなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinaoshite"
+ },
+ "先細ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibosora"
+ },
+ "先細り": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibosori"
+ },
+ "先細れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibosore"
+ },
+ "先細ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakibosoro"
+ },
+ "先細った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibosotta"
+ },
+ "先細って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakibosotte"
+ },
+ "噎せ返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "musekaera"
+ },
+ "噎せ返り": {
+ "w_type": "godan verb stem",
+ "romaji": "musekaeri"
+ },
+ "噎せ返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musekaere"
+ },
+ "噎せ返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "musekaero"
+ },
+ "噎せ返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musekaetta"
+ },
+ "噎せ返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musekaette"
+ },
+ "奏さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sousa"
+ },
+ "奏し": {
+ "w_type": "godan verb stem",
+ "romaji": "soushi"
+ },
+ "奏せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "souse"
+ },
+ "奏そ": {
+ "w_type": "godan verb stem",
+ "romaji": "souso"
+ },
+ "奏した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soushita"
+ },
+ "奏して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soushite"
+ },
+ "感情にはしら": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashira"
+ },
+ "感情にはしり": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashiri"
+ },
+ "感情にはしれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashire"
+ },
+ "感情にはしろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashiro"
+ },
+ "感情にはしった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashitta"
+ },
+ "感情にはしって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashitte"
+ },
+ "まつわり付か": {
+ "w_type": "godan verb stem",
+ "romaji": "matowaritsuka"
+ },
+ "まつわり付き": {
+ "w_type": "godan verb stem",
+ "romaji": "matowaritsuki"
+ },
+ "まつわり付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matowaritsuke"
+ },
+ "まつわり付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "matowaritsuko"
+ },
+ "まつわり付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matowaritsuita"
+ },
+ "まつわり付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matowaritsuite"
+ },
+ "組織立た": {
+ "w_type": "godan verb stem",
+ "romaji": "soshikidata"
+ },
+ "組織立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "soshikidachi"
+ },
+ "組織立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soshikidate"
+ },
+ "組織立と": {
+ "w_type": "godan verb stem",
+ "romaji": "soshikidato"
+ },
+ "組織立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soshikidatta"
+ },
+ "組織立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "soshikidatte"
+ },
+ "洗い出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "araidasa"
+ },
+ "洗い出し": {
+ "w_type": "godan verb stem",
+ "romaji": "araidashi"
+ },
+ "洗い出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araidase"
+ },
+ "洗い出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "araidaso"
+ },
+ "洗い出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araidashita"
+ },
+ "洗い出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araidashite"
+ },
+ "書き落さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiotosa"
+ },
+ "書き落し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiotoshi"
+ },
+ "書き落せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiotose"
+ },
+ "書き落そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiotoso"
+ },
+ "書き落した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiotoshita"
+ },
+ "書き落して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiotoshite"
+ },
+ "跳ね飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobasa"
+ },
+ "跳ね飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobashi"
+ },
+ "跳ね飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobase"
+ },
+ "跳ね飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanetobaso"
+ },
+ "跳ね飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobashita"
+ },
+ "跳ね飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanetobashite"
+ },
+ "うち続か": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitsuzuka"
+ },
+ "うち続き": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitsuzuki"
+ },
+ "うち続け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitsuzuke"
+ },
+ "うち続こ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitsuzuko"
+ },
+ "うち続いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitsuzuita"
+ },
+ "うち続いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitsuzuite"
+ },
+ "出し惜しま": {
+ "w_type": "godan verb stem",
+ "romaji": "dashioshima"
+ },
+ "出し惜しみ": {
+ "w_type": "godan verb stem",
+ "romaji": "dashioshimi"
+ },
+ "出し惜しめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashioshime"
+ },
+ "出し惜しも": {
+ "w_type": "godan verb stem",
+ "romaji": "dashioshimo"
+ },
+ "出し惜しんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashioshinda"
+ },
+ "出し惜しんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashioshinde"
+ },
+ "進ま": {
+ "w_type": "godan verb stem",
+ "romaji": "susuma"
+ },
+ "進み": {
+ "w_type": "godan verb stem",
+ "romaji": "susumi"
+ },
+ "進め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susume"
+ },
+ "進も": {
+ "w_type": "godan verb stem",
+ "romaji": "susumo"
+ },
+ "進んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susunda"
+ },
+ "進んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susunde"
+ },
+ "入り組ま": {
+ "w_type": "godan verb stem",
+ "romaji": "irikuma"
+ },
+ "入り組み": {
+ "w_type": "godan verb stem",
+ "romaji": "irikumi"
+ },
+ "入り組め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "irikume"
+ },
+ "入り組も": {
+ "w_type": "godan verb stem",
+ "romaji": "irikumo"
+ },
+ "入り組んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "irikunda"
+ },
+ "入り組んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "irikunde"
+ },
+ "和ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nagoma"
+ },
+ "和み": {
+ "w_type": "godan verb stem",
+ "romaji": "nagomi"
+ },
+ "和め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagome"
+ },
+ "和も": {
+ "w_type": "godan verb stem",
+ "romaji": "nagomo"
+ },
+ "和んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagonda"
+ },
+ "和んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagonde"
+ },
+ "推し測ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakara"
+ },
+ "推し測り": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakari"
+ },
+ "推し測れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakare"
+ },
+ "推し測ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakaro"
+ },
+ "推し測った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakatta"
+ },
+ "推し測って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakatte"
+ },
+ "拗ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nejira"
+ },
+ "拗り": {
+ "w_type": "godan verb stem",
+ "romaji": "nejiri"
+ },
+ "拗れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejire"
+ },
+ "拗ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nejiro"
+ },
+ "拗った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejitta"
+ },
+ "拗って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejitte"
+ },
+ "刷り上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "suriagara"
+ },
+ "刷り上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "suriagari"
+ },
+ "刷り上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suriagare"
+ },
+ "刷り上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "suriagaro"
+ },
+ "刷り上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suriagatta"
+ },
+ "刷り上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suriagatte"
+ },
+ "熟さ": {
+ "w_type": "godan verb stem",
+ "romaji": "konasa"
+ },
+ "熟し": {
+ "w_type": "godan verb stem",
+ "romaji": "konashi"
+ },
+ "熟せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konase"
+ },
+ "熟そ": {
+ "w_type": "godan verb stem",
+ "romaji": "konaso"
+ },
+ "熟した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konashita"
+ },
+ "熟して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konashite"
+ },
+ "取り残さ": {
+ "w_type": "godan verb stem",
+ "romaji": "torinokosa"
+ },
+ "取り残し": {
+ "w_type": "godan verb stem",
+ "romaji": "torinokoshi"
+ },
+ "取り残せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinokose"
+ },
+ "取り残そ": {
+ "w_type": "godan verb stem",
+ "romaji": "torinokoso"
+ },
+ "取り残した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinokoshita"
+ },
+ "取り残して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torinokoshite"
+ },
+ "見舞わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mimawa"
+ },
+ "見舞い": {
+ "w_type": "godan verb stem",
+ "romaji": "mimai"
+ },
+ "見舞え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimae"
+ },
+ "見舞お": {
+ "w_type": "godan verb stem",
+ "romaji": "mimao"
+ },
+ "見舞った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimatta"
+ },
+ "見舞って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimatte"
+ },
+ "撃ち払わ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharawa"
+ },
+ "撃ち払い": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharai"
+ },
+ "撃ち払え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharae"
+ },
+ "撃ち払お": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharao"
+ },
+ "撃ち払った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharatta"
+ },
+ "撃ち払って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharatte"
+ },
+ "つり合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriawa"
+ },
+ "つり合い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriai"
+ },
+ "つり合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriae"
+ },
+ "つり合お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriao"
+ },
+ "つり合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriatta"
+ },
+ "つり合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriatte"
+ },
+ "込みあわ": {
+ "w_type": "godan verb stem",
+ "romaji": "komiawa"
+ },
+ "込みあい": {
+ "w_type": "godan verb stem",
+ "romaji": "komiai"
+ },
+ "込みあえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komiae"
+ },
+ "込みあお": {
+ "w_type": "godan verb stem",
+ "romaji": "komiao"
+ },
+ "込みあった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komiatta"
+ },
+ "込みあって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komiatte"
+ },
+ "卸さ": {
+ "w_type": "godan verb stem",
+ "romaji": "orosa"
+ },
+ "卸し": {
+ "w_type": "godan verb stem",
+ "romaji": "oroshi"
+ },
+ "卸せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orose"
+ },
+ "卸そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oroso"
+ },
+ "卸した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oroshita"
+ },
+ "卸して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oroshite"
+ },
+ "ひた走ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashira"
+ },
+ "ひた走り": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashiri"
+ },
+ "ひた走れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashire"
+ },
+ "ひた走ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hitahashiro"
+ },
+ "ひた走った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashitta"
+ },
+ "ひた走って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hitahashitte"
+ },
+ "見過さ": {
+ "w_type": "godan verb stem",
+ "romaji": "misugosa"
+ },
+ "見過し": {
+ "w_type": "godan verb stem",
+ "romaji": "misugoshi"
+ },
+ "見過せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugose"
+ },
+ "見過そ": {
+ "w_type": "godan verb stem",
+ "romaji": "misugoso"
+ },
+ "見過した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugoshita"
+ },
+ "見過して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misugoshite"
+ },
+ "狩出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "karidasa"
+ },
+ "狩出し": {
+ "w_type": "godan verb stem",
+ "romaji": "karidashi"
+ },
+ "狩出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karidase"
+ },
+ "狩出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "karidaso"
+ },
+ "狩出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karidashita"
+ },
+ "狩出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karidashite"
+ },
+ "使い倒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaitaosa"
+ },
+ "使い倒し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaitaoshi"
+ },
+ "使い倒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaitaose"
+ },
+ "使い倒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaitaoso"
+ },
+ "使い倒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaitaoshita"
+ },
+ "使い倒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukaitaoshite"
+ },
+ "はだ脱が": {
+ "w_type": "godan verb stem",
+ "romaji": "hadanuga"
+ },
+ "はだ脱ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "hadanugi"
+ },
+ "はだ脱げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hadanuge"
+ },
+ "はだ脱ご": {
+ "w_type": "godan verb stem",
+ "romaji": "hadanugo"
+ },
+ "はだ脱いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hadanuida"
+ },
+ "はだ脱いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hadanuide"
+ },
+ "噛み千切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kamichigira"
+ },
+ "噛み千切り": {
+ "w_type": "godan verb stem",
+ "romaji": "kamichigiri"
+ },
+ "噛み千切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamichigire"
+ },
+ "噛み千切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamichigiro"
+ },
+ "噛み千切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamichigitta"
+ },
+ "噛み千切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamichigitte"
+ },
+ "読みきら": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikira"
+ },
+ "読みきり": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikiri"
+ },
+ "読みきれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikire"
+ },
+ "読みきろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikiro"
+ },
+ "読みきった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikitta"
+ },
+ "読みきって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikitte"
+ },
+ "でんぐり返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "dengurigaera"
+ },
+ "でんぐり返り": {
+ "w_type": "godan verb stem",
+ "romaji": "dengurigaeri"
+ },
+ "でんぐり返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dengurigaere"
+ },
+ "でんぐり返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "dengurigaero"
+ },
+ "でんぐり返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dengurigaetta"
+ },
+ "でんぐり返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dengurigaette"
+ },
+ "煎りつか": {
+ "w_type": "godan verb stem",
+ "romaji": "iritsuka"
+ },
+ "煎りつき": {
+ "w_type": "godan verb stem",
+ "romaji": "iritsuki"
+ },
+ "煎りつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iritsuke"
+ },
+ "煎りつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "iritsuko"
+ },
+ "煎りついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iritsuita"
+ },
+ "煎りついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iritsuite"
+ },
+ "ぶち砕か": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikudaka"
+ },
+ "ぶち砕き": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikudaki"
+ },
+ "ぶち砕け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikudake"
+ },
+ "ぶち砕こ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikudako"
+ },
+ "ぶち砕いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikudaita"
+ },
+ "ぶち砕いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikudaite"
+ },
+ "列ば": {
+ "w_type": "godan verb stem",
+ "romaji": "naraba"
+ },
+ "列び": {
+ "w_type": "godan verb stem",
+ "romaji": "narabi"
+ },
+ "列べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "narabe"
+ },
+ "列ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "narabo"
+ },
+ "列んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naranda"
+ },
+ "列んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "narande"
+ },
+ "責っ付か": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuka"
+ },
+ "責っ付き": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuki"
+ },
+ "責っ付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuke"
+ },
+ "責っ付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuko"
+ },
+ "責っ付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuita"
+ },
+ "責っ付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuite"
+ },
+ "ぬぐい去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisara"
+ },
+ "ぬぐい去り": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisari"
+ },
+ "ぬぐい去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisare"
+ },
+ "ぬぐい去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisaro"
+ },
+ "ぬぐい去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisatta"
+ },
+ "ぬぐい去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisatte"
+ },
+ "織り交ざら": {
+ "w_type": "godan verb stem",
+ "romaji": "orimazara"
+ },
+ "織り交ざり": {
+ "w_type": "godan verb stem",
+ "romaji": "orimazari"
+ },
+ "織り交ざれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orimazare"
+ },
+ "織り交ざろ": {
+ "w_type": "godan verb stem",
+ "romaji": "orimazaro"
+ },
+ "織り交ざった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orimazatta"
+ },
+ "織り交ざって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orimazatte"
+ },
+ "灯ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tomora"
+ },
+ "灯り": {
+ "w_type": "godan verb stem",
+ "romaji": "tomori"
+ },
+ "灯れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomore"
+ },
+ "灯ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tomoro"
+ },
+ "灯った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomotta"
+ },
+ "灯って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomotte"
+ },
+ "拗らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kojirasa"
+ },
+ "拗らし": {
+ "w_type": "godan verb stem",
+ "romaji": "kojirashi"
+ },
+ "拗らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kojirase"
+ },
+ "拗らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kojiraso"
+ },
+ "拗らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kojirashita"
+ },
+ "拗らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kojirashite"
+ },
+ "哀れま": {
+ "w_type": "godan verb stem",
+ "romaji": "awarema"
+ },
+ "哀れみ": {
+ "w_type": "godan verb stem",
+ "romaji": "awaremi"
+ },
+ "哀れめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "awareme"
+ },
+ "哀れも": {
+ "w_type": "godan verb stem",
+ "romaji": "awaremo"
+ },
+ "哀れんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "awarenda"
+ },
+ "哀れんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "awarende"
+ },
+ "乳くり合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "chichikuriawa"
+ },
+ "乳くり合い": {
+ "w_type": "godan verb stem",
+ "romaji": "chichikuriai"
+ },
+ "乳くり合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chichikuriae"
+ },
+ "乳くり合お": {
+ "w_type": "godan verb stem",
+ "romaji": "chichikuriao"
+ },
+ "乳くり合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chichikuriatta"
+ },
+ "乳くり合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chichikuriatte"
+ },
+ "諱ま": {
+ "w_type": "godan verb stem",
+ "romaji": "ima"
+ },
+ "諱み": {
+ "w_type": "godan verb stem",
+ "romaji": "imi"
+ },
+ "諱め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ime"
+ },
+ "諱も": {
+ "w_type": "godan verb stem",
+ "romaji": "imo"
+ },
+ "諱んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "inda"
+ },
+ "諱んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "inde"
+ },
+ "僻ま": {
+ "w_type": "godan verb stem",
+ "romaji": "higama"
+ },
+ "僻み": {
+ "w_type": "godan verb stem",
+ "romaji": "higami"
+ },
+ "僻め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higame"
+ },
+ "僻も": {
+ "w_type": "godan verb stem",
+ "romaji": "higamo"
+ },
+ "僻んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higanda"
+ },
+ "僻んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "higande"
+ },
+ "面食らわ": {
+ "w_type": "godan verb stem",
+ "romaji": "menkurawa"
+ },
+ "面食らい": {
+ "w_type": "godan verb stem",
+ "romaji": "menkurai"
+ },
+ "面食らえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "menkurae"
+ },
+ "面食らお": {
+ "w_type": "godan verb stem",
+ "romaji": "menkurao"
+ },
+ "面食らった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "menkuratta"
+ },
+ "面食らって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "menkuratte"
+ },
+ "たち働か": {
+ "w_type": "godan verb stem",
+ "romaji": "tachihataraka"
+ },
+ "たち働き": {
+ "w_type": "godan verb stem",
+ "romaji": "tachihataraki"
+ },
+ "たち働け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachihatarake"
+ },
+ "たち働こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachihatarako"
+ },
+ "たち働いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachihataraita"
+ },
+ "たち働いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachihataraite"
+ },
+ "降注が": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosoga"
+ },
+ "降注ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosogi"
+ },
+ "降注げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoge"
+ },
+ "降注ご": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosogo"
+ },
+ "降注いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoida"
+ },
+ "降注いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoide"
+ },
+ "打ち毀さ": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowasa"
+ },
+ "打ち毀し": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowashi"
+ },
+ "打ち毀せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowase"
+ },
+ "打ち毀そ": {
+ "w_type": "godan verb stem",
+ "romaji": "buchikowaso"
+ },
+ "打ち毀した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowashita"
+ },
+ "打ち毀して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buchikowashite"
+ },
+ "治ら": {
+ "w_type": "godan verb stem",
+ "romaji": "naora"
+ },
+ "治り": {
+ "w_type": "godan verb stem",
+ "romaji": "naori"
+ },
+ "治れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naore"
+ },
+ "治ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "naoro"
+ },
+ "治った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naotta"
+ },
+ "治って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naotte"
+ },
+ "圧し掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakara"
+ },
+ "圧し掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakari"
+ },
+ "圧し掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakare"
+ },
+ "圧し掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakaro"
+ },
+ "圧し掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakatta"
+ },
+ "圧し掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakatte"
+ },
+ "酔いつぶさ": {
+ "w_type": "godan verb stem",
+ "romaji": "yoitsubusa"
+ },
+ "酔いつぶし": {
+ "w_type": "godan verb stem",
+ "romaji": "yoitsubushi"
+ },
+ "酔いつぶせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoitsubuse"
+ },
+ "酔いつぶそ": {
+ "w_type": "godan verb stem",
+ "romaji": "yoitsubuso"
+ },
+ "酔いつぶした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoitsubushita"
+ },
+ "酔いつぶして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yoitsubushite"
+ },
+ "尖がら": {
+ "w_type": "godan verb stem",
+ "romaji": "togara"
+ },
+ "尖がり": {
+ "w_type": "godan verb stem",
+ "romaji": "togari"
+ },
+ "尖がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "togare"
+ },
+ "尖がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "togaro"
+ },
+ "尖がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "togatta"
+ },
+ "尖がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "togatte"
+ },
+ "分捕ら": {
+ "w_type": "godan verb stem",
+ "romaji": "bundora"
+ },
+ "分捕り": {
+ "w_type": "godan verb stem",
+ "romaji": "bundori"
+ },
+ "分捕れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "bundore"
+ },
+ "分捕ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "bundoro"
+ },
+ "分捕った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "bundotta"
+ },
+ "分捕って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "bundotte"
+ },
+ "鬩ぎ合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "semegiawa"
+ },
+ "鬩ぎ合い": {
+ "w_type": "godan verb stem",
+ "romaji": "semegiai"
+ },
+ "鬩ぎ合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "semegiae"
+ },
+ "鬩ぎ合お": {
+ "w_type": "godan verb stem",
+ "romaji": "semegiao"
+ },
+ "鬩ぎ合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "semegiatta"
+ },
+ "鬩ぎ合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "semegiatte"
+ },
+ "訓ま": {
+ "w_type": "godan verb stem",
+ "romaji": "yoma"
+ },
+ "訓み": {
+ "w_type": "godan verb stem",
+ "romaji": "yomi"
+ },
+ "訓め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yome"
+ },
+ "訓も": {
+ "w_type": "godan verb stem",
+ "romaji": "yomo"
+ },
+ "訓んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yonda"
+ },
+ "訓んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yonde"
+ },
+ "纏わ": {
+ "w_type": "godan verb stem",
+ "romaji": "matowa"
+ },
+ "纏い": {
+ "w_type": "godan verb stem",
+ "romaji": "matoi"
+ },
+ "纏え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matoe"
+ },
+ "纏お": {
+ "w_type": "godan verb stem",
+ "romaji": "matoo"
+ },
+ "纏った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matotta"
+ },
+ "纏って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matotte"
+ },
+ "読み誤ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamara"
+ },
+ "読み誤り": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamari"
+ },
+ "読み誤れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamare"
+ },
+ "読み誤ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomiayamaro"
+ },
+ "読み誤った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamatta"
+ },
+ "読み誤って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomiayamatte"
+ },
+ "阿ねら": {
+ "w_type": "godan verb stem",
+ "romaji": "omonera"
+ },
+ "阿ねり": {
+ "w_type": "godan verb stem",
+ "romaji": "omoneri"
+ },
+ "阿ねれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omonere"
+ },
+ "阿ねろ": {
+ "w_type": "godan verb stem",
+ "romaji": "omonero"
+ },
+ "阿ねった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omonetta"
+ },
+ "阿ねって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omonette"
+ },
+ "回り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "mawarikoma"
+ },
+ "回り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "mawarikomi"
+ },
+ "回り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawarikome"
+ },
+ "回り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "mawarikomo"
+ },
+ "回り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawarikonda"
+ },
+ "回り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawarikonde"
+ },
+ "勝ち放さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kachihanasa"
+ },
+ "勝ち放し": {
+ "w_type": "godan verb stem",
+ "romaji": "kachihanashi"
+ },
+ "勝ち放せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kachihanase"
+ },
+ "勝ち放そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kachihanaso"
+ },
+ "勝ち放した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kachihanashita"
+ },
+ "勝ち放して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kachihanashite"
+ },
+ "笑わかさ": {
+ "w_type": "godan verb stem",
+ "romaji": "warawakasa"
+ },
+ "笑わかし": {
+ "w_type": "godan verb stem",
+ "romaji": "warawakashi"
+ },
+ "笑わかせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warawakase"
+ },
+ "笑わかそ": {
+ "w_type": "godan verb stem",
+ "romaji": "warawakaso"
+ },
+ "笑わかした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warawakashita"
+ },
+ "笑わかして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warawakashite"
+ },
+ "死に変ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shinikawara"
+ },
+ "死に変り": {
+ "w_type": "godan verb stem",
+ "romaji": "shinikawari"
+ },
+ "死に変れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinikaware"
+ },
+ "死に変ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shinikawaro"
+ },
+ "死に変った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinikawatta"
+ },
+ "死に変って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinikawatte"
+ },
+ "略さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ryakusa"
+ },
+ "略し": {
+ "w_type": "godan verb stem",
+ "romaji": "ryakushi"
+ },
+ "略せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ryakuse"
+ },
+ "略そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ryakuso"
+ },
+ "略した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ryakushita"
+ },
+ "略して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ryakushite"
+ },
+ "燃え上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagara"
+ },
+ "燃え上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagari"
+ },
+ "燃え上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagare"
+ },
+ "燃え上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagaro"
+ },
+ "燃え上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagatta"
+ },
+ "燃え上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagatte"
+ },
+ "分ちあわ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiawa"
+ },
+ "分ちあい": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiai"
+ },
+ "分ちあえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiae"
+ },
+ "分ちあお": {
+ "w_type": "godan verb stem",
+ "romaji": "wakachiao"
+ },
+ "分ちあった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiatta"
+ },
+ "分ちあって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakachiatte"
+ },
+ "述べ合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "nobeawa"
+ },
+ "述べ合い": {
+ "w_type": "godan verb stem",
+ "romaji": "nobeai"
+ },
+ "述べ合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobeae"
+ },
+ "述べ合お": {
+ "w_type": "godan verb stem",
+ "romaji": "nobeao"
+ },
+ "述べ合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobeatta"
+ },
+ "述べ合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobeatte"
+ },
+ "踊り狂わ": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikuruwa"
+ },
+ "踊り狂い": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikurui"
+ },
+ "踊り狂え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikurue"
+ },
+ "踊り狂お": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikuruo"
+ },
+ "踊り狂った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikurutta"
+ },
+ "踊り狂って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikurutte"
+ },
+ "届か": {
+ "w_type": "godan verb stem",
+ "romaji": "todoka"
+ },
+ "届き": {
+ "w_type": "godan verb stem",
+ "romaji": "todoki"
+ },
+ "届け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "todoke"
+ },
+ "届こ": {
+ "w_type": "godan verb stem",
+ "romaji": "todoko"
+ },
+ "届いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "todoita"
+ },
+ "届いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "todoite"
+ },
+ "噛砕か": {
+ "w_type": "godan verb stem",
+ "romaji": "kamikudaka"
+ },
+ "噛砕き": {
+ "w_type": "godan verb stem",
+ "romaji": "kamikudaki"
+ },
+ "噛砕け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamikudake"
+ },
+ "噛砕こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamikudako"
+ },
+ "噛砕いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamikudaita"
+ },
+ "噛砕いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamikudaite"
+ },
+ "撃払わ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharawa"
+ },
+ "撃払い": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharai"
+ },
+ "撃払え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharae"
+ },
+ "撃払お": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiharao"
+ },
+ "撃払った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharatta"
+ },
+ "撃払って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiharatte"
+ },
+ "役だた": {
+ "w_type": "godan verb stem",
+ "romaji": "yakudata"
+ },
+ "役だち": {
+ "w_type": "godan verb stem",
+ "romaji": "yakudachi"
+ },
+ "役だて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakudate"
+ },
+ "役だと": {
+ "w_type": "godan verb stem",
+ "romaji": "yakudato"
+ },
+ "役だった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakudatta"
+ },
+ "役だって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakudatte"
+ },
+ "巻き込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "makikoma"
+ },
+ "巻き込み": {
+ "w_type": "godan verb stem",
+ "romaji": "makikomi"
+ },
+ "巻き込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "makikome"
+ },
+ "巻き込も": {
+ "w_type": "godan verb stem",
+ "romaji": "makikomo"
+ },
+ "巻き込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "makikonda"
+ },
+ "巻き込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "makikonde"
+ },
+ "給わら": {
+ "w_type": "godan verb stem",
+ "romaji": "tamawara"
+ },
+ "給わり": {
+ "w_type": "godan verb stem",
+ "romaji": "tamawari"
+ },
+ "給われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamaware"
+ },
+ "給わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tamawaro"
+ },
+ "給わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamawatta"
+ },
+ "給わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamawatte"
+ },
+ "償わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsugunawa"
+ },
+ "償い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsugunai"
+ },
+ "償え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsugunae"
+ },
+ "償お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsugunao"
+ },
+ "償った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsugunatta"
+ },
+ "償って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsugunatte"
+ },
+ "揺り動か": {
+ "w_type": "godan verb stem",
+ "romaji": "yuriugoka"
+ },
+ "揺り動き": {
+ "w_type": "godan verb stem",
+ "romaji": "yuriugoki"
+ },
+ "揺り動け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yuriugoke"
+ },
+ "揺り動こ": {
+ "w_type": "godan verb stem",
+ "romaji": "yuriugoko"
+ },
+ "揺り動いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yuriugoita"
+ },
+ "揺り動いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yuriugoite"
+ },
+ "引継が": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsuga"
+ },
+ "引継ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsugi"
+ },
+ "引継げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuge"
+ },
+ "引継ご": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsugo"
+ },
+ "引継いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuida"
+ },
+ "引継いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuide"
+ },
+ "繕わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukurowa"
+ },
+ "繕い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuroi"
+ },
+ "繕え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuroe"
+ },
+ "繕お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuroo"
+ },
+ "繕った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukurotta"
+ },
+ "繕って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukurotte"
+ },
+ "討ち合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiawa"
+ },
+ "討ち合い": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiai"
+ },
+ "討ち合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiae"
+ },
+ "討ち合お": {
+ "w_type": "godan verb stem",
+ "romaji": "uchiao"
+ },
+ "討ち合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiatta"
+ },
+ "討ち合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchiatte"
+ },
+ "掛け合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeawa"
+ },
+ "掛け合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeai"
+ },
+ "掛け合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeae"
+ },
+ "掛け合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeao"
+ },
+ "掛け合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeatta"
+ },
+ "掛け合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeatte"
+ },
+ "むせび泣か": {
+ "w_type": "godan verb stem",
+ "romaji": "musebinaka"
+ },
+ "むせび泣き": {
+ "w_type": "godan verb stem",
+ "romaji": "musebinaki"
+ },
+ "むせび泣け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musebinake"
+ },
+ "むせび泣こ": {
+ "w_type": "godan verb stem",
+ "romaji": "musebinako"
+ },
+ "むせび泣いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musebinaita"
+ },
+ "むせび泣いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musebinaite"
+ },
+ "眺め遣ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nagameyara"
+ },
+ "眺め遣り": {
+ "w_type": "godan verb stem",
+ "romaji": "nagameyari"
+ },
+ "眺め遣れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagameyare"
+ },
+ "眺め遣ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagameyaro"
+ },
+ "眺め遣った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagameyatta"
+ },
+ "眺め遣って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagameyatte"
+ },
+ "見繕わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsukurowa"
+ },
+ "見繕い": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsukuroi"
+ },
+ "見繕え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsukuroe"
+ },
+ "見繕お": {
+ "w_type": "godan verb stem",
+ "romaji": "mitsukuroo"
+ },
+ "見繕った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsukurotta"
+ },
+ "見繕って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitsukurotte"
+ },
+ "溢れかえら": {
+ "w_type": "godan verb stem",
+ "romaji": "afurekaera"
+ },
+ "溢れかえり": {
+ "w_type": "godan verb stem",
+ "romaji": "afurekaeri"
+ },
+ "溢れかえれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afurekaere"
+ },
+ "溢れかえろ": {
+ "w_type": "godan verb stem",
+ "romaji": "afurekaero"
+ },
+ "溢れかえった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afurekaetta"
+ },
+ "溢れかえって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "afurekaette"
+ },
+ "抱き下ろさ": {
+ "w_type": "godan verb stem",
+ "romaji": "dakiorosa"
+ },
+ "抱き下ろし": {
+ "w_type": "godan verb stem",
+ "romaji": "dakioroshi"
+ },
+ "抱き下ろせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dakiorose"
+ },
+ "抱き下ろそ": {
+ "w_type": "godan verb stem",
+ "romaji": "dakioroso"
+ },
+ "抱き下ろした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dakioroshita"
+ },
+ "抱き下ろして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dakioroshite"
+ },
+ "粧わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yosoowa"
+ },
+ "粧い": {
+ "w_type": "godan verb stem",
+ "romaji": "yosooi"
+ },
+ "粧え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yosooe"
+ },
+ "粧お": {
+ "w_type": "godan verb stem",
+ "romaji": "yosooo"
+ },
+ "粧った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yosootta"
+ },
+ "粧って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yosootte"
+ },
+ "平伏さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hirefusa"
+ },
+ "平伏し": {
+ "w_type": "godan verb stem",
+ "romaji": "hirefushi"
+ },
+ "平伏せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirefuse"
+ },
+ "平伏そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hirefuso"
+ },
+ "平伏した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirefushita"
+ },
+ "平伏して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hirefushite"
+ },
+ "ほじくり返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaesa"
+ },
+ "ほじくり返し": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaeshi"
+ },
+ "ほじくり返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaese"
+ },
+ "ほじくり返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaeso"
+ },
+ "ほじくり返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaeshita"
+ },
+ "ほじくり返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaeshite"
+ },
+ "暖まら": {
+ "w_type": "godan verb stem",
+ "romaji": "atatamara"
+ },
+ "暖まり": {
+ "w_type": "godan verb stem",
+ "romaji": "atatamari"
+ },
+ "暖まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atatamare"
+ },
+ "暖まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "atatamaro"
+ },
+ "暖まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atatamatta"
+ },
+ "暖まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atatamatte"
+ },
+ "捜し出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashidasa"
+ },
+ "捜し出し": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashidashi"
+ },
+ "捜し出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashidase"
+ },
+ "捜し出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sagashidaso"
+ },
+ "捜し出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashidashita"
+ },
+ "捜し出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagashidashite"
+ },
+ "慶ば": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokoba"
+ },
+ "慶び": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokobi"
+ },
+ "慶べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokobe"
+ },
+ "慶ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokobo"
+ },
+ "慶んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokonda"
+ },
+ "慶んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokonde"
+ },
+ "読み損わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisokonawa"
+ },
+ "読み損い": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisokonai"
+ },
+ "読み損え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisokonae"
+ },
+ "読み損お": {
+ "w_type": "godan verb stem",
+ "romaji": "yomisokonao"
+ },
+ "読み損った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisokonatta"
+ },
+ "読み損って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomisokonatte"
+ },
+ "伸さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nosa"
+ },
+ "伸し": {
+ "w_type": "godan verb stem",
+ "romaji": "noshi"
+ },
+ "伸せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nose"
+ },
+ "伸そ": {
+ "w_type": "godan verb stem",
+ "romaji": "noso"
+ },
+ "伸した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshita"
+ },
+ "伸して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshite"
+ },
+ "巣くわ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukuwa"
+ },
+ "巣くい": {
+ "w_type": "godan verb stem",
+ "romaji": "sukui"
+ },
+ "巣くえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukue"
+ },
+ "巣くお": {
+ "w_type": "godan verb stem",
+ "romaji": "sukuo"
+ },
+ "巣くった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukutta"
+ },
+ "巣くって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukutte"
+ },
+ "吹きしきら": {
+ "w_type": "godan verb stem",
+ "romaji": "fukishikira"
+ },
+ "吹きしきり": {
+ "w_type": "godan verb stem",
+ "romaji": "fukishikiri"
+ },
+ "吹きしきれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukishikire"
+ },
+ "吹きしきろ": {
+ "w_type": "godan verb stem",
+ "romaji": "fukishikiro"
+ },
+ "吹きしきった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukishikitta"
+ },
+ "吹きしきって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukishikitte"
+ },
+ "たけり立た": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritata"
+ },
+ "たけり立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritachi"
+ },
+ "たけり立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritate"
+ },
+ "たけり立と": {
+ "w_type": "godan verb stem",
+ "romaji": "takeritato"
+ },
+ "たけり立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritatta"
+ },
+ "たけり立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "takeritatte"
+ },
+ "言合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "iiawa"
+ },
+ "言合い": {
+ "w_type": "godan verb stem",
+ "romaji": "iiai"
+ },
+ "言合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiae"
+ },
+ "言合お": {
+ "w_type": "godan verb stem",
+ "romaji": "iiao"
+ },
+ "言合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiatta"
+ },
+ "言合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iiatte"
+ },
+ "崩れ去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kuzuresara"
+ },
+ "崩れ去り": {
+ "w_type": "godan verb stem",
+ "romaji": "kuzuresari"
+ },
+ "崩れ去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuzuresare"
+ },
+ "崩れ去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuzuresaro"
+ },
+ "崩れ去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuzuresatta"
+ },
+ "崩れ去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuzuresatte"
+ },
+ "入り浸ら": {
+ "w_type": "godan verb stem",
+ "romaji": "iribitara"
+ },
+ "入り浸り": {
+ "w_type": "godan verb stem",
+ "romaji": "iribitari"
+ },
+ "入り浸れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iribitare"
+ },
+ "入り浸ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "iribitaro"
+ },
+ "入り浸った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iribitatta"
+ },
+ "入り浸って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iribitatte"
+ },
+ "泣き喚か": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiwameka"
+ },
+ "泣き喚き": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiwameki"
+ },
+ "泣き喚け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiwameke"
+ },
+ "泣き喚こ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiwameko"
+ },
+ "泣き喚いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiwameita"
+ },
+ "泣き喚いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiwameite"
+ },
+ "萌やさ": {
+ "w_type": "godan verb stem",
+ "romaji": "moyasa"
+ },
+ "萌やし": {
+ "w_type": "godan verb stem",
+ "romaji": "moyashi"
+ },
+ "萌やせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moyase"
+ },
+ "萌やそ": {
+ "w_type": "godan verb stem",
+ "romaji": "moyaso"
+ },
+ "萌やした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moyashita"
+ },
+ "萌やして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moyashite"
+ },
+ "寝転がら": {
+ "w_type": "godan verb stem",
+ "romaji": "nekorogara"
+ },
+ "寝転がり": {
+ "w_type": "godan verb stem",
+ "romaji": "nekorogari"
+ },
+ "寝転がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekorogare"
+ },
+ "寝転がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nekorogaro"
+ },
+ "寝転がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekorogatta"
+ },
+ "寝転がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekorogatte"
+ },
+ "恐れおののか": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreononoka"
+ },
+ "恐れおののき": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreononoki"
+ },
+ "恐れおののけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreononoke"
+ },
+ "恐れおののこ": {
+ "w_type": "godan verb stem",
+ "romaji": "osoreononoko"
+ },
+ "恐れおののいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreononoita"
+ },
+ "恐れおののいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "osoreononoite"
+ },
+ "踏み荒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "fumiarasa"
+ },
+ "踏み荒し": {
+ "w_type": "godan verb stem",
+ "romaji": "fumiarashi"
+ },
+ "踏み荒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumiarase"
+ },
+ "踏み荒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "fumiaraso"
+ },
+ "踏み荒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumiarashita"
+ },
+ "踏み荒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fumiarashite"
+ },
+ "泣き落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiotosa"
+ },
+ "泣き落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiotoshi"
+ },
+ "泣き落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiotose"
+ },
+ "泣き落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakiotoso"
+ },
+ "泣き落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiotoshita"
+ },
+ "泣き落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakiotoshite"
+ },
+ "野次ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yajira"
+ },
+ "野次り": {
+ "w_type": "godan verb stem",
+ "romaji": "yajiri"
+ },
+ "野次れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yajire"
+ },
+ "野次ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yajiro"
+ },
+ "野次った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yajitta"
+ },
+ "野次って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yajitte"
+ },
+ "貶ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sagesuma"
+ },
+ "貶み": {
+ "w_type": "godan verb stem",
+ "romaji": "sagesumi"
+ },
+ "貶め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagesume"
+ },
+ "貶も": {
+ "w_type": "godan verb stem",
+ "romaji": "sagesumo"
+ },
+ "貶んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagesunda"
+ },
+ "貶んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sagesunde"
+ },
+ "泣潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakitsubusa"
+ },
+ "泣潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "nakitsubushi"
+ },
+ "泣潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakitsubuse"
+ },
+ "泣潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nakitsubuso"
+ },
+ "泣潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakitsubushita"
+ },
+ "泣潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nakitsubushite"
+ },
+ "名告ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nanora"
+ },
+ "名告り": {
+ "w_type": "godan verb stem",
+ "romaji": "nanori"
+ },
+ "名告れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nanore"
+ },
+ "名告ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nanoro"
+ },
+ "名告った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nanotta"
+ },
+ "名告って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nanotte"
+ },
+ "出かから": {
+ "w_type": "godan verb stem",
+ "romaji": "dekakara"
+ },
+ "出かかり": {
+ "w_type": "godan verb stem",
+ "romaji": "dekakari"
+ },
+ "出かかれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dekakare"
+ },
+ "出かかろ": {
+ "w_type": "godan verb stem",
+ "romaji": "dekakaro"
+ },
+ "出かかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dekakatta"
+ },
+ "出かかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dekakatte"
+ },
+ "交わし合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawashiawa"
+ },
+ "交わし合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kawashiai"
+ },
+ "交わし合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashiae"
+ },
+ "交わし合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kawashiao"
+ },
+ "交わし合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashiatta"
+ },
+ "交わし合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashiatte"
+ },
+ "言聞かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "iikikasa"
+ },
+ "言聞かし": {
+ "w_type": "godan verb stem",
+ "romaji": "iikikashi"
+ },
+ "言聞かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikikase"
+ },
+ "言聞かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "iikikaso"
+ },
+ "言聞かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikikashita"
+ },
+ "言聞かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iikikashite"
+ },
+ "貶さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kenasa"
+ },
+ "貶し": {
+ "w_type": "godan verb stem",
+ "romaji": "kenashi"
+ },
+ "貶せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kenase"
+ },
+ "貶そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kenaso"
+ },
+ "貶した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kenashita"
+ },
+ "貶して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kenashite"
+ },
+ "塗りつぶさ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubusa"
+ },
+ "塗りつぶし": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubushi"
+ },
+ "塗りつぶせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubuse"
+ },
+ "塗りつぶそ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubuso"
+ },
+ "塗りつぶした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubushita"
+ },
+ "塗りつぶして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubushite"
+ },
+ "縫いなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuinaosa"
+ },
+ "縫いなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "nuinaoshi"
+ },
+ "縫いなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuinaose"
+ },
+ "縫いなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuinaoso"
+ },
+ "縫いなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuinaoshita"
+ },
+ "縫いなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuinaoshite"
+ },
+ "連れて行か": {
+ "w_type": "godan verb stem",
+ "romaji": "tsureteika"
+ },
+ "連れて行き": {
+ "w_type": "godan verb stem",
+ "romaji": "tsureteiki"
+ },
+ "連れて行け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsureteike"
+ },
+ "連れて行こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsureteiko"
+ },
+ "連れて行いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsureteiita"
+ },
+ "連れて行いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsureteiite"
+ },
+ "取殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "torikorosa"
+ },
+ "取殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "torikoroshi"
+ },
+ "取殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikorose"
+ },
+ "取殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "torikoroso"
+ },
+ "取殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikoroshita"
+ },
+ "取殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikoroshite"
+ },
+ "飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobasa"
+ },
+ "飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "tobashi"
+ },
+ "飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobase"
+ },
+ "飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobaso"
+ },
+ "飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobashita"
+ },
+ "飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobashite"
+ },
+ "翻筋斗打た": {
+ "w_type": "godan verb stem",
+ "romaji": "mondoriuta"
+ },
+ "翻筋斗打ち": {
+ "w_type": "godan verb stem",
+ "romaji": "mondoriuchi"
+ },
+ "翻筋斗打て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mondoriute"
+ },
+ "翻筋斗打と": {
+ "w_type": "godan verb stem",
+ "romaji": "mondoriuto"
+ },
+ "翻筋斗打った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mondoriutta"
+ },
+ "翻筋斗打って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mondoriutte"
+ },
+ "掴み合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukamiawa"
+ },
+ "掴み合い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukamiai"
+ },
+ "掴み合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukamiae"
+ },
+ "掴み合お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukamiao"
+ },
+ "掴み合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukamiatta"
+ },
+ "掴み合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukamiatte"
+ },
+ "引離さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikihanasa"
+ },
+ "引離し": {
+ "w_type": "godan verb stem",
+ "romaji": "hikihanashi"
+ },
+ "引離せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikihanase"
+ },
+ "引離そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikihanaso"
+ },
+ "引離した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikihanashita"
+ },
+ "引離して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikihanashite"
+ },
+ "融け込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekoma"
+ },
+ "融け込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekomi"
+ },
+ "融け込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekome"
+ },
+ "融け込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekomo"
+ },
+ "融け込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekonda"
+ },
+ "融け込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekonde"
+ },
+ "ゆすり取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yusuritora"
+ },
+ "ゆすり取り": {
+ "w_type": "godan verb stem",
+ "romaji": "yusuritori"
+ },
+ "ゆすり取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yusuritore"
+ },
+ "ゆすり取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yusuritoro"
+ },
+ "ゆすり取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yusuritotta"
+ },
+ "ゆすり取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yusuritotte"
+ },
+ "あきれ返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "akirekaera"
+ },
+ "あきれ返り": {
+ "w_type": "godan verb stem",
+ "romaji": "akirekaeri"
+ },
+ "あきれ返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akirekaere"
+ },
+ "あきれ返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "akirekaero"
+ },
+ "あきれ返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akirekaetta"
+ },
+ "あきれ返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akirekaette"
+ },
+ "呑ま": {
+ "w_type": "godan verb stem",
+ "romaji": "noma"
+ },
+ "呑み": {
+ "w_type": "godan verb stem",
+ "romaji": "nomi"
+ },
+ "呑め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nome"
+ },
+ "呑も": {
+ "w_type": "godan verb stem",
+ "romaji": "nomo"
+ },
+ "呑んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nonda"
+ },
+ "呑んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nonde"
+ },
+ "飛びかわ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikawa"
+ },
+ "飛びかい": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikai"
+ },
+ "飛びかえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikae"
+ },
+ "飛びかお": {
+ "w_type": "godan verb stem",
+ "romaji": "tobikao"
+ },
+ "飛びかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikatta"
+ },
+ "飛びかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobikatte"
+ },
+ "貪り食わ": {
+ "w_type": "godan verb stem",
+ "romaji": "musaborikuwa"
+ },
+ "貪り食い": {
+ "w_type": "godan verb stem",
+ "romaji": "musaborikui"
+ },
+ "貪り食え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaborikue"
+ },
+ "貪り食お": {
+ "w_type": "godan verb stem",
+ "romaji": "musaborikuo"
+ },
+ "貪り食った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaborikutta"
+ },
+ "貪り食って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaborikutte"
+ },
+ "降り掛ら": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakara"
+ },
+ "降り掛り": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakari"
+ },
+ "降り掛れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakare"
+ },
+ "降り掛ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakaro"
+ },
+ "降り掛った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakatta"
+ },
+ "降り掛って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakatte"
+ },
+ "染込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikoma"
+ },
+ "染込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomi"
+ },
+ "染込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikome"
+ },
+ "染込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shimikomo"
+ },
+ "染込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonda"
+ },
+ "染込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimikonde"
+ },
+ "慕わ": {
+ "w_type": "godan verb stem",
+ "romaji": "shitawa"
+ },
+ "慕い": {
+ "w_type": "godan verb stem",
+ "romaji": "shitai"
+ },
+ "慕え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitae"
+ },
+ "慕お": {
+ "w_type": "godan verb stem",
+ "romaji": "shitao"
+ },
+ "慕った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitatta"
+ },
+ "慕って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitatte"
+ },
+ "跳び付か": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuka"
+ },
+ "跳び付き": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuki"
+ },
+ "跳び付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuke"
+ },
+ "跳び付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuko"
+ },
+ "跳び付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuita"
+ },
+ "跳び付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuite"
+ },
+ "愚図付か": {
+ "w_type": "godan verb stem",
+ "romaji": "guzutsuka"
+ },
+ "愚図付き": {
+ "w_type": "godan verb stem",
+ "romaji": "guzutsuki"
+ },
+ "愚図付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "guzutsuke"
+ },
+ "愚図付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "guzutsuko"
+ },
+ "愚図付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "guzutsuita"
+ },
+ "愚図付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "guzutsuite"
+ },
+ "言い放た": {
+ "w_type": "godan verb stem",
+ "romaji": "iihanata"
+ },
+ "言い放ち": {
+ "w_type": "godan verb stem",
+ "romaji": "iihanachi"
+ },
+ "言い放て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihanate"
+ },
+ "言い放と": {
+ "w_type": "godan verb stem",
+ "romaji": "iihanato"
+ },
+ "言い放った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihanatta"
+ },
+ "言い放って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihanatte"
+ },
+ "取り去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "torisara"
+ },
+ "取り去り": {
+ "w_type": "godan verb stem",
+ "romaji": "torisari"
+ },
+ "取り去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torisare"
+ },
+ "取り去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "torisaro"
+ },
+ "取り去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torisatta"
+ },
+ "取り去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torisatte"
+ },
+ "凍てつか": {
+ "w_type": "godan verb stem",
+ "romaji": "itetsuka"
+ },
+ "凍てつき": {
+ "w_type": "godan verb stem",
+ "romaji": "itetsuki"
+ },
+ "凍てつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itetsuke"
+ },
+ "凍てつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "itetsuko"
+ },
+ "凍てついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itetsuita"
+ },
+ "凍てついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itetsuite"
+ },
+ "晴れ上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "hareagara"
+ },
+ "晴れ上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "hareagari"
+ },
+ "晴れ上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hareagare"
+ },
+ "晴れ上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hareagaro"
+ },
+ "晴れ上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hareagatta"
+ },
+ "晴れ上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hareagatte"
+ },
+ "炊か": {
+ "w_type": "godan verb stem",
+ "romaji": "taka"
+ },
+ "炊き": {
+ "w_type": "godan verb stem",
+ "romaji": "taki"
+ },
+ "炊け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "take"
+ },
+ "炊こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tako"
+ },
+ "炊いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "taita"
+ },
+ "炊いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "taite"
+ },
+ "引っ込まさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkomasa"
+ },
+ "引っ込まし": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkomashi"
+ },
+ "引っ込ませ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkomase"
+ },
+ "引っ込まそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkomaso"
+ },
+ "引っ込ました": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkomashita"
+ },
+ "引っ込まして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkomashite"
+ },
+ "追いやら": {
+ "w_type": "godan verb stem",
+ "romaji": "oiyara"
+ },
+ "追いやり": {
+ "w_type": "godan verb stem",
+ "romaji": "oiyari"
+ },
+ "追いやれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiyare"
+ },
+ "追いやろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oiyaro"
+ },
+ "追いやった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiyatta"
+ },
+ "追いやって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiyatte"
+ },
+ "間誤付か": {
+ "w_type": "godan verb stem",
+ "romaji": "magotsuka"
+ },
+ "間誤付き": {
+ "w_type": "godan verb stem",
+ "romaji": "magotsuki"
+ },
+ "間誤付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magotsuke"
+ },
+ "間誤付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "magotsuko"
+ },
+ "間誤付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magotsuita"
+ },
+ "間誤付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magotsuite"
+ },
+ "立ち返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tachikaera"
+ },
+ "立ち返り": {
+ "w_type": "godan verb stem",
+ "romaji": "tachikaeri"
+ },
+ "立ち返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachikaere"
+ },
+ "立ち返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachikaero"
+ },
+ "立ち返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachikaetta"
+ },
+ "立ち返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachikaette"
+ },
+ "寝取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "netora"
+ },
+ "寝取り": {
+ "w_type": "godan verb stem",
+ "romaji": "netori"
+ },
+ "寝取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "netore"
+ },
+ "寝取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "netoro"
+ },
+ "寝取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "netotta"
+ },
+ "寝取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "netotte"
+ },
+ "追い返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "oikaesa"
+ },
+ "追い返し": {
+ "w_type": "godan verb stem",
+ "romaji": "oikaeshi"
+ },
+ "追い返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikaese"
+ },
+ "追い返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oikaeso"
+ },
+ "追い返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikaeshita"
+ },
+ "追い返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oikaeshite"
+ },
+ "押っ立た": {
+ "w_type": "godan verb stem",
+ "romaji": "ottata"
+ },
+ "押っ立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "ottachi"
+ },
+ "押っ立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ottate"
+ },
+ "押っ立と": {
+ "w_type": "godan verb stem",
+ "romaji": "ottato"
+ },
+ "押っ立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ottatta"
+ },
+ "押っ立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ottatte"
+ },
+ "踏ま": {
+ "w_type": "godan verb stem",
+ "romaji": "fuma"
+ },
+ "踏み": {
+ "w_type": "godan verb stem",
+ "romaji": "fumi"
+ },
+ "踏め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fume"
+ },
+ "踏も": {
+ "w_type": "godan verb stem",
+ "romaji": "fumo"
+ },
+ "踏んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "funda"
+ },
+ "踏んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "funde"
+ },
+ "引き摺ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikizura"
+ },
+ "引き摺り": {
+ "w_type": "godan verb stem",
+ "romaji": "hikizuri"
+ },
+ "引き摺れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikizure"
+ },
+ "引き摺ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikizuro"
+ },
+ "引き摺った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikizutta"
+ },
+ "引き摺って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikizutte"
+ },
+ "勾引さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowasa"
+ },
+ "勾引し": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowashi"
+ },
+ "勾引せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowase"
+ },
+ "勾引そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kadowaso"
+ },
+ "勾引した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowashita"
+ },
+ "勾引して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kadowashite"
+ },
+ "見てとら": {
+ "w_type": "godan verb stem",
+ "romaji": "mitetora"
+ },
+ "見てとり": {
+ "w_type": "godan verb stem",
+ "romaji": "mitetori"
+ },
+ "見てとれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitetore"
+ },
+ "見てとろ": {
+ "w_type": "godan verb stem",
+ "romaji": "mitetoro"
+ },
+ "見てとった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitetotta"
+ },
+ "見てとって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitetotte"
+ },
+ "見損なわ": {
+ "w_type": "godan verb stem",
+ "romaji": "misokonawa"
+ },
+ "見損ない": {
+ "w_type": "godan verb stem",
+ "romaji": "misokonai"
+ },
+ "見損なえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misokonae"
+ },
+ "見損なお": {
+ "w_type": "godan verb stem",
+ "romaji": "misokonao"
+ },
+ "見損なった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misokonatta"
+ },
+ "見損なって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "misokonatte"
+ },
+ "一席打た": {
+ "w_type": "godan verb stem",
+ "romaji": "issekibuta"
+ },
+ "一席打ち": {
+ "w_type": "godan verb stem",
+ "romaji": "issekibuchi"
+ },
+ "一席打て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "issekibute"
+ },
+ "一席打と": {
+ "w_type": "godan verb stem",
+ "romaji": "issekibuto"
+ },
+ "一席打った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "issekibutta"
+ },
+ "一席打って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "issekibutte"
+ },
+ "ごった返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaesa"
+ },
+ "ごった返し": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaeshi"
+ },
+ "ごった返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaese"
+ },
+ "ごった返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaeso"
+ },
+ "ごった返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaeshita"
+ },
+ "ごった返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaeshite"
+ },
+ "言囃さ": {
+ "w_type": "godan verb stem",
+ "romaji": "iihayasa"
+ },
+ "言囃し": {
+ "w_type": "godan verb stem",
+ "romaji": "iihayashi"
+ },
+ "言囃せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihayase"
+ },
+ "言囃そ": {
+ "w_type": "godan verb stem",
+ "romaji": "iihayaso"
+ },
+ "言囃した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihayashita"
+ },
+ "言囃して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iihayashite"
+ },
+ "つれ帰ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurekaera"
+ },
+ "つれ帰り": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurekaeri"
+ },
+ "つれ帰れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurekaere"
+ },
+ "つれ帰ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurekaero"
+ },
+ "つれ帰った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurekaetta"
+ },
+ "つれ帰って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurekaette"
+ },
+ "書き飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitobasa"
+ },
+ "書き飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitobashi"
+ },
+ "書き飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitobase"
+ },
+ "書き飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakitobaso"
+ },
+ "書き飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitobashita"
+ },
+ "書き飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakitobashite"
+ },
+ "邀え撃た": {
+ "w_type": "godan verb stem",
+ "romaji": "mukaeuta"
+ },
+ "邀え撃ち": {
+ "w_type": "godan verb stem",
+ "romaji": "mukaeuchi"
+ },
+ "邀え撃て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukaeute"
+ },
+ "邀え撃と": {
+ "w_type": "godan verb stem",
+ "romaji": "mukaeuto"
+ },
+ "邀え撃った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukaeutta"
+ },
+ "邀え撃って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukaeutte"
+ },
+ "挾ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hasama"
+ },
+ "挾み": {
+ "w_type": "godan verb stem",
+ "romaji": "hasami"
+ },
+ "挾め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hasame"
+ },
+ "挾も": {
+ "w_type": "godan verb stem",
+ "romaji": "hasamo"
+ },
+ "挾んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hasanda"
+ },
+ "挾んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hasande"
+ },
+ "迫上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagara"
+ },
+ "迫上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagari"
+ },
+ "迫上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagare"
+ },
+ "迫上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagaro"
+ },
+ "迫上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagatta"
+ },
+ "迫上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagatte"
+ },
+ "空嘯か": {
+ "w_type": "godan verb stem",
+ "romaji": "sorausobuka"
+ },
+ "空嘯き": {
+ "w_type": "godan verb stem",
+ "romaji": "sorausobuki"
+ },
+ "空嘯け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sorausobuke"
+ },
+ "空嘯こ": {
+ "w_type": "godan verb stem",
+ "romaji": "sorausobuko"
+ },
+ "空嘯いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sorausobuita"
+ },
+ "空嘯いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sorausobuite"
+ },
+ "見まわさ": {
+ "w_type": "godan verb stem",
+ "romaji": "mimawasa"
+ },
+ "見まわし": {
+ "w_type": "godan verb stem",
+ "romaji": "mimawashi"
+ },
+ "見まわせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimawase"
+ },
+ "見まわそ": {
+ "w_type": "godan verb stem",
+ "romaji": "mimawaso"
+ },
+ "見まわした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimawashita"
+ },
+ "見まわして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mimawashite"
+ },
+ "乗り潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "noritsubusa"
+ },
+ "乗り潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "noritsubushi"
+ },
+ "乗り潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noritsubuse"
+ },
+ "乗り潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "noritsubuso"
+ },
+ "乗り潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noritsubushita"
+ },
+ "乗り潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noritsubushite"
+ },
+ "割り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "waridasa"
+ },
+ "割り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "waridashi"
+ },
+ "割り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "waridase"
+ },
+ "割り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "waridaso"
+ },
+ "割り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "waridashita"
+ },
+ "割り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "waridashite"
+ },
+ "攫わ": {
+ "w_type": "godan verb stem",
+ "romaji": "sarawa"
+ },
+ "攫い": {
+ "w_type": "godan verb stem",
+ "romaji": "sarai"
+ },
+ "攫え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sarae"
+ },
+ "攫お": {
+ "w_type": "godan verb stem",
+ "romaji": "sarao"
+ },
+ "攫った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saratta"
+ },
+ "攫って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saratte"
+ },
+ "挙ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kozora"
+ },
+ "挙り": {
+ "w_type": "godan verb stem",
+ "romaji": "kozori"
+ },
+ "挙れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kozore"
+ },
+ "挙ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kozoro"
+ },
+ "挙った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kozotta"
+ },
+ "挙って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kozotte"
+ },
+ "心づか": {
+ "w_type": "godan verb stem",
+ "romaji": "kokorozuka"
+ },
+ "心づき": {
+ "w_type": "godan verb stem",
+ "romaji": "kokorozuki"
+ },
+ "心づけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokorozuke"
+ },
+ "心づこ": {
+ "w_type": "godan verb stem",
+ "romaji": "kokorozuko"
+ },
+ "心づいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokorozuita"
+ },
+ "心づいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokorozuite"
+ },
+ "断ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kotowara"
+ },
+ "断り": {
+ "w_type": "godan verb stem",
+ "romaji": "kotowari"
+ },
+ "断れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotoware"
+ },
+ "断ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kotowaro"
+ },
+ "断った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotowatta"
+ },
+ "断って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotowatte"
+ },
+ "言散らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "iichirasa"
+ },
+ "言散らし": {
+ "w_type": "godan verb stem",
+ "romaji": "iichirashi"
+ },
+ "言散らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iichirase"
+ },
+ "言散らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "iichiraso"
+ },
+ "言散らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iichirashita"
+ },
+ "言散らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iichirashite"
+ },
+ "感情に走ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashira"
+ },
+ "感情に走り": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashiri"
+ },
+ "感情に走れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashire"
+ },
+ "感情に走ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kanjounihashiro"
+ },
+ "感情に走った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashitta"
+ },
+ "感情に走って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanjounihashitte"
+ },
+ "喜歌わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokobiutawa"
+ },
+ "喜歌い": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokobiutai"
+ },
+ "喜歌え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokobiutae"
+ },
+ "喜歌お": {
+ "w_type": "godan verb stem",
+ "romaji": "yorokobiutao"
+ },
+ "喜歌った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokobiutatta"
+ },
+ "喜歌って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorokobiutatte"
+ },
+ "刈り葺か": {
+ "w_type": "godan verb stem",
+ "romaji": "karifuka"
+ },
+ "刈り葺き": {
+ "w_type": "godan verb stem",
+ "romaji": "karifuki"
+ },
+ "刈り葺け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karifuke"
+ },
+ "刈り葺こ": {
+ "w_type": "godan verb stem",
+ "romaji": "karifuko"
+ },
+ "刈り葺いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karifuita"
+ },
+ "刈り葺いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karifuite"
+ },
+ "俟た": {
+ "w_type": "godan verb stem",
+ "romaji": "mata"
+ },
+ "俟ち": {
+ "w_type": "godan verb stem",
+ "romaji": "machi"
+ },
+ "俟て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mate"
+ },
+ "俟と": {
+ "w_type": "godan verb stem",
+ "romaji": "mato"
+ },
+ "俟った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matta"
+ },
+ "俟って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matte"
+ },
+ "噛み合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamiawa"
+ },
+ "噛み合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kamiai"
+ },
+ "噛み合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamiae"
+ },
+ "噛み合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kamiao"
+ },
+ "噛み合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamiatta"
+ },
+ "噛み合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamiatte"
+ },
+ "溜め込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekoma"
+ },
+ "溜め込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekomi"
+ },
+ "溜め込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekome"
+ },
+ "溜め込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekomo"
+ },
+ "溜め込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekonda"
+ },
+ "溜め込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekonde"
+ },
+ "上廻ら": {
+ "w_type": "godan verb stem",
+ "romaji": "uwamawara"
+ },
+ "上廻り": {
+ "w_type": "godan verb stem",
+ "romaji": "uwamawari"
+ },
+ "上廻れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwamaware"
+ },
+ "上廻ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "uwamawaro"
+ },
+ "上廻った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwamawatta"
+ },
+ "上廻って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwamawatte"
+ },
+ "練歩か": {
+ "w_type": "godan verb stem",
+ "romaji": "neriaruka"
+ },
+ "練歩き": {
+ "w_type": "godan verb stem",
+ "romaji": "neriaruki"
+ },
+ "練歩け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "neriaruke"
+ },
+ "練歩こ": {
+ "w_type": "godan verb stem",
+ "romaji": "neriaruko"
+ },
+ "練歩いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "neriaruita"
+ },
+ "練歩いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "neriaruite"
+ },
+ "乗り過ごさ": {
+ "w_type": "godan verb stem",
+ "romaji": "norisugosa"
+ },
+ "乗り過ごし": {
+ "w_type": "godan verb stem",
+ "romaji": "norisugoshi"
+ },
+ "乗り過ごせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norisugose"
+ },
+ "乗り過ごそ": {
+ "w_type": "godan verb stem",
+ "romaji": "norisugoso"
+ },
+ "乗り過ごした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norisugoshita"
+ },
+ "乗り過ごして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "norisugoshite"
+ },
+ "こね返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "konekaesa"
+ },
+ "こね返し": {
+ "w_type": "godan verb stem",
+ "romaji": "konekaeshi"
+ },
+ "こね返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konekaese"
+ },
+ "こね返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "konekaeso"
+ },
+ "こね返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konekaeshita"
+ },
+ "こね返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "konekaeshite"
+ },
+ "通りすがら": {
+ "w_type": "godan verb stem",
+ "romaji": "toorisugara"
+ },
+ "通りすがり": {
+ "w_type": "godan verb stem",
+ "romaji": "toorisugari"
+ },
+ "通りすがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toorisugare"
+ },
+ "通りすがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "toorisugaro"
+ },
+ "通りすがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toorisugatta"
+ },
+ "通りすがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toorisugatte"
+ },
+ "拭い去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisara"
+ },
+ "拭い去り": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisari"
+ },
+ "拭い去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisare"
+ },
+ "拭い去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuguisaro"
+ },
+ "拭い去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisatta"
+ },
+ "拭い去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuguisatte"
+ },
+ "佇ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tatazuma"
+ },
+ "佇み": {
+ "w_type": "godan verb stem",
+ "romaji": "tatazumi"
+ },
+ "佇め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatazume"
+ },
+ "佇も": {
+ "w_type": "godan verb stem",
+ "romaji": "tatazumo"
+ },
+ "佇んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatazunda"
+ },
+ "佇んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatazunde"
+ },
+ "脈打た": {
+ "w_type": "godan verb stem",
+ "romaji": "myakuuta"
+ },
+ "脈打ち": {
+ "w_type": "godan verb stem",
+ "romaji": "myakuuchi"
+ },
+ "脈打て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "myakuute"
+ },
+ "脈打と": {
+ "w_type": "godan verb stem",
+ "romaji": "myakuuto"
+ },
+ "脈打った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "myakuutta"
+ },
+ "脈打って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "myakuutte"
+ },
+ "差しかから": {
+ "w_type": "godan verb stem",
+ "romaji": "sashikakara"
+ },
+ "差しかかり": {
+ "w_type": "godan verb stem",
+ "romaji": "sashikakari"
+ },
+ "差しかかれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashikakare"
+ },
+ "差しかかろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sashikakaro"
+ },
+ "差しかかった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashikakatta"
+ },
+ "差しかかって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashikakatte"
+ },
+ "噛まさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamasa"
+ },
+ "噛まし": {
+ "w_type": "godan verb stem",
+ "romaji": "kamashi"
+ },
+ "噛ませ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamase"
+ },
+ "噛まそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kamaso"
+ },
+ "噛ました": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamashita"
+ },
+ "噛まして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kamashite"
+ },
+ "額ずか": {
+ "w_type": "godan verb stem",
+ "romaji": "nukazuka"
+ },
+ "額ずき": {
+ "w_type": "godan verb stem",
+ "romaji": "nukazuki"
+ },
+ "額ずけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukazuke"
+ },
+ "額ずこ": {
+ "w_type": "godan verb stem",
+ "romaji": "nukazuko"
+ },
+ "額ずいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukazuita"
+ },
+ "額ずいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nukazuite"
+ },
+ "組み合さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiawasa"
+ },
+ "組み合し": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiawashi"
+ },
+ "組み合せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiawase"
+ },
+ "組み合そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiawaso"
+ },
+ "組み合した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiawashita"
+ },
+ "組み合して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiawashite"
+ },
+ "組み合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiawa"
+ },
+ "組み合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiai"
+ },
+ "組み合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiae"
+ },
+ "組み合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kumiao"
+ },
+ "組み合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiatta"
+ },
+ "組み合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kumiatte"
+ },
+ "扱使わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kokitsukawa"
+ },
+ "扱使い": {
+ "w_type": "godan verb stem",
+ "romaji": "kokitsukai"
+ },
+ "扱使え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokitsukae"
+ },
+ "扱使お": {
+ "w_type": "godan verb stem",
+ "romaji": "kokitsukao"
+ },
+ "扱使った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokitsukatta"
+ },
+ "扱使って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kokitsukatte"
+ },
+ "張り倒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "haritaosa"
+ },
+ "張り倒し": {
+ "w_type": "godan verb stem",
+ "romaji": "haritaoshi"
+ },
+ "張り倒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritaose"
+ },
+ "張り倒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "haritaoso"
+ },
+ "張り倒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritaoshita"
+ },
+ "張り倒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haritaoshite"
+ },
+ "追い散らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "oichirasa"
+ },
+ "追い散らし": {
+ "w_type": "godan verb stem",
+ "romaji": "oichirashi"
+ },
+ "追い散らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oichirase"
+ },
+ "追い散らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "oichiraso"
+ },
+ "追い散らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oichirashita"
+ },
+ "追い散らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oichirashite"
+ },
+ "出し渋ら": {
+ "w_type": "godan verb stem",
+ "romaji": "dashishibura"
+ },
+ "出し渋り": {
+ "w_type": "godan verb stem",
+ "romaji": "dashishiburi"
+ },
+ "出し渋れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashishibure"
+ },
+ "出し渋ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "dashishiburo"
+ },
+ "出し渋った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashishibutta"
+ },
+ "出し渋って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dashishibutte"
+ },
+ "手伝わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tetsudawa"
+ },
+ "手伝い": {
+ "w_type": "godan verb stem",
+ "romaji": "tetsudai"
+ },
+ "手伝え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tetsudae"
+ },
+ "手伝お": {
+ "w_type": "godan verb stem",
+ "romaji": "tetsudao"
+ },
+ "手伝った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tetsudatta"
+ },
+ "手伝って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tetsudatte"
+ },
+ "埋から": {
+ "w_type": "godan verb stem",
+ "romaji": "ikara"
+ },
+ "埋かり": {
+ "w_type": "godan verb stem",
+ "romaji": "ikari"
+ },
+ "埋かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikare"
+ },
+ "埋かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikaro"
+ },
+ "埋かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikatta"
+ },
+ "埋かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikatte"
+ },
+ "相照らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "aiterasa"
+ },
+ "相照らし": {
+ "w_type": "godan verb stem",
+ "romaji": "aiterashi"
+ },
+ "相照らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiterase"
+ },
+ "相照らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "aiteraso"
+ },
+ "相照らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiterashita"
+ },
+ "相照らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiterashite"
+ },
+ "集わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsudowa"
+ },
+ "集い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsudoi"
+ },
+ "集え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsudoe"
+ },
+ "集お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsudoo"
+ },
+ "集った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsudotta"
+ },
+ "集って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsudotte"
+ },
+ "降懸から": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakara"
+ },
+ "降懸かり": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakari"
+ },
+ "降懸かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakare"
+ },
+ "降懸かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "furikakaro"
+ },
+ "降懸かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakatta"
+ },
+ "降懸かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikakatte"
+ },
+ "煎ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ira"
+ },
+ "煎り": {
+ "w_type": "godan verb stem",
+ "romaji": "iri"
+ },
+ "煎れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ire"
+ },
+ "煎ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "iro"
+ },
+ "煎った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itta"
+ },
+ "煎って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itte"
+ },
+ "引ん剥か": {
+ "w_type": "godan verb stem",
+ "romaji": "hinmuka"
+ },
+ "引ん剥き": {
+ "w_type": "godan verb stem",
+ "romaji": "hinmuki"
+ },
+ "引ん剥け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hinmuke"
+ },
+ "引ん剥こ": {
+ "w_type": "godan verb stem",
+ "romaji": "hinmuko"
+ },
+ "引ん剥いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hinmuita"
+ },
+ "引ん剥いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hinmuite"
+ },
+ "咬ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kama"
+ },
+ "咬み": {
+ "w_type": "godan verb stem",
+ "romaji": "kami"
+ },
+ "咬め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kame"
+ },
+ "咬も": {
+ "w_type": "godan verb stem",
+ "romaji": "kamo"
+ },
+ "咬んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanda"
+ },
+ "咬んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kande"
+ },
+ "盛りあがら": {
+ "w_type": "godan verb stem",
+ "romaji": "moriagara"
+ },
+ "盛りあがり": {
+ "w_type": "godan verb stem",
+ "romaji": "moriagari"
+ },
+ "盛りあがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moriagare"
+ },
+ "盛りあがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "moriagaro"
+ },
+ "盛りあがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moriagatta"
+ },
+ "盛りあがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moriagatte"
+ },
+ "刷ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sura"
+ },
+ "刷り": {
+ "w_type": "godan verb stem",
+ "romaji": "suri"
+ },
+ "刷れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sure"
+ },
+ "刷ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "suro"
+ },
+ "刷った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sutta"
+ },
+ "刷って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sutte"
+ },
+ "塗りたくら": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritakura"
+ },
+ "塗りたくり": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritakuri"
+ },
+ "塗りたくれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritakure"
+ },
+ "塗りたくろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritakuro"
+ },
+ "塗りたくった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritakutta"
+ },
+ "塗りたくって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritakutte"
+ },
+ "蠢か": {
+ "w_type": "godan verb stem",
+ "romaji": "ugomeka"
+ },
+ "蠢き": {
+ "w_type": "godan verb stem",
+ "romaji": "ugomeki"
+ },
+ "蠢け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ugomeke"
+ },
+ "蠢こ": {
+ "w_type": "godan verb stem",
+ "romaji": "ugomeko"
+ },
+ "蠢いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ugomeita"
+ },
+ "蠢いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ugomeite"
+ },
+ "聞入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kikiira"
+ },
+ "聞入り": {
+ "w_type": "godan verb stem",
+ "romaji": "kikiiri"
+ },
+ "聞入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikiire"
+ },
+ "聞入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kikiiro"
+ },
+ "聞入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikiitta"
+ },
+ "聞入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikiitte"
+ },
+ "対わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mukawa"
+ },
+ "対い": {
+ "w_type": "godan verb stem",
+ "romaji": "mukai"
+ },
+ "対え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukae"
+ },
+ "対お": {
+ "w_type": "godan verb stem",
+ "romaji": "mukao"
+ },
+ "対った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukatta"
+ },
+ "対って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mukatte"
+ },
+ "打ち倒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitaosa"
+ },
+ "打ち倒し": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitaoshi"
+ },
+ "打ち倒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitaose"
+ },
+ "打ち倒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitaoso"
+ },
+ "打ち倒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitaoshita"
+ },
+ "打ち倒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitaoshite"
+ },
+ "押し合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiawa"
+ },
+ "押し合い": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiai"
+ },
+ "押し合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiae"
+ },
+ "押し合お": {
+ "w_type": "godan verb stem",
+ "romaji": "oshiao"
+ },
+ "押し合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiatta"
+ },
+ "押し合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshiatte"
+ },
+ "引っぱりださ": {
+ "w_type": "godan verb stem",
+ "romaji": "hipparidasa"
+ },
+ "引っぱりだし": {
+ "w_type": "godan verb stem",
+ "romaji": "hipparidashi"
+ },
+ "引っぱりだせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hipparidase"
+ },
+ "引っぱりだそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hipparidaso"
+ },
+ "引っぱりだした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hipparidashita"
+ },
+ "引っぱりだして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hipparidashite"
+ },
+ "博さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakusa"
+ },
+ "博し": {
+ "w_type": "godan verb stem",
+ "romaji": "hakushi"
+ },
+ "博せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakuse"
+ },
+ "博そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakuso"
+ },
+ "博した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakushita"
+ },
+ "博して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakushite"
+ },
+ "褒め殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "homegorosa"
+ },
+ "褒め殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "homegoroshi"
+ },
+ "褒め殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homegorose"
+ },
+ "褒め殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "homegoroso"
+ },
+ "褒め殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homegoroshita"
+ },
+ "褒め殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "homegoroshite"
+ },
+ "遣り合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "yariawa"
+ },
+ "遣り合い": {
+ "w_type": "godan verb stem",
+ "romaji": "yariai"
+ },
+ "遣り合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yariae"
+ },
+ "遣り合お": {
+ "w_type": "godan verb stem",
+ "romaji": "yariao"
+ },
+ "遣り合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yariatta"
+ },
+ "遣り合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yariatte"
+ },
+ "立ち向かわ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimukawa"
+ },
+ "立ち向かい": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimukai"
+ },
+ "立ち向かえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimukae"
+ },
+ "立ち向かお": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimukao"
+ },
+ "立ち向かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimukatta"
+ },
+ "立ち向かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimukatte"
+ },
+ "在り付か": {
+ "w_type": "godan verb stem",
+ "romaji": "aritsuka"
+ },
+ "在り付き": {
+ "w_type": "godan verb stem",
+ "romaji": "aritsuki"
+ },
+ "在り付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aritsuke"
+ },
+ "在り付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "aritsuko"
+ },
+ "在り付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aritsuita"
+ },
+ "在り付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aritsuite"
+ },
+ "気づか": {
+ "w_type": "godan verb stem",
+ "romaji": "kizuka"
+ },
+ "気づき": {
+ "w_type": "godan verb stem",
+ "romaji": "kizuki"
+ },
+ "気づけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizuke"
+ },
+ "気づこ": {
+ "w_type": "godan verb stem",
+ "romaji": "kizuko"
+ },
+ "気づいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizuita"
+ },
+ "気づいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kizuite"
+ },
+ "買い込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikoma"
+ },
+ "買い込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikomi"
+ },
+ "買い込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikome"
+ },
+ "買い込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikomo"
+ },
+ "買い込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikonda"
+ },
+ "買い込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikonde"
+ },
+ "忍びよら": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobiyora"
+ },
+ "忍びより": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobiyori"
+ },
+ "忍びよれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobiyore"
+ },
+ "忍びよろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shinobiyoro"
+ },
+ "忍びよった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobiyotta"
+ },
+ "忍びよって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinobiyotte"
+ },
+ "伸し掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakara"
+ },
+ "伸し掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakari"
+ },
+ "伸し掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakare"
+ },
+ "伸し掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "noshikakaro"
+ },
+ "伸し掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakatta"
+ },
+ "伸し掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noshikakatte"
+ },
+ "出渋ら": {
+ "w_type": "godan verb stem",
+ "romaji": "deshibura"
+ },
+ "出渋り": {
+ "w_type": "godan verb stem",
+ "romaji": "deshiburi"
+ },
+ "出渋れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deshibure"
+ },
+ "出渋ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "deshiburo"
+ },
+ "出渋った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deshibutta"
+ },
+ "出渋って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deshibutte"
+ },
+ "擽ぐら": {
+ "w_type": "godan verb stem",
+ "romaji": "kusugura"
+ },
+ "擽ぐり": {
+ "w_type": "godan verb stem",
+ "romaji": "kusuguri"
+ },
+ "擽ぐれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kusugure"
+ },
+ "擽ぐろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kusuguro"
+ },
+ "擽ぐった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kusugutta"
+ },
+ "擽ぐって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kusugutte"
+ },
+ "匂わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "niowasa"
+ },
+ "匂わし": {
+ "w_type": "godan verb stem",
+ "romaji": "niowashi"
+ },
+ "匂わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niowase"
+ },
+ "匂わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "niowaso"
+ },
+ "匂わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niowashita"
+ },
+ "匂わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "niowashite"
+ },
+ "急かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "sekasa"
+ },
+ "急かし": {
+ "w_type": "godan verb stem",
+ "romaji": "sekashi"
+ },
+ "急かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekase"
+ },
+ "急かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "sekaso"
+ },
+ "急かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekashita"
+ },
+ "急かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekashite"
+ },
+ "暮れ掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "kurekakara"
+ },
+ "暮れ掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "kurekakari"
+ },
+ "暮れ掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurekakare"
+ },
+ "暮れ掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kurekakaro"
+ },
+ "暮れ掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurekakatta"
+ },
+ "暮れ掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurekakatte"
+ },
+ "織ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ora"
+ },
+ "織り": {
+ "w_type": "godan verb stem",
+ "romaji": "ori"
+ },
+ "織れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ore"
+ },
+ "織ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oro"
+ },
+ "織った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "otta"
+ },
+ "織って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "otte"
+ },
+ "相継が": {
+ "w_type": "godan verb stem",
+ "romaji": "aitsuga"
+ },
+ "相継ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "aitsugi"
+ },
+ "相継げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitsuge"
+ },
+ "相継ご": {
+ "w_type": "godan verb stem",
+ "romaji": "aitsugo"
+ },
+ "相継いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitsuida"
+ },
+ "相継いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aitsuide"
+ },
+ "臆さ": {
+ "w_type": "godan verb stem",
+ "romaji": "okusa"
+ },
+ "臆し": {
+ "w_type": "godan verb stem",
+ "romaji": "okushi"
+ },
+ "臆せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okuse"
+ },
+ "臆そ": {
+ "w_type": "godan verb stem",
+ "romaji": "okuso"
+ },
+ "臆した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okushita"
+ },
+ "臆して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okushite"
+ },
+ "打勝た": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikata"
+ },
+ "打勝ち": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikachi"
+ },
+ "打勝て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikate"
+ },
+ "打勝と": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikato"
+ },
+ "打勝った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatta"
+ },
+ "打勝って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatte"
+ },
+ "取り交わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "torikawasa"
+ },
+ "取り交わし": {
+ "w_type": "godan verb stem",
+ "romaji": "torikawashi"
+ },
+ "取り交わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikawase"
+ },
+ "取り交わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "torikawaso"
+ },
+ "取り交わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikawashita"
+ },
+ "取り交わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torikawashite"
+ },
+ "仰せ付から": {
+ "w_type": "godan verb stem",
+ "romaji": "oosetsukara"
+ },
+ "仰せ付かり": {
+ "w_type": "godan verb stem",
+ "romaji": "oosetsukari"
+ },
+ "仰せ付かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oosetsukare"
+ },
+ "仰せ付かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oosetsukaro"
+ },
+ "仰せ付かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oosetsukatta"
+ },
+ "仰せ付かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oosetsukatte"
+ },
+ "飛びまわら": {
+ "w_type": "godan verb stem",
+ "romaji": "tobimawara"
+ },
+ "飛びまわり": {
+ "w_type": "godan verb stem",
+ "romaji": "tobimawari"
+ },
+ "飛びまわれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobimaware"
+ },
+ "飛びまわろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobimawaro"
+ },
+ "飛びまわった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobimawatta"
+ },
+ "飛びまわって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobimawatte"
+ },
+ "振り撒か": {
+ "w_type": "godan verb stem",
+ "romaji": "furimaka"
+ },
+ "振り撒き": {
+ "w_type": "godan verb stem",
+ "romaji": "furimaki"
+ },
+ "振り撒け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimake"
+ },
+ "振り撒こ": {
+ "w_type": "godan verb stem",
+ "romaji": "furimako"
+ },
+ "振り撒いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimaita"
+ },
+ "振り撒いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimaite"
+ },
+ "晴れ渡ら": {
+ "w_type": "godan verb stem",
+ "romaji": "harewatara"
+ },
+ "晴れ渡り": {
+ "w_type": "godan verb stem",
+ "romaji": "harewatari"
+ },
+ "晴れ渡れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "harewatare"
+ },
+ "晴れ渡ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "harewataro"
+ },
+ "晴れ渡った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "harewatatta"
+ },
+ "晴れ渡って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "harewatatte"
+ },
+ "辿ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tadora"
+ },
+ "辿り": {
+ "w_type": "godan verb stem",
+ "romaji": "tadori"
+ },
+ "辿れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tadore"
+ },
+ "辿ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tadoro"
+ },
+ "辿った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tadotta"
+ },
+ "辿って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tadotte"
+ },
+ "明るま": {
+ "w_type": "godan verb stem",
+ "romaji": "akaruma"
+ },
+ "明るみ": {
+ "w_type": "godan verb stem",
+ "romaji": "akarumi"
+ },
+ "明るめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akarume"
+ },
+ "明るも": {
+ "w_type": "godan verb stem",
+ "romaji": "akarumo"
+ },
+ "明るんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akarunda"
+ },
+ "明るんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "akarunde"
+ },
+ "寄りそわ": {
+ "w_type": "godan verb stem",
+ "romaji": "yorisowa"
+ },
+ "寄りそい": {
+ "w_type": "godan verb stem",
+ "romaji": "yorisoi"
+ },
+ "寄りそえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorisoe"
+ },
+ "寄りそお": {
+ "w_type": "godan verb stem",
+ "romaji": "yorisoo"
+ },
+ "寄りそった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorisotta"
+ },
+ "寄りそって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yorisotte"
+ },
+ "言出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "iidasa"
+ },
+ "言出し": {
+ "w_type": "godan verb stem",
+ "romaji": "iidashi"
+ },
+ "言出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iidase"
+ },
+ "言出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "iidaso"
+ },
+ "言出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iidashita"
+ },
+ "言出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iidashite"
+ },
+ "引き下がら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagara"
+ },
+ "引き下がり": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagari"
+ },
+ "引き下がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagare"
+ },
+ "引き下がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikisagaro"
+ },
+ "引き下がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagatta"
+ },
+ "引き下がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikisagatte"
+ },
+ "漬から": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukara"
+ },
+ "漬かり": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukari"
+ },
+ "漬かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukare"
+ },
+ "漬かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukaro"
+ },
+ "漬かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukatta"
+ },
+ "漬かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukatte"
+ },
+ "揉解さ": {
+ "w_type": "godan verb stem",
+ "romaji": "momihogusa"
+ },
+ "揉解し": {
+ "w_type": "godan verb stem",
+ "romaji": "momihogushi"
+ },
+ "揉解せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momihoguse"
+ },
+ "揉解そ": {
+ "w_type": "godan verb stem",
+ "romaji": "momihoguso"
+ },
+ "揉解した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momihogushita"
+ },
+ "揉解して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "momihogushite"
+ },
+ "積増さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumimasa"
+ },
+ "積増し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumimashi"
+ },
+ "積増せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumimase"
+ },
+ "積増そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumimaso"
+ },
+ "積増した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumimashita"
+ },
+ "積増して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumimashite"
+ },
+ "ぶっ飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "buttobasa"
+ },
+ "ぶっ飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "buttobashi"
+ },
+ "ぶっ飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttobase"
+ },
+ "ぶっ飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "buttobaso"
+ },
+ "ぶっ飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttobashita"
+ },
+ "ぶっ飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "buttobashite"
+ },
+ "悩ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nayama"
+ },
+ "悩み": {
+ "w_type": "godan verb stem",
+ "romaji": "nayami"
+ },
+ "悩め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nayame"
+ },
+ "悩も": {
+ "w_type": "godan verb stem",
+ "romaji": "nayamo"
+ },
+ "悩んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nayanda"
+ },
+ "悩んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nayande"
+ },
+ "躱さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawasa"
+ },
+ "躱し": {
+ "w_type": "godan verb stem",
+ "romaji": "kawashi"
+ },
+ "躱せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawase"
+ },
+ "躱そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kawaso"
+ },
+ "躱した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashita"
+ },
+ "躱して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kawashite"
+ },
+ "重吹か": {
+ "w_type": "godan verb stem",
+ "romaji": "shibuka"
+ },
+ "重吹き": {
+ "w_type": "godan verb stem",
+ "romaji": "shibuki"
+ },
+ "重吹け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibuke"
+ },
+ "重吹こ": {
+ "w_type": "godan verb stem",
+ "romaji": "shibuko"
+ },
+ "重吹いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibuita"
+ },
+ "重吹いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibuite"
+ },
+ "突っ立た": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttata"
+ },
+ "突っ立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttachi"
+ },
+ "突っ立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttate"
+ },
+ "突っ立と": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttato"
+ },
+ "突っ立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttatta"
+ },
+ "突っ立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttatte"
+ },
+ "読込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikoma"
+ },
+ "読込み": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikomi"
+ },
+ "読込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikome"
+ },
+ "読込も": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikomo"
+ },
+ "読込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikonda"
+ },
+ "読込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikonde"
+ },
+ "摑ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukama"
+ },
+ "摑み": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukami"
+ },
+ "摑め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukame"
+ },
+ "摑も": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukamo"
+ },
+ "摑んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukanda"
+ },
+ "摑んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukande"
+ },
+ "回りださ": {
+ "w_type": "godan verb stem",
+ "romaji": "mawaridasa"
+ },
+ "回りだし": {
+ "w_type": "godan verb stem",
+ "romaji": "mawaridashi"
+ },
+ "回りだせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawaridase"
+ },
+ "回りだそ": {
+ "w_type": "godan verb stem",
+ "romaji": "mawaridaso"
+ },
+ "回りだした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawaridashita"
+ },
+ "回りだして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mawaridashite"
+ },
+ "帰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaesa"
+ },
+ "帰し": {
+ "w_type": "godan verb stem",
+ "romaji": "kaeshi"
+ },
+ "帰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaese"
+ },
+ "帰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaeso"
+ },
+ "帰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaeshita"
+ },
+ "帰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaeshite"
+ },
+ "起ら": {
+ "w_type": "godan verb stem",
+ "romaji": "okora"
+ },
+ "起り": {
+ "w_type": "godan verb stem",
+ "romaji": "okori"
+ },
+ "起れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okore"
+ },
+ "起ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "okoro"
+ },
+ "起った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okotta"
+ },
+ "起って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okotte"
+ },
+ "つれ添わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuresowa"
+ },
+ "つれ添い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuresoi"
+ },
+ "つれ添え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuresoe"
+ },
+ "つれ添お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuresoo"
+ },
+ "つれ添った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuresotta"
+ },
+ "つれ添って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuresotte"
+ },
+ "点ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tomora"
+ },
+ "点り": {
+ "w_type": "godan verb stem",
+ "romaji": "tomori"
+ },
+ "点れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomore"
+ },
+ "点ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tomoro"
+ },
+ "点った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomotta"
+ },
+ "点って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tomotte"
+ },
+ "繰廻さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kurimawasa"
+ },
+ "繰廻し": {
+ "w_type": "godan verb stem",
+ "romaji": "kurimawashi"
+ },
+ "繰廻せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurimawase"
+ },
+ "繰廻そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kurimawaso"
+ },
+ "繰廻した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurimawashita"
+ },
+ "繰廻して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurimawashite"
+ },
+ "考え直さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaenaosa"
+ },
+ "考え直し": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaenaoshi"
+ },
+ "考え直せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaenaose"
+ },
+ "考え直そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaenaoso"
+ },
+ "考え直した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaenaoshita"
+ },
+ "考え直して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaenaoshite"
+ },
+ "討取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitora"
+ },
+ "討取り": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitori"
+ },
+ "討取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitore"
+ },
+ "討取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchitoro"
+ },
+ "討取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitotta"
+ },
+ "討取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchitotte"
+ },
+ "うつ向か": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuka"
+ },
+ "うつ向き": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuki"
+ },
+ "うつ向け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuke"
+ },
+ "うつ向こ": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuko"
+ },
+ "うつ向いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuita"
+ },
+ "うつ向いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuite"
+ },
+ "患いつか": {
+ "w_type": "godan verb stem",
+ "romaji": "wazuraitsuka"
+ },
+ "患いつき": {
+ "w_type": "godan verb stem",
+ "romaji": "wazuraitsuki"
+ },
+ "患いつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wazuraitsuke"
+ },
+ "患いつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "wazuraitsuko"
+ },
+ "患いついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wazuraitsuita"
+ },
+ "患いついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wazuraitsuite"
+ },
+ "わり込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "warikoma"
+ },
+ "わり込み": {
+ "w_type": "godan verb stem",
+ "romaji": "warikomi"
+ },
+ "わり込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikome"
+ },
+ "わり込も": {
+ "w_type": "godan verb stem",
+ "romaji": "warikomo"
+ },
+ "わり込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikonda"
+ },
+ "わり込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikonde"
+ },
+ "従わ": {
+ "w_type": "godan verb stem",
+ "romaji": "shitagawa"
+ },
+ "従い": {
+ "w_type": "godan verb stem",
+ "romaji": "shitagai"
+ },
+ "従え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitagae"
+ },
+ "従お": {
+ "w_type": "godan verb stem",
+ "romaji": "shitagao"
+ },
+ "従った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitagatta"
+ },
+ "従って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shitagatte"
+ },
+ "売捌か": {
+ "w_type": "godan verb stem",
+ "romaji": "urisabaka"
+ },
+ "売捌き": {
+ "w_type": "godan verb stem",
+ "romaji": "urisabaki"
+ },
+ "売捌け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "urisabake"
+ },
+ "売捌こ": {
+ "w_type": "godan verb stem",
+ "romaji": "urisabako"
+ },
+ "売捌いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "urisabaita"
+ },
+ "売捌いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "urisabaite"
+ },
+ "着込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kikoma"
+ },
+ "着込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kikomi"
+ },
+ "着込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikome"
+ },
+ "着込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kikomo"
+ },
+ "着込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikonda"
+ },
+ "着込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikonde"
+ },
+ "覆い隠さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ooikakusa"
+ },
+ "覆い隠し": {
+ "w_type": "godan verb stem",
+ "romaji": "ooikakushi"
+ },
+ "覆い隠せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ooikakuse"
+ },
+ "覆い隠そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ooikakuso"
+ },
+ "覆い隠した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ooikakushita"
+ },
+ "覆い隠して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ooikakushite"
+ },
+ "煮え立た": {
+ "w_type": "godan verb stem",
+ "romaji": "nietata"
+ },
+ "煮え立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "nietachi"
+ },
+ "煮え立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nietate"
+ },
+ "煮え立と": {
+ "w_type": "godan verb stem",
+ "romaji": "nietato"
+ },
+ "煮え立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nietatta"
+ },
+ "煮え立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nietatte"
+ },
+ "擂り潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubusa"
+ },
+ "擂り潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubushi"
+ },
+ "擂り潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubuse"
+ },
+ "擂り潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubuso"
+ },
+ "擂り潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubushita"
+ },
+ "擂り潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubushite"
+ },
+ "纏まら": {
+ "w_type": "godan verb stem",
+ "romaji": "matomara"
+ },
+ "纏まり": {
+ "w_type": "godan verb stem",
+ "romaji": "matomari"
+ },
+ "纏まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matomare"
+ },
+ "纏まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "matomaro"
+ },
+ "纏まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matomatta"
+ },
+ "纏まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "matomatte"
+ },
+ "摘み取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumamitora"
+ },
+ "摘み取り": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumamitori"
+ },
+ "摘み取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumamitore"
+ },
+ "摘み取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumamitoro"
+ },
+ "摘み取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumamitotta"
+ },
+ "摘み取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumamitotte"
+ },
+ "取り結ば": {
+ "w_type": "godan verb stem",
+ "romaji": "torimusuba"
+ },
+ "取り結び": {
+ "w_type": "godan verb stem",
+ "romaji": "torimusubi"
+ },
+ "取り結べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torimusube"
+ },
+ "取り結ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "torimusubo"
+ },
+ "取り結んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torimusunda"
+ },
+ "取り結んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torimusunde"
+ },
+ "書き著さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiarawasa"
+ },
+ "書き著し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiarawashi"
+ },
+ "書き著せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiarawase"
+ },
+ "書き著そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakiarawaso"
+ },
+ "書き著した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiarawashita"
+ },
+ "書き著して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakiarawashite"
+ },
+ "会わ": {
+ "w_type": "godan verb stem",
+ "romaji": "awa"
+ },
+ "会い": {
+ "w_type": "godan verb stem",
+ "romaji": "ai"
+ },
+ "会え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ae"
+ },
+ "会お": {
+ "w_type": "godan verb stem",
+ "romaji": "ao"
+ },
+ "会った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atta"
+ },
+ "会って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atte"
+ },
+ "鋳込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "ikoma"
+ },
+ "鋳込み": {
+ "w_type": "godan verb stem",
+ "romaji": "ikomi"
+ },
+ "鋳込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikome"
+ },
+ "鋳込も": {
+ "w_type": "godan verb stem",
+ "romaji": "ikomo"
+ },
+ "鋳込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikonda"
+ },
+ "鋳込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikonde"
+ },
+ "折ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ora"
+ },
+ "折り": {
+ "w_type": "godan verb stem",
+ "romaji": "ori"
+ },
+ "折れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ore"
+ },
+ "折ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oro"
+ },
+ "折った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "otta"
+ },
+ "折って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "otte"
+ },
+ "為し終わら": {
+ "w_type": "godan verb stem",
+ "romaji": "nashiowara"
+ },
+ "為し終わり": {
+ "w_type": "godan verb stem",
+ "romaji": "nashiowari"
+ },
+ "為し終われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nashioware"
+ },
+ "為し終わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nashiowaro"
+ },
+ "為し終わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nashiowatta"
+ },
+ "為し終わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nashiowatte"
+ },
+ "集まら": {
+ "w_type": "godan verb stem",
+ "romaji": "atsumara"
+ },
+ "集まり": {
+ "w_type": "godan verb stem",
+ "romaji": "atsumari"
+ },
+ "集まれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atsumare"
+ },
+ "集まろ": {
+ "w_type": "godan verb stem",
+ "romaji": "atsumaro"
+ },
+ "集まった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atsumatta"
+ },
+ "集まって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "atsumatte"
+ },
+ "折が": {
+ "w_type": "godan verb stem",
+ "romaji": "haga"
+ },
+ "折ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "hagi"
+ },
+ "折げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hage"
+ },
+ "折ご": {
+ "w_type": "godan verb stem",
+ "romaji": "hago"
+ },
+ "折いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haida"
+ },
+ "折いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haide"
+ },
+ "這い上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "haiagara"
+ },
+ "這い上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "haiagari"
+ },
+ "這い上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haiagare"
+ },
+ "這い上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "haiagaro"
+ },
+ "這い上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haiagatta"
+ },
+ "這い上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haiagatte"
+ },
+ "張ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hara"
+ },
+ "張り": {
+ "w_type": "godan verb stem",
+ "romaji": "hari"
+ },
+ "張れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hare"
+ },
+ "張ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "haro"
+ },
+ "張った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatta"
+ },
+ "張って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hatte"
+ },
+ "斥か": {
+ "w_type": "godan verb stem",
+ "romaji": "shirizoka"
+ },
+ "斥き": {
+ "w_type": "godan verb stem",
+ "romaji": "shirizoki"
+ },
+ "斥け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shirizoke"
+ },
+ "斥こ": {
+ "w_type": "godan verb stem",
+ "romaji": "shirizoko"
+ },
+ "斥いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shirizoita"
+ },
+ "斥いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shirizoite"
+ },
+ "障ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sawara"
+ },
+ "障り": {
+ "w_type": "godan verb stem",
+ "romaji": "sawari"
+ },
+ "障れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "saware"
+ },
+ "障ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sawaro"
+ },
+ "障った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawatta"
+ },
+ "障って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawatte"
+ },
+ "斬掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakara"
+ },
+ "斬掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakari"
+ },
+ "斬掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakare"
+ },
+ "斬掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakaro"
+ },
+ "斬掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakatta"
+ },
+ "斬掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakatte"
+ },
+ "圧潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsubusa"
+ },
+ "圧潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsubushi"
+ },
+ "圧潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsubuse"
+ },
+ "圧潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsubuso"
+ },
+ "圧潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsubushita"
+ },
+ "圧潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsubushite"
+ },
+ "眠ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nemura"
+ },
+ "眠り": {
+ "w_type": "godan verb stem",
+ "romaji": "nemuri"
+ },
+ "眠れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemure"
+ },
+ "眠ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nemuro"
+ },
+ "眠った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemutta"
+ },
+ "眠って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nemutte"
+ },
+ "せり上ら": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagara"
+ },
+ "せり上り": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagari"
+ },
+ "せり上れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagare"
+ },
+ "せり上ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "seriagaro"
+ },
+ "せり上った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagatta"
+ },
+ "せり上って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "seriagatte"
+ },
+ "行き渡ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiwatara"
+ },
+ "行き渡り": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiwatari"
+ },
+ "行き渡れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiwatare"
+ },
+ "行き渡ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiwataro"
+ },
+ "行き渡った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiwatatta"
+ },
+ "行き渡って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiwatatte"
+ },
+ "詰め寄ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumeyora"
+ },
+ "詰め寄り": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumeyori"
+ },
+ "詰め寄れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumeyore"
+ },
+ "詰め寄ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsumeyoro"
+ },
+ "詰め寄った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumeyotta"
+ },
+ "詰め寄って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsumeyotte"
+ },
+ "粋がら": {
+ "w_type": "godan verb stem",
+ "romaji": "ikigara"
+ },
+ "粋がり": {
+ "w_type": "godan verb stem",
+ "romaji": "ikigari"
+ },
+ "粋がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikigare"
+ },
+ "粋がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikigaro"
+ },
+ "粋がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikigatta"
+ },
+ "粋がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikigatte"
+ },
+ "溜ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tamara"
+ },
+ "溜り": {
+ "w_type": "godan verb stem",
+ "romaji": "tamari"
+ },
+ "溜れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamare"
+ },
+ "溜ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tamaro"
+ },
+ "溜った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamatta"
+ },
+ "溜って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamatte"
+ },
+ "引き伸ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinobasa"
+ },
+ "引き伸ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinobashi"
+ },
+ "引き伸ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinobase"
+ },
+ "引き伸ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikinobaso"
+ },
+ "引き伸ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinobashita"
+ },
+ "引き伸ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikinobashite"
+ },
+ "伸び上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "nobiagara"
+ },
+ "伸び上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "nobiagari"
+ },
+ "伸び上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobiagare"
+ },
+ "伸び上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nobiagaro"
+ },
+ "伸び上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobiagatta"
+ },
+ "伸び上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nobiagatte"
+ },
+ "入り切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hairikira"
+ },
+ "入り切り": {
+ "w_type": "godan verb stem",
+ "romaji": "hairikiri"
+ },
+ "入り切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hairikire"
+ },
+ "入り切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hairikiro"
+ },
+ "入り切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hairikitta"
+ },
+ "入り切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hairikitte"
+ },
+ "引きたた": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitata"
+ },
+ "引きたち": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitachi"
+ },
+ "引きたて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitate"
+ },
+ "引きたと": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitato"
+ },
+ "引きたった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitatta"
+ },
+ "引きたって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitatte"
+ },
+ "穿り返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaesa"
+ },
+ "穿り返し": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaeshi"
+ },
+ "穿り返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaese"
+ },
+ "穿り返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hojikurikaeso"
+ },
+ "穿り返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaeshita"
+ },
+ "穿り返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hojikurikaeshite"
+ },
+ "追回さ": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawasa"
+ },
+ "追回し": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawashi"
+ },
+ "追回せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawase"
+ },
+ "追回そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oimawaso"
+ },
+ "追回した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawashita"
+ },
+ "追回して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimawashite"
+ },
+ "呼びならわさ": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawasa"
+ },
+ "呼びならわし": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawashi"
+ },
+ "呼びならわせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawase"
+ },
+ "呼びならわそ": {
+ "w_type": "godan verb stem",
+ "romaji": "yobinarawaso"
+ },
+ "呼びならわした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawashita"
+ },
+ "呼びならわして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yobinarawashite"
+ },
+ "押しころさ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikorosa"
+ },
+ "押しころし": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikoroshi"
+ },
+ "押しころせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikorose"
+ },
+ "押しころそ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshikoroso"
+ },
+ "押しころした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikoroshita"
+ },
+ "押しころして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshikoroshite"
+ },
+ "運びださ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakobidasa"
+ },
+ "運びだし": {
+ "w_type": "godan verb stem",
+ "romaji": "hakobidashi"
+ },
+ "運びだせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakobidase"
+ },
+ "運びだそ": {
+ "w_type": "godan verb stem",
+ "romaji": "hakobidaso"
+ },
+ "運びだした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakobidashita"
+ },
+ "運びだして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hakobidashite"
+ },
+ "立ち寄ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiyora"
+ },
+ "立ち寄り": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiyori"
+ },
+ "立ち寄れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiyore"
+ },
+ "立ち寄ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiyoro"
+ },
+ "立ち寄った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiyotta"
+ },
+ "立ち寄って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiyotte"
+ },
+ "裏問わ": {
+ "w_type": "godan verb stem",
+ "romaji": "uradowa"
+ },
+ "裏問い": {
+ "w_type": "godan verb stem",
+ "romaji": "uradoi"
+ },
+ "裏問え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uradoe"
+ },
+ "裏問お": {
+ "w_type": "godan verb stem",
+ "romaji": "uradoo"
+ },
+ "裏問った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uradotta"
+ },
+ "裏問って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uradotte"
+ },
+ "引き継が": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsuga"
+ },
+ "引き継ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsugi"
+ },
+ "引き継げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuge"
+ },
+ "引き継ご": {
+ "w_type": "godan verb stem",
+ "romaji": "hikitsugo"
+ },
+ "引き継いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuida"
+ },
+ "引き継いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikitsuide"
+ },
+ "驚き入ら": {
+ "w_type": "godan verb stem",
+ "romaji": "odorokiira"
+ },
+ "驚き入り": {
+ "w_type": "godan verb stem",
+ "romaji": "odorokiiri"
+ },
+ "驚き入れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorokiire"
+ },
+ "驚き入ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "odorokiiro"
+ },
+ "驚き入った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorokiitta"
+ },
+ "驚き入って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorokiitte"
+ },
+ "衝き当たら": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiatara"
+ },
+ "衝き当たり": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiatari"
+ },
+ "衝き当たれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiatare"
+ },
+ "衝き当たろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukiataro"
+ },
+ "衝き当たった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiatatta"
+ },
+ "衝き当たって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukiatatte"
+ },
+ "事寄さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kotoyosa"
+ },
+ "事寄し": {
+ "w_type": "godan verb stem",
+ "romaji": "kotoyoshi"
+ },
+ "事寄せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotoyose"
+ },
+ "事寄そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kotoyoso"
+ },
+ "事寄した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotoyoshita"
+ },
+ "事寄して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotoyoshite"
+ },
+ "のぼせ上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "noboseagara"
+ },
+ "のぼせ上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "noboseagari"
+ },
+ "のぼせ上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noboseagare"
+ },
+ "のぼせ上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "noboseagaro"
+ },
+ "のぼせ上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noboseagatta"
+ },
+ "のぼせ上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "noboseagatte"
+ },
+ "追い捲ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oimakura"
+ },
+ "追い捲り": {
+ "w_type": "godan verb stem",
+ "romaji": "oimakuri"
+ },
+ "追い捲れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimakure"
+ },
+ "追い捲ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oimakuro"
+ },
+ "追い捲った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimakutta"
+ },
+ "追い捲って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oimakutte"
+ },
+ "据わら": {
+ "w_type": "godan verb stem",
+ "romaji": "suwara"
+ },
+ "据わり": {
+ "w_type": "godan verb stem",
+ "romaji": "suwari"
+ },
+ "据われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suware"
+ },
+ "据わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "suwaro"
+ },
+ "据わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suwatta"
+ },
+ "据わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suwatte"
+ },
+ "禿げ上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "hageagara"
+ },
+ "禿げ上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "hageagari"
+ },
+ "禿げ上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hageagare"
+ },
+ "禿げ上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hageagaro"
+ },
+ "禿げ上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hageagatta"
+ },
+ "禿げ上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hageagatte"
+ },
+ "切り掛ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakara"
+ },
+ "切り掛り": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakari"
+ },
+ "切り掛れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakare"
+ },
+ "切り掛ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirikakaro"
+ },
+ "切り掛った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakatta"
+ },
+ "切り掛って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirikakatte"
+ },
+ "去り行か": {
+ "w_type": "godan verb stem",
+ "romaji": "sariika"
+ },
+ "去り行き": {
+ "w_type": "godan verb stem",
+ "romaji": "sariiki"
+ },
+ "去り行け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sariike"
+ },
+ "去り行こ": {
+ "w_type": "godan verb stem",
+ "romaji": "sariiko"
+ },
+ "去り行いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sariiita"
+ },
+ "去り行いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sariiite"
+ },
+ "揉ま": {
+ "w_type": "godan verb stem",
+ "romaji": "moma"
+ },
+ "揉み": {
+ "w_type": "godan verb stem",
+ "romaji": "momi"
+ },
+ "揉め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mome"
+ },
+ "揉も": {
+ "w_type": "godan verb stem",
+ "romaji": "momo"
+ },
+ "揉んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "monda"
+ },
+ "揉んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "monde"
+ },
+ "浮出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukidasa"
+ },
+ "浮出し": {
+ "w_type": "godan verb stem",
+ "romaji": "ukidashi"
+ },
+ "浮出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukidase"
+ },
+ "浮出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukidaso"
+ },
+ "浮出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukidashita"
+ },
+ "浮出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukidashite"
+ },
+ "かい摘ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitsumama"
+ },
+ "かい摘み": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitsumami"
+ },
+ "かい摘め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitsumame"
+ },
+ "かい摘も": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitsumamo"
+ },
+ "かい摘んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitsumanda"
+ },
+ "かい摘んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitsumande"
+ },
+ "釣合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriawa"
+ },
+ "釣合い": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriai"
+ },
+ "釣合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriae"
+ },
+ "釣合お": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuriao"
+ },
+ "釣合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriatta"
+ },
+ "釣合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuriatte"
+ },
+ "包隠さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsutsumikakusa"
+ },
+ "包隠し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsutsumikakushi"
+ },
+ "包隠せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsutsumikakuse"
+ },
+ "包隠そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsutsumikakuso"
+ },
+ "包隠した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsutsumikakushita"
+ },
+ "包隠して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsutsumikakushite"
+ },
+ "殴り殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikorosa"
+ },
+ "殴り殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikoroshi"
+ },
+ "殴り殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikorose"
+ },
+ "殴り殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nagurikoroso"
+ },
+ "殴り殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikoroshita"
+ },
+ "殴り殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nagurikoroshite"
+ },
+ "寝ころば": {
+ "w_type": "godan verb stem",
+ "romaji": "nekoroba"
+ },
+ "寝ころび": {
+ "w_type": "godan verb stem",
+ "romaji": "nekorobi"
+ },
+ "寝ころべ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekorobe"
+ },
+ "寝ころぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "nekorobo"
+ },
+ "寝ころんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekoronda"
+ },
+ "寝ころんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nekoronde"
+ },
+ "買戻さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaimodosa"
+ },
+ "買戻し": {
+ "w_type": "godan verb stem",
+ "romaji": "kaimodoshi"
+ },
+ "買戻せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaimodose"
+ },
+ "買戻そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaimodoso"
+ },
+ "買戻した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaimodoshita"
+ },
+ "買戻して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaimodoshite"
+ },
+ "揚がら": {
+ "w_type": "godan verb stem",
+ "romaji": "agara"
+ },
+ "揚がり": {
+ "w_type": "godan verb stem",
+ "romaji": "agari"
+ },
+ "揚がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agare"
+ },
+ "揚がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "agaro"
+ },
+ "揚がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agatta"
+ },
+ "揚がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agatte"
+ },
+ "氏な": {
+ "w_type": "godan verb stem",
+ "romaji": "shina"
+ },
+ "氏に": {
+ "w_type": "godan verb stem",
+ "romaji": "shini"
+ },
+ "氏ね": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shine"
+ },
+ "氏の": {
+ "w_type": "godan verb stem",
+ "romaji": "shino"
+ },
+ "氏んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinda"
+ },
+ "氏んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shinde"
+ },
+ "扼さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yakusa"
+ },
+ "扼し": {
+ "w_type": "godan verb stem",
+ "romaji": "yakushi"
+ },
+ "扼せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakuse"
+ },
+ "扼そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yakuso"
+ },
+ "扼した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakushita"
+ },
+ "扼して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yakushite"
+ },
+ "食わさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwasa"
+ },
+ "食わし": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwashi"
+ },
+ "食わせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwase"
+ },
+ "食わそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuwaso"
+ },
+ "食わした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwashita"
+ },
+ "食わして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuwashite"
+ },
+ "掘り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "horidasa"
+ },
+ "掘り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "horidashi"
+ },
+ "掘り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horidase"
+ },
+ "掘り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "horidaso"
+ },
+ "掘り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horidashita"
+ },
+ "掘り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horidashite"
+ },
+ "掻い込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikoma"
+ },
+ "掻い込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikomi"
+ },
+ "掻い込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikome"
+ },
+ "掻い込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kaikomo"
+ },
+ "掻い込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikonda"
+ },
+ "掻い込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaikonde"
+ },
+ "息せき切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisekikira"
+ },
+ "息せき切り": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisekikiri"
+ },
+ "息せき切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisekikire"
+ },
+ "息せき切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisekikiro"
+ },
+ "息せき切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisekikitta"
+ },
+ "息せき切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisekikitte"
+ },
+ "溺れ損なわ": {
+ "w_type": "godan verb stem",
+ "romaji": "oboresokonawa"
+ },
+ "溺れ損ない": {
+ "w_type": "godan verb stem",
+ "romaji": "oboresokonai"
+ },
+ "溺れ損なえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboresokonae"
+ },
+ "溺れ損なお": {
+ "w_type": "godan verb stem",
+ "romaji": "oboresokonao"
+ },
+ "溺れ損なった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboresokonatta"
+ },
+ "溺れ損なって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oboresokonatte"
+ },
+ "賑あわ": {
+ "w_type": "godan verb stem",
+ "romaji": "nigiawa"
+ },
+ "賑あい": {
+ "w_type": "godan verb stem",
+ "romaji": "nigiai"
+ },
+ "賑あえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigiae"
+ },
+ "賑あお": {
+ "w_type": "godan verb stem",
+ "romaji": "nigiao"
+ },
+ "賑あった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigiatta"
+ },
+ "賑あって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nigiatte"
+ },
+ "懲らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "korasa"
+ },
+ "懲らし": {
+ "w_type": "godan verb stem",
+ "romaji": "korashi"
+ },
+ "懲らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korase"
+ },
+ "懲らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "koraso"
+ },
+ "懲らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korashita"
+ },
+ "懲らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "korashite"
+ },
+ "払い切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "haraikira"
+ },
+ "払い切り": {
+ "w_type": "godan verb stem",
+ "romaji": "haraikiri"
+ },
+ "払い切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haraikire"
+ },
+ "払い切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "haraikiro"
+ },
+ "払い切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haraikitta"
+ },
+ "払い切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haraikitte"
+ },
+ "絡ま": {
+ "w_type": "godan verb stem",
+ "romaji": "karama"
+ },
+ "絡み": {
+ "w_type": "godan verb stem",
+ "romaji": "karami"
+ },
+ "絡め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karame"
+ },
+ "絡も": {
+ "w_type": "godan verb stem",
+ "romaji": "karamo"
+ },
+ "絡んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karanda"
+ },
+ "絡んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karande"
+ },
+ "掬い取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sukuitora"
+ },
+ "掬い取り": {
+ "w_type": "godan verb stem",
+ "romaji": "sukuitori"
+ },
+ "掬い取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukuitore"
+ },
+ "掬い取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukuitoro"
+ },
+ "掬い取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukuitotta"
+ },
+ "掬い取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukuitotte"
+ },
+ "戯れ付か": {
+ "w_type": "godan verb stem",
+ "romaji": "jaretsuka"
+ },
+ "戯れ付き": {
+ "w_type": "godan verb stem",
+ "romaji": "jaretsuki"
+ },
+ "戯れ付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "jaretsuke"
+ },
+ "戯れ付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "jaretsuko"
+ },
+ "戯れ付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "jaretsuita"
+ },
+ "戯れ付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "jaretsuite"
+ },
+ "輔か": {
+ "w_type": "godan verb stem",
+ "romaji": "tasuka"
+ },
+ "輔き": {
+ "w_type": "godan verb stem",
+ "romaji": "tasuki"
+ },
+ "輔け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasuke"
+ },
+ "輔こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tasuko"
+ },
+ "輔いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasuita"
+ },
+ "輔いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tasuite"
+ },
+ "すっ転ば": {
+ "w_type": "godan verb stem",
+ "romaji": "sukkoroba"
+ },
+ "すっ転び": {
+ "w_type": "godan verb stem",
+ "romaji": "sukkorobi"
+ },
+ "すっ転べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukkorobe"
+ },
+ "すっ転ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "sukkorobo"
+ },
+ "すっ転んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukkoronda"
+ },
+ "すっ転んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukkoronde"
+ },
+ "古さ": {
+ "w_type": "godan verb stem",
+ "romaji": "furusa"
+ },
+ "古し": {
+ "w_type": "godan verb stem",
+ "romaji": "furushi"
+ },
+ "古せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuse"
+ },
+ "古そ": {
+ "w_type": "godan verb stem",
+ "romaji": "furuso"
+ },
+ "古した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furushita"
+ },
+ "古して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furushite"
+ },
+ "踊り明かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriakasa"
+ },
+ "踊り明かし": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriakashi"
+ },
+ "踊り明かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriakase"
+ },
+ "踊り明かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriakaso"
+ },
+ "踊り明かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriakashita"
+ },
+ "踊り明かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriakashite"
+ },
+ "造り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridasa"
+ },
+ "造り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridashi"
+ },
+ "造り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridase"
+ },
+ "造り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukuridaso"
+ },
+ "造り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridashita"
+ },
+ "造り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukuridashite"
+ },
+ "ごった返えさ": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaesa"
+ },
+ "ごった返えし": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaeshi"
+ },
+ "ごった返えせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaese"
+ },
+ "ごった返えそ": {
+ "w_type": "godan verb stem",
+ "romaji": "gottagaeso"
+ },
+ "ごった返えした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaeshita"
+ },
+ "ごった返えして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "gottagaeshite"
+ },
+ "引絞ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishibora"
+ },
+ "引絞り": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishibori"
+ },
+ "引絞れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishibore"
+ },
+ "引絞ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikishiboro"
+ },
+ "引絞った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishibotta"
+ },
+ "引絞って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikishibotte"
+ },
+ "填め込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekoma"
+ },
+ "填め込み": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomi"
+ },
+ "填め込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekome"
+ },
+ "填め込も": {
+ "w_type": "godan verb stem",
+ "romaji": "hamekomo"
+ },
+ "填め込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonda"
+ },
+ "填め込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hamekonde"
+ },
+ "飛びつか": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuka"
+ },
+ "飛びつき": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuki"
+ },
+ "飛びつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuke"
+ },
+ "飛びつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuko"
+ },
+ "飛びついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuita"
+ },
+ "飛びついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuite"
+ },
+ "書き出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidasa"
+ },
+ "書き出し": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidashi"
+ },
+ "書き出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidase"
+ },
+ "書き出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakidaso"
+ },
+ "書き出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidashita"
+ },
+ "書き出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakidashite"
+ },
+ "受け戻さ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukemodosa"
+ },
+ "受け戻し": {
+ "w_type": "godan verb stem",
+ "romaji": "ukemodoshi"
+ },
+ "受け戻せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukemodose"
+ },
+ "受け戻そ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukemodoso"
+ },
+ "受け戻した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukemodoshita"
+ },
+ "受け戻して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukemodoshite"
+ },
+ "話し合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiawa"
+ },
+ "話し合い": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiai"
+ },
+ "話し合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiae"
+ },
+ "話し合お": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiao"
+ },
+ "話し合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiatta"
+ },
+ "話し合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiatte"
+ },
+ "斎わ": {
+ "w_type": "godan verb stem",
+ "romaji": "iwawa"
+ },
+ "斎い": {
+ "w_type": "godan verb stem",
+ "romaji": "iwai"
+ },
+ "斎え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iwae"
+ },
+ "斎お": {
+ "w_type": "godan verb stem",
+ "romaji": "iwao"
+ },
+ "斎った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iwatta"
+ },
+ "斎って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iwatte"
+ },
+ "溜込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekoma"
+ },
+ "溜込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekomi"
+ },
+ "溜込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekome"
+ },
+ "溜込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tamekomo"
+ },
+ "溜込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekonda"
+ },
+ "溜込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tamekonde"
+ },
+ "責付か": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuka"
+ },
+ "責付き": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuki"
+ },
+ "責付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuke"
+ },
+ "責付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "settsuko"
+ },
+ "責付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuita"
+ },
+ "責付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "settsuite"
+ },
+ "捩込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikoma"
+ },
+ "捩込み": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikomi"
+ },
+ "捩込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikome"
+ },
+ "捩込も": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikomo"
+ },
+ "捩込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikonda"
+ },
+ "捩込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikonde"
+ },
+ "書きなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaosa"
+ },
+ "書きなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaoshi"
+ },
+ "書きなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaose"
+ },
+ "書きなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakinaoso"
+ },
+ "書きなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaoshita"
+ },
+ "書きなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakinaoshite"
+ },
+ "かけ合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeawa"
+ },
+ "かけ合い": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeai"
+ },
+ "かけ合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeae"
+ },
+ "かけ合お": {
+ "w_type": "godan verb stem",
+ "romaji": "kakeao"
+ },
+ "かけ合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeatta"
+ },
+ "かけ合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakeatte"
+ },
+ "買足さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitasa"
+ },
+ "買足し": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitashi"
+ },
+ "買足せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitase"
+ },
+ "買足そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kaitaso"
+ },
+ "買足した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitashita"
+ },
+ "買足して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kaitashite"
+ },
+ "囲わ": {
+ "w_type": "godan verb stem",
+ "romaji": "kakowa"
+ },
+ "囲い": {
+ "w_type": "godan verb stem",
+ "romaji": "kakoi"
+ },
+ "囲え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakoe"
+ },
+ "囲お": {
+ "w_type": "godan verb stem",
+ "romaji": "kakoo"
+ },
+ "囲った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakotta"
+ },
+ "囲って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakotte"
+ },
+ "呶鳴り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridasa"
+ },
+ "呶鳴り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridashi"
+ },
+ "呶鳴り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridase"
+ },
+ "呶鳴り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "donaridaso"
+ },
+ "呶鳴り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridashita"
+ },
+ "呶鳴り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "donaridashite"
+ },
+ "説き及ば": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyoba"
+ },
+ "説き及び": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyobi"
+ },
+ "説き及べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyobe"
+ },
+ "説き及ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "tokioyobo"
+ },
+ "説き及んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyonda"
+ },
+ "説き及んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokioyonde"
+ },
+ "篭もら": {
+ "w_type": "godan verb stem",
+ "romaji": "komora"
+ },
+ "篭もり": {
+ "w_type": "godan verb stem",
+ "romaji": "komori"
+ },
+ "篭もれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komore"
+ },
+ "篭もろ": {
+ "w_type": "godan verb stem",
+ "romaji": "komoro"
+ },
+ "篭もった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komotta"
+ },
+ "篭もって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komotte"
+ },
+ "躍り掛から": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakara"
+ },
+ "躍り掛かり": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakari"
+ },
+ "躍り掛かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakare"
+ },
+ "躍り掛かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakaro"
+ },
+ "躍り掛かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakatta"
+ },
+ "躍り掛かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakatte"
+ },
+ "刮が": {
+ "w_type": "godan verb stem",
+ "romaji": "kosoga"
+ },
+ "刮ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "kosogi"
+ },
+ "刮げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosoge"
+ },
+ "刮ご": {
+ "w_type": "godan verb stem",
+ "romaji": "kosogo"
+ },
+ "刮いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosoida"
+ },
+ "刮いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosoide"
+ },
+ "下り立た": {
+ "w_type": "godan verb stem",
+ "romaji": "oritata"
+ },
+ "下り立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "oritachi"
+ },
+ "下り立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritate"
+ },
+ "下り立と": {
+ "w_type": "godan verb stem",
+ "romaji": "oritato"
+ },
+ "下り立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatta"
+ },
+ "下り立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oritatte"
+ },
+ "絞込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shiborikoma"
+ },
+ "絞込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shiborikomi"
+ },
+ "絞込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiborikome"
+ },
+ "絞込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shiborikomo"
+ },
+ "絞込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiborikonda"
+ },
+ "絞込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiborikonde"
+ },
+ "ずり下がら": {
+ "w_type": "godan verb stem",
+ "romaji": "zurisagara"
+ },
+ "ずり下がり": {
+ "w_type": "godan verb stem",
+ "romaji": "zurisagari"
+ },
+ "ずり下がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "zurisagare"
+ },
+ "ずり下がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "zurisagaro"
+ },
+ "ずり下がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "zurisagatta"
+ },
+ "ずり下がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "zurisagatte"
+ },
+ "殴り飛ばさ": {
+ "w_type": "godan verb stem",
+ "romaji": "naguritobasa"
+ },
+ "殴り飛ばし": {
+ "w_type": "godan verb stem",
+ "romaji": "naguritobashi"
+ },
+ "殴り飛ばせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naguritobase"
+ },
+ "殴り飛ばそ": {
+ "w_type": "godan verb stem",
+ "romaji": "naguritobaso"
+ },
+ "殴り飛ばした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naguritobashita"
+ },
+ "殴り飛ばして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "naguritobashite"
+ },
+ "読み返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikaesa"
+ },
+ "読み返し": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikaeshi"
+ },
+ "読み返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikaese"
+ },
+ "読み返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "yomikaeso"
+ },
+ "読み返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikaeshita"
+ },
+ "読み返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yomikaeshite"
+ },
+ "悖ら": {
+ "w_type": "godan verb stem",
+ "romaji": "motora"
+ },
+ "悖り": {
+ "w_type": "godan verb stem",
+ "romaji": "motori"
+ },
+ "悖れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "motore"
+ },
+ "悖ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "motoro"
+ },
+ "悖った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mototta"
+ },
+ "悖って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mototte"
+ },
+ "度重なら": {
+ "w_type": "godan verb stem",
+ "romaji": "tabikasanara"
+ },
+ "度重なり": {
+ "w_type": "godan verb stem",
+ "romaji": "tabikasanari"
+ },
+ "度重なれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tabikasanare"
+ },
+ "度重なろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tabikasanaro"
+ },
+ "度重なった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tabikasanatta"
+ },
+ "度重なって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tabikasanatte"
+ },
+ "終ら": {
+ "w_type": "godan verb stem",
+ "romaji": "owara"
+ },
+ "終り": {
+ "w_type": "godan verb stem",
+ "romaji": "owari"
+ },
+ "終れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oware"
+ },
+ "終ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "owaro"
+ },
+ "終った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "owatta"
+ },
+ "終って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "owatte"
+ },
+ "叩きなおさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakinaosa"
+ },
+ "叩きなおし": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakinaoshi"
+ },
+ "叩きなおせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakinaose"
+ },
+ "叩きなおそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tatakinaoso"
+ },
+ "叩きなおした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakinaoshita"
+ },
+ "叩きなおして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tatakinaoshite"
+ },
+ "折り返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "orikaesa"
+ },
+ "折り返し": {
+ "w_type": "godan verb stem",
+ "romaji": "orikaeshi"
+ },
+ "折り返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orikaese"
+ },
+ "折り返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "orikaeso"
+ },
+ "折り返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orikaeshita"
+ },
+ "折り返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orikaeshite"
+ },
+ "洗いざらさ": {
+ "w_type": "godan verb stem",
+ "romaji": "araizarasa"
+ },
+ "洗いざらし": {
+ "w_type": "godan verb stem",
+ "romaji": "araizarashi"
+ },
+ "洗いざらせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araizarase"
+ },
+ "洗いざらそ": {
+ "w_type": "godan verb stem",
+ "romaji": "araizaraso"
+ },
+ "洗いざらした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araizarashita"
+ },
+ "洗いざらして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "araizarashite"
+ },
+ "打ち殺さ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikorosa"
+ },
+ "打ち殺し": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikoroshi"
+ },
+ "打ち殺せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikorose"
+ },
+ "打ち殺そ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikoroso"
+ },
+ "打ち殺した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikoroshita"
+ },
+ "打ち殺して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikoroshite"
+ },
+ "発か": {
+ "w_type": "godan verb stem",
+ "romaji": "abaka"
+ },
+ "発き": {
+ "w_type": "godan verb stem",
+ "romaji": "abaki"
+ },
+ "発け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "abake"
+ },
+ "発こ": {
+ "w_type": "godan verb stem",
+ "romaji": "abako"
+ },
+ "発いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "abaita"
+ },
+ "発いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "abaite"
+ },
+ "刷り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "surikoma"
+ },
+ "刷り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "surikomi"
+ },
+ "刷り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikome"
+ },
+ "刷り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "surikomo"
+ },
+ "刷り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikonda"
+ },
+ "刷り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikonde"
+ },
+ "荒ま": {
+ "w_type": "godan verb stem",
+ "romaji": "susama"
+ },
+ "荒み": {
+ "w_type": "godan verb stem",
+ "romaji": "susami"
+ },
+ "荒め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susame"
+ },
+ "荒も": {
+ "w_type": "godan verb stem",
+ "romaji": "susamo"
+ },
+ "荒んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susanda"
+ },
+ "荒んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susande"
+ },
+ "起さ": {
+ "w_type": "godan verb stem",
+ "romaji": "okosa"
+ },
+ "起し": {
+ "w_type": "godan verb stem",
+ "romaji": "okoshi"
+ },
+ "起せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okose"
+ },
+ "起そ": {
+ "w_type": "godan verb stem",
+ "romaji": "okoso"
+ },
+ "起した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okoshita"
+ },
+ "起して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "okoshite"
+ },
+ "踊りださ": {
+ "w_type": "godan verb stem",
+ "romaji": "odoridasa"
+ },
+ "踊りだし": {
+ "w_type": "godan verb stem",
+ "romaji": "odoridashi"
+ },
+ "踊りだせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoridase"
+ },
+ "踊りだそ": {
+ "w_type": "godan verb stem",
+ "romaji": "odoridaso"
+ },
+ "踊りだした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoridashita"
+ },
+ "踊りだして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoridashite"
+ },
+ "為ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nara"
+ },
+ "為り": {
+ "w_type": "godan verb stem",
+ "romaji": "nari"
+ },
+ "為れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nare"
+ },
+ "為ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "naro"
+ },
+ "為った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "natta"
+ },
+ "為って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "natte"
+ },
+ "囓ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kajira"
+ },
+ "囓り": {
+ "w_type": "godan verb stem",
+ "romaji": "kajiri"
+ },
+ "囓れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kajire"
+ },
+ "囓ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kajiro"
+ },
+ "囓った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kajitta"
+ },
+ "囓って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kajitte"
+ },
+ "跳びつか": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuka"
+ },
+ "跳びつき": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuki"
+ },
+ "跳びつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuke"
+ },
+ "跳びつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobitsuko"
+ },
+ "跳びついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuita"
+ },
+ "跳びついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobitsuite"
+ },
+ "誘わ": {
+ "w_type": "godan verb stem",
+ "romaji": "sasowa"
+ },
+ "誘い": {
+ "w_type": "godan verb stem",
+ "romaji": "sasoi"
+ },
+ "誘え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasoe"
+ },
+ "誘お": {
+ "w_type": "godan verb stem",
+ "romaji": "sasoo"
+ },
+ "誘った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasotta"
+ },
+ "誘って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sasotte"
+ },
+ "滑り落とさ": {
+ "w_type": "godan verb stem",
+ "romaji": "suberiotosa"
+ },
+ "滑り落とし": {
+ "w_type": "godan verb stem",
+ "romaji": "suberiotoshi"
+ },
+ "滑り落とせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberiotose"
+ },
+ "滑り落とそ": {
+ "w_type": "godan verb stem",
+ "romaji": "suberiotoso"
+ },
+ "滑り落とした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberiotoshita"
+ },
+ "滑り落として": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberiotoshite"
+ },
+ "咲き出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidasa"
+ },
+ "咲き出し": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidashi"
+ },
+ "咲き出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidase"
+ },
+ "咲き出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidaso"
+ },
+ "咲き出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidashita"
+ },
+ "咲き出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidashite"
+ },
+ "下ろさ": {
+ "w_type": "godan verb stem",
+ "romaji": "orosa"
+ },
+ "下ろし": {
+ "w_type": "godan verb stem",
+ "romaji": "oroshi"
+ },
+ "下ろせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "orose"
+ },
+ "下ろそ": {
+ "w_type": "godan verb stem",
+ "romaji": "oroso"
+ },
+ "下ろした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oroshita"
+ },
+ "下ろして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oroshite"
+ },
+ "移り変わら": {
+ "w_type": "godan verb stem",
+ "romaji": "utsurikawara"
+ },
+ "移り変わり": {
+ "w_type": "godan verb stem",
+ "romaji": "utsurikawari"
+ },
+ "移り変われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsurikaware"
+ },
+ "移り変わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "utsurikawaro"
+ },
+ "移り変わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsurikawatta"
+ },
+ "移り変わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsurikawatte"
+ },
+ "為さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nasa"
+ },
+ "為し": {
+ "w_type": "godan verb stem",
+ "romaji": "nashi"
+ },
+ "為せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nase"
+ },
+ "為そ": {
+ "w_type": "godan verb stem",
+ "romaji": "naso"
+ },
+ "為した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nashita"
+ },
+ "為して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nashite"
+ },
+ "割切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "warikira"
+ },
+ "割切り": {
+ "w_type": "godan verb stem",
+ "romaji": "warikiri"
+ },
+ "割切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikire"
+ },
+ "割切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "warikiro"
+ },
+ "割切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikitta"
+ },
+ "割切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "warikitte"
+ },
+ "奮い起さ": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiokosa"
+ },
+ "奮い起し": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiokoshi"
+ },
+ "奮い起せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiokose"
+ },
+ "奮い起そ": {
+ "w_type": "godan verb stem",
+ "romaji": "furuiokoso"
+ },
+ "奮い起した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiokoshita"
+ },
+ "奮い起して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furuiokoshite"
+ },
+ "出てゆか": {
+ "w_type": "godan verb stem",
+ "romaji": "deteika"
+ },
+ "出てゆき": {
+ "w_type": "godan verb stem",
+ "romaji": "deteiki"
+ },
+ "出てゆけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deteike"
+ },
+ "出てゆこ": {
+ "w_type": "godan verb stem",
+ "romaji": "deteiko"
+ },
+ "出てゆいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deteiita"
+ },
+ "出てゆいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "deteiite"
+ },
+ "反っくり返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "sokkurikaera"
+ },
+ "反っくり返り": {
+ "w_type": "godan verb stem",
+ "romaji": "sokkurikaeri"
+ },
+ "反っくり返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokkurikaere"
+ },
+ "反っくり返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "sokkurikaero"
+ },
+ "反っくり返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokkurikaetta"
+ },
+ "反っくり返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sokkurikaette"
+ },
+ "啜り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "susurikoma"
+ },
+ "啜り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "susurikomi"
+ },
+ "啜り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susurikome"
+ },
+ "啜り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "susurikomo"
+ },
+ "啜り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susurikonda"
+ },
+ "啜り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "susurikonde"
+ },
+ "趣か": {
+ "w_type": "godan verb stem",
+ "romaji": "omomuka"
+ },
+ "趣き": {
+ "w_type": "godan verb stem",
+ "romaji": "omomuki"
+ },
+ "趣け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omomuke"
+ },
+ "趣こ": {
+ "w_type": "godan verb stem",
+ "romaji": "omomuko"
+ },
+ "趣いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omomuita"
+ },
+ "趣いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omomuite"
+ },
+ "次が": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuga"
+ },
+ "次ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsugi"
+ },
+ "次げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuge"
+ },
+ "次ご": {
+ "w_type": "godan verb stem",
+ "romaji": "tsugo"
+ },
+ "次いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuida"
+ },
+ "次いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuide"
+ },
+ "壊さ": {
+ "w_type": "godan verb stem",
+ "romaji": "kowasa"
+ },
+ "壊し": {
+ "w_type": "godan verb stem",
+ "romaji": "kowashi"
+ },
+ "壊せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kowase"
+ },
+ "壊そ": {
+ "w_type": "godan verb stem",
+ "romaji": "kowaso"
+ },
+ "壊した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kowashita"
+ },
+ "壊して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kowashite"
+ },
+ "掘り起さ": {
+ "w_type": "godan verb stem",
+ "romaji": "horiokosa"
+ },
+ "掘り起し": {
+ "w_type": "godan verb stem",
+ "romaji": "horiokoshi"
+ },
+ "掘り起せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horiokose"
+ },
+ "掘り起そ": {
+ "w_type": "godan verb stem",
+ "romaji": "horiokoso"
+ },
+ "掘り起した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horiokoshita"
+ },
+ "掘り起して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "horiokoshite"
+ },
+ "貪りつくさ": {
+ "w_type": "godan verb stem",
+ "romaji": "musaboritsukusa"
+ },
+ "貪りつくし": {
+ "w_type": "godan verb stem",
+ "romaji": "musaboritsukushi"
+ },
+ "貪りつくせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaboritsukuse"
+ },
+ "貪りつくそ": {
+ "w_type": "godan verb stem",
+ "romaji": "musaboritsukuso"
+ },
+ "貪りつくした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaboritsukushita"
+ },
+ "貪りつくして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "musaboritsukushite"
+ },
+ "ちぎり取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "chigiritora"
+ },
+ "ちぎり取り": {
+ "w_type": "godan verb stem",
+ "romaji": "chigiritori"
+ },
+ "ちぎり取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chigiritore"
+ },
+ "ちぎり取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "chigiritoro"
+ },
+ "ちぎり取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chigiritotta"
+ },
+ "ちぎり取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chigiritotte"
+ },
+ "使い慣らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukainarasa"
+ },
+ "使い慣らし": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukainarashi"
+ },
+ "使い慣らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukainarase"
+ },
+ "使い慣らそ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsukainaraso"
+ },
+ "使い慣らした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukainarashita"
+ },
+ "使い慣らして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsukainarashite"
+ },
+ "切り捲ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakura"
+ },
+ "切り捲り": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakuri"
+ },
+ "切り捲れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakure"
+ },
+ "切り捲ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakuro"
+ },
+ "切り捲った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakutta"
+ },
+ "切り捲って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakutte"
+ },
+ "先だた": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidata"
+ },
+ "先だち": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidachi"
+ },
+ "先だて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidate"
+ },
+ "先だと": {
+ "w_type": "godan verb stem",
+ "romaji": "sakidato"
+ },
+ "先だった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidatta"
+ },
+ "先だって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sakidatte"
+ },
+ "追払わ": {
+ "w_type": "godan verb stem",
+ "romaji": "oiharawa"
+ },
+ "追払い": {
+ "w_type": "godan verb stem",
+ "romaji": "oiharai"
+ },
+ "追払え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiharae"
+ },
+ "追払お": {
+ "w_type": "godan verb stem",
+ "romaji": "oiharao"
+ },
+ "追払った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiharatta"
+ },
+ "追払って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oiharatte"
+ },
+ "稼ぎ取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kasegitora"
+ },
+ "稼ぎ取り": {
+ "w_type": "godan verb stem",
+ "romaji": "kasegitori"
+ },
+ "稼ぎ取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasegitore"
+ },
+ "稼ぎ取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kasegitoro"
+ },
+ "稼ぎ取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasegitotta"
+ },
+ "稼ぎ取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kasegitotte"
+ },
+ "打切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikira"
+ },
+ "打切り": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikiri"
+ },
+ "打切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikire"
+ },
+ "打切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikiro"
+ },
+ "打切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikitta"
+ },
+ "打切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikitte"
+ },
+ "渋ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shibura"
+ },
+ "渋り": {
+ "w_type": "godan verb stem",
+ "romaji": "shiburi"
+ },
+ "渋れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibure"
+ },
+ "渋ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shiburo"
+ },
+ "渋った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibutta"
+ },
+ "渋って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shibutte"
+ },
+ "引き越さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkosa"
+ },
+ "引き越し": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkoshi"
+ },
+ "引き越せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkose"
+ },
+ "引き越そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikkoso"
+ },
+ "引き越した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkoshita"
+ },
+ "引き越して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikkoshite"
+ },
+ "からめ取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "karametora"
+ },
+ "からめ取り": {
+ "w_type": "godan verb stem",
+ "romaji": "karametori"
+ },
+ "からめ取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametore"
+ },
+ "からめ取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "karametoro"
+ },
+ "からめ取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametotta"
+ },
+ "からめ取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "karametotte"
+ },
+ "打た": {
+ "w_type": "godan verb stem",
+ "romaji": "uta"
+ },
+ "打ち": {
+ "w_type": "godan verb stem",
+ "romaji": "uchi"
+ },
+ "打て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ute"
+ },
+ "打と": {
+ "w_type": "godan verb stem",
+ "romaji": "uto"
+ },
+ "打った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utta"
+ },
+ "打って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utte"
+ },
+ "醂さ": {
+ "w_type": "godan verb stem",
+ "romaji": "sawasa"
+ },
+ "醂し": {
+ "w_type": "godan verb stem",
+ "romaji": "sawashi"
+ },
+ "醂せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawase"
+ },
+ "醂そ": {
+ "w_type": "godan verb stem",
+ "romaji": "sawaso"
+ },
+ "醂した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawashita"
+ },
+ "醂して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sawashite"
+ },
+ "受け合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "ukeawa"
+ },
+ "受け合い": {
+ "w_type": "godan verb stem",
+ "romaji": "ukeai"
+ },
+ "受け合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukeae"
+ },
+ "受け合お": {
+ "w_type": "godan verb stem",
+ "romaji": "ukeao"
+ },
+ "受け合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukeatta"
+ },
+ "受け合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ukeatte"
+ },
+ "誓わ": {
+ "w_type": "godan verb stem",
+ "romaji": "chikawa"
+ },
+ "誓い": {
+ "w_type": "godan verb stem",
+ "romaji": "chikai"
+ },
+ "誓え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chikae"
+ },
+ "誓お": {
+ "w_type": "godan verb stem",
+ "romaji": "chikao"
+ },
+ "誓った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chikatta"
+ },
+ "誓って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "chikatte"
+ },
+ "さて置か": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoka"
+ },
+ "さて置き": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoki"
+ },
+ "さて置け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoke"
+ },
+ "さて置こ": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoko"
+ },
+ "さて置いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoita"
+ },
+ "さて置いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoite"
+ },
+ "扨措か": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoka"
+ },
+ "扨措き": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoki"
+ },
+ "扨措け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoke"
+ },
+ "扨措こ": {
+ "w_type": "godan verb stem",
+ "romaji": "sateoko"
+ },
+ "扨措いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoita"
+ },
+ "扨措いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sateoite"
+ },
+ "話し出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashidasa"
+ },
+ "話し出し": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashidashi"
+ },
+ "話し出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashidase"
+ },
+ "話し出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashidaso"
+ },
+ "話し出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashidashita"
+ },
+ "話し出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashidashite"
+ },
+ "吹雪か": {
+ "w_type": "godan verb stem",
+ "romaji": "fubuka"
+ },
+ "吹雪き": {
+ "w_type": "godan verb stem",
+ "romaji": "fubuki"
+ },
+ "吹雪け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fubuke"
+ },
+ "吹雪こ": {
+ "w_type": "godan verb stem",
+ "romaji": "fubuko"
+ },
+ "吹雪いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fubuita"
+ },
+ "吹雪いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fubuite"
+ },
+ "照り上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "teriagara"
+ },
+ "照り上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "teriagari"
+ },
+ "照り上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "teriagare"
+ },
+ "照り上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "teriagaro"
+ },
+ "照り上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "teriagatta"
+ },
+ "照り上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "teriagatte"
+ },
+ "仕込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shikoma"
+ },
+ "仕込み": {
+ "w_type": "godan verb stem",
+ "romaji": "shikomi"
+ },
+ "仕込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikome"
+ },
+ "仕込も": {
+ "w_type": "godan verb stem",
+ "romaji": "shikomo"
+ },
+ "仕込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikonda"
+ },
+ "仕込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikonde"
+ },
+ "立合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiawa"
+ },
+ "立合い": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiai"
+ },
+ "立合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiae"
+ },
+ "立合お": {
+ "w_type": "godan verb stem",
+ "romaji": "tachiao"
+ },
+ "立合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiatta"
+ },
+ "立合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachiatte"
+ },
+ "好き好ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sukikonoma"
+ },
+ "好き好み": {
+ "w_type": "godan verb stem",
+ "romaji": "sukikonomi"
+ },
+ "好き好め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukikonome"
+ },
+ "好き好も": {
+ "w_type": "godan verb stem",
+ "romaji": "sukikonomo"
+ },
+ "好き好んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukikononda"
+ },
+ "好き好んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sukikononde"
+ },
+ "搔込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkoma"
+ },
+ "搔込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkomi"
+ },
+ "搔込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkome"
+ },
+ "搔込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kakkomo"
+ },
+ "搔込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkonda"
+ },
+ "搔込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kakkonde"
+ },
+ "刮げ取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kosogetora"
+ },
+ "刮げ取り": {
+ "w_type": "godan verb stem",
+ "romaji": "kosogetori"
+ },
+ "刮げ取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosogetore"
+ },
+ "刮げ取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kosogetoro"
+ },
+ "刮げ取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosogetotta"
+ },
+ "刮げ取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kosogetotte"
+ },
+ "貼り出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "haridasa"
+ },
+ "貼り出し": {
+ "w_type": "godan verb stem",
+ "romaji": "haridashi"
+ },
+ "貼り出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haridase"
+ },
+ "貼り出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "haridaso"
+ },
+ "貼り出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haridashita"
+ },
+ "貼り出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "haridashite"
+ },
+ "突っ突か": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttsuka"
+ },
+ "突っ突き": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttsuki"
+ },
+ "突っ突け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttsuke"
+ },
+ "突っ突こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsuttsuko"
+ },
+ "突っ突いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttsuita"
+ },
+ "突っ突いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsuttsuite"
+ },
+ "行き当ら": {
+ "w_type": "godan verb stem",
+ "romaji": "yukiatara"
+ },
+ "行き当り": {
+ "w_type": "godan verb stem",
+ "romaji": "yukiatari"
+ },
+ "行き当れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukiatare"
+ },
+ "行き当ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yukiataro"
+ },
+ "行き当った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukiatatta"
+ },
+ "行き当って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yukiatatte"
+ },
+ "喰らいつか": {
+ "w_type": "godan verb stem",
+ "romaji": "kuraitsuka"
+ },
+ "喰らいつき": {
+ "w_type": "godan verb stem",
+ "romaji": "kuraitsuki"
+ },
+ "喰らいつけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuraitsuke"
+ },
+ "喰らいつこ": {
+ "w_type": "godan verb stem",
+ "romaji": "kuraitsuko"
+ },
+ "喰らいついた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuraitsuita"
+ },
+ "喰らいついて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuraitsuite"
+ },
+ "覗きこま": {
+ "w_type": "godan verb stem",
+ "romaji": "nozokikoma"
+ },
+ "覗きこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "nozokikomi"
+ },
+ "覗きこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nozokikome"
+ },
+ "覗きこも": {
+ "w_type": "godan verb stem",
+ "romaji": "nozokikomo"
+ },
+ "覗きこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nozokikonda"
+ },
+ "覗きこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nozokikonde"
+ },
+ "切りまくら": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakura"
+ },
+ "切りまくり": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakuri"
+ },
+ "切りまくれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakure"
+ },
+ "切りまくろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirimakuro"
+ },
+ "切りまくった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakutta"
+ },
+ "切りまくって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirimakutte"
+ },
+ "打ち克た": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikata"
+ },
+ "打ち克ち": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikachi"
+ },
+ "打ち克て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikate"
+ },
+ "打ち克と": {
+ "w_type": "godan verb stem",
+ "romaji": "uchikato"
+ },
+ "打ち克った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatta"
+ },
+ "打ち克って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uchikatte"
+ },
+ "塗り潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubusa"
+ },
+ "塗り潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubushi"
+ },
+ "塗り潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubuse"
+ },
+ "塗り潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "nuritsubuso"
+ },
+ "塗り潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubushita"
+ },
+ "塗り潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nuritsubushite"
+ },
+ "目付から": {
+ "w_type": "godan verb stem",
+ "romaji": "mekkara"
+ },
+ "目付かり": {
+ "w_type": "godan verb stem",
+ "romaji": "mekkari"
+ },
+ "目付かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekkare"
+ },
+ "目付かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "mekkaro"
+ },
+ "目付かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekkatta"
+ },
+ "目付かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mekkatte"
+ },
+ "飛び乗ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tobinora"
+ },
+ "飛び乗り": {
+ "w_type": "godan verb stem",
+ "romaji": "tobinori"
+ },
+ "飛び乗れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobinore"
+ },
+ "飛び乗ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tobinoro"
+ },
+ "飛び乗った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobinotta"
+ },
+ "飛び乗って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tobinotte"
+ },
+ "垂れ流さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tarenagasa"
+ },
+ "垂れ流し": {
+ "w_type": "godan verb stem",
+ "romaji": "tarenagashi"
+ },
+ "垂れ流せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarenagase"
+ },
+ "垂れ流そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tarenagaso"
+ },
+ "垂れ流した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarenagashita"
+ },
+ "垂れ流して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tarenagashite"
+ },
+ "偉ぶら": {
+ "w_type": "godan verb stem",
+ "romaji": "erabura"
+ },
+ "偉ぶり": {
+ "w_type": "godan verb stem",
+ "romaji": "eraburi"
+ },
+ "偉ぶれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabure"
+ },
+ "偉ぶろ": {
+ "w_type": "godan verb stem",
+ "romaji": "eraburo"
+ },
+ "偉ぶった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabutta"
+ },
+ "偉ぶって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "erabutte"
+ },
+ "遣って行か": {
+ "w_type": "godan verb stem",
+ "romaji": "yatteika"
+ },
+ "遣って行き": {
+ "w_type": "godan verb stem",
+ "romaji": "yatteiki"
+ },
+ "遣って行け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatteike"
+ },
+ "遣って行こ": {
+ "w_type": "godan verb stem",
+ "romaji": "yatteiko"
+ },
+ "遣って行いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatteiita"
+ },
+ "遣って行いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yatteiite"
+ },
+ "茹であがら": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagara"
+ },
+ "茹であがり": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagari"
+ },
+ "茹であがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagare"
+ },
+ "茹であがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "yudeagaro"
+ },
+ "茹であがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagatta"
+ },
+ "茹であがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "yudeagatte"
+ },
+ "痒がら": {
+ "w_type": "godan verb stem",
+ "romaji": "kayugara"
+ },
+ "痒がり": {
+ "w_type": "godan verb stem",
+ "romaji": "kayugari"
+ },
+ "痒がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kayugare"
+ },
+ "痒がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kayugaro"
+ },
+ "痒がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kayugatta"
+ },
+ "痒がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kayugatte"
+ },
+ "滑りこま": {
+ "w_type": "godan verb stem",
+ "romaji": "suberikoma"
+ },
+ "滑りこみ": {
+ "w_type": "godan verb stem",
+ "romaji": "suberikomi"
+ },
+ "滑りこめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberikome"
+ },
+ "滑りこも": {
+ "w_type": "godan verb stem",
+ "romaji": "suberikomo"
+ },
+ "滑りこんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberikonda"
+ },
+ "滑りこんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suberikonde"
+ },
+ "黄ばま": {
+ "w_type": "godan verb stem",
+ "romaji": "kibama"
+ },
+ "黄ばみ": {
+ "w_type": "godan verb stem",
+ "romaji": "kibami"
+ },
+ "黄ばめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kibame"
+ },
+ "黄ばも": {
+ "w_type": "godan verb stem",
+ "romaji": "kibamo"
+ },
+ "黄ばんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kibanda"
+ },
+ "黄ばんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kibande"
+ },
+ "鶏肌になら": {
+ "w_type": "godan verb stem",
+ "romaji": "torihadaninara"
+ },
+ "鶏肌になり": {
+ "w_type": "godan verb stem",
+ "romaji": "torihadaninari"
+ },
+ "鶏肌になれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihadaninare"
+ },
+ "鶏肌になろ": {
+ "w_type": "godan verb stem",
+ "romaji": "torihadaninaro"
+ },
+ "鶏肌になった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihadaninatta"
+ },
+ "鶏肌になって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "torihadaninatte"
+ },
+ "ど突か": {
+ "w_type": "godan verb stem",
+ "romaji": "dotsuka"
+ },
+ "ど突き": {
+ "w_type": "godan verb stem",
+ "romaji": "dotsuki"
+ },
+ "ど突け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dotsuke"
+ },
+ "ど突こ": {
+ "w_type": "godan verb stem",
+ "romaji": "dotsuko"
+ },
+ "ど突いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dotsuita"
+ },
+ "ど突いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "dotsuite"
+ },
+ "唸ら": {
+ "w_type": "godan verb stem",
+ "romaji": "unara"
+ },
+ "唸り": {
+ "w_type": "godan verb stem",
+ "romaji": "unari"
+ },
+ "唸れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "unare"
+ },
+ "唸ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "unaro"
+ },
+ "唸った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "unatta"
+ },
+ "唸って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "unatte"
+ },
+ "染付か": {
+ "w_type": "godan verb stem",
+ "romaji": "shimitsuka"
+ },
+ "染付き": {
+ "w_type": "godan verb stem",
+ "romaji": "shimitsuki"
+ },
+ "染付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimitsuke"
+ },
+ "染付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "shimitsuko"
+ },
+ "染付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimitsuita"
+ },
+ "染付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shimitsuite"
+ },
+ "咳込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sekikoma"
+ },
+ "咳込み": {
+ "w_type": "godan verb stem",
+ "romaji": "sekikomi"
+ },
+ "咳込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekikome"
+ },
+ "咳込も": {
+ "w_type": "godan verb stem",
+ "romaji": "sekikomo"
+ },
+ "咳込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekikonda"
+ },
+ "咳込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sekikonde"
+ },
+ "磨が": {
+ "w_type": "godan verb stem",
+ "romaji": "toga"
+ },
+ "磨ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "togi"
+ },
+ "磨げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toge"
+ },
+ "磨ご": {
+ "w_type": "godan verb stem",
+ "romaji": "togo"
+ },
+ "磨いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toida"
+ },
+ "磨いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toide"
+ },
+ "降り止ま": {
+ "w_type": "godan verb stem",
+ "romaji": "furiyama"
+ },
+ "降り止み": {
+ "w_type": "godan verb stem",
+ "romaji": "furiyami"
+ },
+ "降り止め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furiyame"
+ },
+ "降り止も": {
+ "w_type": "godan verb stem",
+ "romaji": "furiyamo"
+ },
+ "降り止んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furiyanda"
+ },
+ "降り止んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furiyande"
+ },
+ "受けつが": {
+ "w_type": "godan verb stem",
+ "romaji": "uketsuga"
+ },
+ "受けつぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "uketsugi"
+ },
+ "受けつげ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uketsuge"
+ },
+ "受けつご": {
+ "w_type": "godan verb stem",
+ "romaji": "uketsugo"
+ },
+ "受けついだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uketsuida"
+ },
+ "受けついで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uketsuide"
+ },
+ "舞散ら": {
+ "w_type": "godan verb stem",
+ "romaji": "maichira"
+ },
+ "舞散り": {
+ "w_type": "godan verb stem",
+ "romaji": "maichiri"
+ },
+ "舞散れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maichire"
+ },
+ "舞散ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "maichiro"
+ },
+ "舞散った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maichitta"
+ },
+ "舞散って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maichitte"
+ },
+ "推測ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakara"
+ },
+ "推測り": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakari"
+ },
+ "推測れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakare"
+ },
+ "推測ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshihakaro"
+ },
+ "推測った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakatta"
+ },
+ "推測って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshihakatte"
+ },
+ "裁ち出さ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachidasa"
+ },
+ "裁ち出し": {
+ "w_type": "godan verb stem",
+ "romaji": "tachidashi"
+ },
+ "裁ち出せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachidase"
+ },
+ "裁ち出そ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachidaso"
+ },
+ "裁ち出した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachidashita"
+ },
+ "裁ち出して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachidashite"
+ },
+ "曳か": {
+ "w_type": "godan verb stem",
+ "romaji": "hika"
+ },
+ "曳き": {
+ "w_type": "godan verb stem",
+ "romaji": "hiki"
+ },
+ "曳け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hike"
+ },
+ "曳こ": {
+ "w_type": "godan verb stem",
+ "romaji": "hiko"
+ },
+ "曳いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiita"
+ },
+ "曳いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hiite"
+ },
+ "すれ合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "sureawa"
+ },
+ "すれ合い": {
+ "w_type": "godan verb stem",
+ "romaji": "sureai"
+ },
+ "すれ合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sureae"
+ },
+ "すれ合お": {
+ "w_type": "godan verb stem",
+ "romaji": "sureao"
+ },
+ "すれ合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sureatta"
+ },
+ "すれ合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sureatte"
+ },
+ "釣り込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurikoma"
+ },
+ "釣り込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurikomi"
+ },
+ "釣り込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurikome"
+ },
+ "釣り込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tsurikomo"
+ },
+ "釣り込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurikonda"
+ },
+ "釣り込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsurikonde"
+ },
+ "躍り上がら": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriagara"
+ },
+ "躍り上がり": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriagari"
+ },
+ "躍り上がれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriagare"
+ },
+ "躍り上がろ": {
+ "w_type": "godan verb stem",
+ "romaji": "odoriagaro"
+ },
+ "躍り上がった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriagatta"
+ },
+ "躍り上がって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odoriagatte"
+ },
+ "浮付か": {
+ "w_type": "godan verb stem",
+ "romaji": "uwatsuka"
+ },
+ "浮付き": {
+ "w_type": "godan verb stem",
+ "romaji": "uwatsuki"
+ },
+ "浮付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwatsuke"
+ },
+ "浮付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "uwatsuko"
+ },
+ "浮付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwatsuita"
+ },
+ "浮付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uwatsuite"
+ },
+ "劈か": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunzaka"
+ },
+ "劈き": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunzaki"
+ },
+ "劈け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunzake"
+ },
+ "劈こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tsunzako"
+ },
+ "劈いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunzaita"
+ },
+ "劈いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tsunzaite"
+ },
+ "考え込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaekoma"
+ },
+ "考え込み": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaekomi"
+ },
+ "考え込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaekome"
+ },
+ "考え込も": {
+ "w_type": "godan verb stem",
+ "romaji": "kangaekomo"
+ },
+ "考え込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaekonda"
+ },
+ "考え込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kangaekonde"
+ },
+ "立ち去ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tachisara"
+ },
+ "立ち去り": {
+ "w_type": "godan verb stem",
+ "romaji": "tachisari"
+ },
+ "立ち去れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachisare"
+ },
+ "立ち去ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachisaro"
+ },
+ "立ち去った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachisatta"
+ },
+ "立ち去って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachisatte"
+ },
+ "売渡さ": {
+ "w_type": "godan verb stem",
+ "romaji": "uriwatasa"
+ },
+ "売渡し": {
+ "w_type": "godan verb stem",
+ "romaji": "uriwatashi"
+ },
+ "売渡せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uriwatase"
+ },
+ "売渡そ": {
+ "w_type": "godan verb stem",
+ "romaji": "uriwataso"
+ },
+ "売渡した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uriwatashita"
+ },
+ "売渡して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "uriwatashite"
+ },
+ "白ま": {
+ "w_type": "godan verb stem",
+ "romaji": "shirama"
+ },
+ "白み": {
+ "w_type": "godan verb stem",
+ "romaji": "shirami"
+ },
+ "白め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shirame"
+ },
+ "白も": {
+ "w_type": "godan verb stem",
+ "romaji": "shiramo"
+ },
+ "白んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shiranda"
+ },
+ "白んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shirande"
+ },
+ "舞い立た": {
+ "w_type": "godan verb stem",
+ "romaji": "maitata"
+ },
+ "舞い立ち": {
+ "w_type": "godan verb stem",
+ "romaji": "maitachi"
+ },
+ "舞い立て": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maitate"
+ },
+ "舞い立と": {
+ "w_type": "godan verb stem",
+ "romaji": "maitato"
+ },
+ "舞い立った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maitatta"
+ },
+ "舞い立って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maitatte"
+ },
+ "骨肉相食ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kotsunikuaihama"
+ },
+ "骨肉相食み": {
+ "w_type": "godan verb stem",
+ "romaji": "kotsunikuaihami"
+ },
+ "骨肉相食め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotsunikuaihame"
+ },
+ "骨肉相食も": {
+ "w_type": "godan verb stem",
+ "romaji": "kotsunikuaihamo"
+ },
+ "骨肉相食んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotsunikuaihanda"
+ },
+ "骨肉相食んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kotsunikuaihande"
+ },
+ "塗込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nurikoma"
+ },
+ "塗込み": {
+ "w_type": "godan verb stem",
+ "romaji": "nurikomi"
+ },
+ "塗込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nurikome"
+ },
+ "塗込も": {
+ "w_type": "godan verb stem",
+ "romaji": "nurikomo"
+ },
+ "塗込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nurikonda"
+ },
+ "塗込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nurikonde"
+ },
+ "持扱わ": {
+ "w_type": "godan verb stem",
+ "romaji": "mochiatsukawa"
+ },
+ "持扱い": {
+ "w_type": "godan verb stem",
+ "romaji": "mochiatsukai"
+ },
+ "持扱え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochiatsukae"
+ },
+ "持扱お": {
+ "w_type": "godan verb stem",
+ "romaji": "mochiatsukao"
+ },
+ "持扱った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochiatsukatta"
+ },
+ "持扱って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mochiatsukatte"
+ },
+ "吹込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "fukikoma"
+ },
+ "吹込み": {
+ "w_type": "godan verb stem",
+ "romaji": "fukikomi"
+ },
+ "吹込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukikome"
+ },
+ "吹込も": {
+ "w_type": "godan verb stem",
+ "romaji": "fukikomo"
+ },
+ "吹込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukikonda"
+ },
+ "吹込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fukikonde"
+ },
+ "間に合わ": {
+ "w_type": "godan verb stem",
+ "romaji": "maniawa"
+ },
+ "間に合い": {
+ "w_type": "godan verb stem",
+ "romaji": "maniai"
+ },
+ "間に合え": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maniae"
+ },
+ "間に合お": {
+ "w_type": "godan verb stem",
+ "romaji": "maniao"
+ },
+ "間に合った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maniatta"
+ },
+ "間に合って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "maniatte"
+ },
+ "一本取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "ippontora"
+ },
+ "一本取り": {
+ "w_type": "godan verb stem",
+ "romaji": "ippontori"
+ },
+ "一本取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ippontore"
+ },
+ "一本取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "ippontoro"
+ },
+ "一本取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ippontotta"
+ },
+ "一本取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ippontotte"
+ },
+ "引きあわ": {
+ "w_type": "godan verb stem",
+ "romaji": "hikiawa"
+ },
+ "引きあい": {
+ "w_type": "godan verb stem",
+ "romaji": "hikiai"
+ },
+ "引きあえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikiae"
+ },
+ "引きあお": {
+ "w_type": "godan verb stem",
+ "romaji": "hikiao"
+ },
+ "引きあった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikiatta"
+ },
+ "引きあって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hikiatte"
+ },
+ "拱ねか": {
+ "w_type": "godan verb stem",
+ "romaji": "komanuka"
+ },
+ "拱ねき": {
+ "w_type": "godan verb stem",
+ "romaji": "komanuki"
+ },
+ "拱ねけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komanuke"
+ },
+ "拱ねこ": {
+ "w_type": "godan verb stem",
+ "romaji": "komanuko"
+ },
+ "拱ねいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komanuita"
+ },
+ "拱ねいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "komanuite"
+ },
+ "思い残さ": {
+ "w_type": "godan verb stem",
+ "romaji": "omoinokosa"
+ },
+ "思い残し": {
+ "w_type": "godan verb stem",
+ "romaji": "omoinokoshi"
+ },
+ "思い残せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoinokose"
+ },
+ "思い残そ": {
+ "w_type": "godan verb stem",
+ "romaji": "omoinokoso"
+ },
+ "思い残した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoinokoshita"
+ },
+ "思い残して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoinokoshite"
+ },
+ "命じ終わら": {
+ "w_type": "godan verb stem",
+ "romaji": "meijiowara"
+ },
+ "命じ終わり": {
+ "w_type": "godan verb stem",
+ "romaji": "meijiowari"
+ },
+ "命じ終われ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meijioware"
+ },
+ "命じ終わろ": {
+ "w_type": "godan verb stem",
+ "romaji": "meijiowaro"
+ },
+ "命じ終わった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meijiowatta"
+ },
+ "命じ終わって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "meijiowatte"
+ },
+ "立ち退か": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoka"
+ },
+ "立ち退き": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoki"
+ },
+ "立ち退け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoke"
+ },
+ "立ち退こ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachinoko"
+ },
+ "立ち退いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoita"
+ },
+ "立ち退いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachinoite"
+ },
+ "押黙ら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamara"
+ },
+ "押黙り": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamari"
+ },
+ "押黙れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamare"
+ },
+ "押黙ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshidamaro"
+ },
+ "押黙った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamatta"
+ },
+ "押黙って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshidamatte"
+ },
+ "行き損なわ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisokonawa"
+ },
+ "行き損ない": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisokonai"
+ },
+ "行き損なえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisokonae"
+ },
+ "行き損なお": {
+ "w_type": "godan verb stem",
+ "romaji": "ikisokonao"
+ },
+ "行き損なった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisokonatta"
+ },
+ "行き損なって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikisokonatte"
+ },
+ "降りそそが": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosoga"
+ },
+ "降りそそぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosogi"
+ },
+ "降りそそげ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoge"
+ },
+ "降りそそご": {
+ "w_type": "godan verb stem",
+ "romaji": "furisosogo"
+ },
+ "降りそそいだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoida"
+ },
+ "降りそそいで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furisosoide"
+ },
+ "盗ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nusuma"
+ },
+ "盗み": {
+ "w_type": "godan verb stem",
+ "romaji": "nusumi"
+ },
+ "盗め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nusume"
+ },
+ "盗も": {
+ "w_type": "godan verb stem",
+ "romaji": "nusumo"
+ },
+ "盗んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nusunda"
+ },
+ "盗んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nusunde"
+ },
+ "言い諭さ": {
+ "w_type": "godan verb stem",
+ "romaji": "iisatosa"
+ },
+ "言い諭し": {
+ "w_type": "godan verb stem",
+ "romaji": "iisatoshi"
+ },
+ "言い諭せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisatose"
+ },
+ "言い諭そ": {
+ "w_type": "godan verb stem",
+ "romaji": "iisatoso"
+ },
+ "言い諭した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisatoshita"
+ },
+ "言い諭して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "iisatoshite"
+ },
+ "消し飛ば": {
+ "w_type": "godan verb stem",
+ "romaji": "keshitoba"
+ },
+ "消し飛び": {
+ "w_type": "godan verb stem",
+ "romaji": "keshitobi"
+ },
+ "消し飛べ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "keshitobe"
+ },
+ "消し飛ぼ": {
+ "w_type": "godan verb stem",
+ "romaji": "keshitobo"
+ },
+ "消し飛んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "keshitonda"
+ },
+ "消し飛んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "keshitonde"
+ },
+ "摩り切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "surikira"
+ },
+ "摩り切り": {
+ "w_type": "godan verb stem",
+ "romaji": "surikiri"
+ },
+ "摩り切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikire"
+ },
+ "摩り切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "surikiro"
+ },
+ "摩り切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikitta"
+ },
+ "摩り切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "surikitte"
+ },
+ "移り行か": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuka"
+ },
+ "移り行き": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuki"
+ },
+ "移り行け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuke"
+ },
+ "移り行こ": {
+ "w_type": "godan verb stem",
+ "romaji": "utsuriyuko"
+ },
+ "移り行いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuita"
+ },
+ "移り行いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsuriyuite"
+ },
+ "振り返さ": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaesa"
+ },
+ "振り返し": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaeshi"
+ },
+ "振り返せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaese"
+ },
+ "振り返そ": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaeso"
+ },
+ "振り返した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaeshita"
+ },
+ "振り返して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaeshite"
+ },
+ "取急が": {
+ "w_type": "godan verb stem",
+ "romaji": "toriisoga"
+ },
+ "取急ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "toriisogi"
+ },
+ "取急げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriisoge"
+ },
+ "取急ご": {
+ "w_type": "godan verb stem",
+ "romaji": "toriisogo"
+ },
+ "取急いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriisoida"
+ },
+ "取急いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "toriisoide"
+ },
+ "話しあわ": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiawa"
+ },
+ "話しあい": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiai"
+ },
+ "話しあえ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiae"
+ },
+ "話しあお": {
+ "w_type": "godan verb stem",
+ "romaji": "hanashiao"
+ },
+ "話しあった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiatta"
+ },
+ "話しあって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hanashiatte"
+ },
+ "履ま": {
+ "w_type": "godan verb stem",
+ "romaji": "fuma"
+ },
+ "履み": {
+ "w_type": "godan verb stem",
+ "romaji": "fumi"
+ },
+ "履め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "fume"
+ },
+ "履も": {
+ "w_type": "godan verb stem",
+ "romaji": "fumo"
+ },
+ "履んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "funda"
+ },
+ "履んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "funde"
+ },
+ "押しつまら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsumara"
+ },
+ "押しつまり": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsumari"
+ },
+ "押しつまれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsumare"
+ },
+ "押しつまろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitsumaro"
+ },
+ "押しつまった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsumatta"
+ },
+ "押しつまって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitsumatte"
+ },
+ "振り返ら": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaera"
+ },
+ "振り返り": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaeri"
+ },
+ "振り返れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaere"
+ },
+ "振り返ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "furikaero"
+ },
+ "振り返った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaetta"
+ },
+ "振り返って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furikaette"
+ },
+ "燃えあがら": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagara"
+ },
+ "燃えあがり": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagari"
+ },
+ "燃えあがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagare"
+ },
+ "燃えあがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "moeagaro"
+ },
+ "燃えあがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagatta"
+ },
+ "燃えあがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "moeagatte"
+ },
+ "切取ら": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritora"
+ },
+ "切取り": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritori"
+ },
+ "切取れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritore"
+ },
+ "切取ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "kiritoro"
+ },
+ "切取った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritotta"
+ },
+ "切取って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kiritotte"
+ },
+ "相分ら": {
+ "w_type": "godan verb stem",
+ "romaji": "aiwakara"
+ },
+ "相分り": {
+ "w_type": "godan verb stem",
+ "romaji": "aiwakari"
+ },
+ "相分れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiwakare"
+ },
+ "相分ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "aiwakaro"
+ },
+ "相分った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiwakatta"
+ },
+ "相分って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aiwakatte"
+ },
+ "舐めずら": {
+ "w_type": "godan verb stem",
+ "romaji": "namezura"
+ },
+ "舐めずり": {
+ "w_type": "godan verb stem",
+ "romaji": "namezuri"
+ },
+ "舐めずれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "namezure"
+ },
+ "舐めずろ": {
+ "w_type": "godan verb stem",
+ "romaji": "namezuro"
+ },
+ "舐めずった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "namezutta"
+ },
+ "舐めずって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "namezutte"
+ },
+ "相食ま": {
+ "w_type": "godan verb stem",
+ "romaji": "aihama"
+ },
+ "相食み": {
+ "w_type": "godan verb stem",
+ "romaji": "aihami"
+ },
+ "相食め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aihame"
+ },
+ "相食も": {
+ "w_type": "godan verb stem",
+ "romaji": "aihamo"
+ },
+ "相食んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aihanda"
+ },
+ "相食んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "aihande"
+ },
+ "為腐ら": {
+ "w_type": "godan verb stem",
+ "romaji": "shikusara"
+ },
+ "為腐り": {
+ "w_type": "godan verb stem",
+ "romaji": "shikusari"
+ },
+ "為腐れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikusare"
+ },
+ "為腐ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "shikusaro"
+ },
+ "為腐った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikusatta"
+ },
+ "為腐って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "shikusatte"
+ },
+ "押倒さ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitaosa"
+ },
+ "押倒し": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitaoshi"
+ },
+ "押倒せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitaose"
+ },
+ "押倒そ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshitaoso"
+ },
+ "押倒した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitaoshita"
+ },
+ "押倒して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshitaoshite"
+ },
+ "惜しがら": {
+ "w_type": "godan verb stem",
+ "romaji": "oshigara"
+ },
+ "惜しがり": {
+ "w_type": "godan verb stem",
+ "romaji": "oshigari"
+ },
+ "惜しがれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshigare"
+ },
+ "惜しがろ": {
+ "w_type": "godan verb stem",
+ "romaji": "oshigaro"
+ },
+ "惜しがった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshigatta"
+ },
+ "惜しがって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "oshigatte"
+ },
+ "ねじ切ら": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikira"
+ },
+ "ねじ切り": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikiri"
+ },
+ "ねじ切れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikire"
+ },
+ "ねじ切ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "nejikiro"
+ },
+ "ねじ切った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikitta"
+ },
+ "ねじ切って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nejikitte"
+ },
+ "呑み込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "nomikoma"
+ },
+ "呑み込み": {
+ "w_type": "godan verb stem",
+ "romaji": "nomikomi"
+ },
+ "呑み込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomikome"
+ },
+ "呑み込も": {
+ "w_type": "godan verb stem",
+ "romaji": "nomikomo"
+ },
+ "呑み込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomikonda"
+ },
+ "呑み込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nomikonde"
+ },
+ "沸かさ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakasa"
+ },
+ "沸かし": {
+ "w_type": "godan verb stem",
+ "romaji": "wakashi"
+ },
+ "沸かせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakase"
+ },
+ "沸かそ": {
+ "w_type": "godan verb stem",
+ "romaji": "wakaso"
+ },
+ "沸かした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakashita"
+ },
+ "沸かして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "wakashite"
+ },
+ "振回さ": {
+ "w_type": "godan verb stem",
+ "romaji": "furimawasa"
+ },
+ "振回し": {
+ "w_type": "godan verb stem",
+ "romaji": "furimawashi"
+ },
+ "振回せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimawase"
+ },
+ "振回そ": {
+ "w_type": "godan verb stem",
+ "romaji": "furimawaso"
+ },
+ "振回した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimawashita"
+ },
+ "振回して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "furimawashite"
+ },
+ "くり抜か": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuka"
+ },
+ "くり抜き": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuki"
+ },
+ "くり抜け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuke"
+ },
+ "くり抜こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuko"
+ },
+ "くり抜いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuita"
+ },
+ "くり抜いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuite"
+ },
+ "擂潰さ": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubusa"
+ },
+ "擂潰し": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubushi"
+ },
+ "擂潰せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubuse"
+ },
+ "擂潰そ": {
+ "w_type": "godan verb stem",
+ "romaji": "suritsubuso"
+ },
+ "擂潰した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubushita"
+ },
+ "擂潰して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "suritsubushite"
+ },
+ "溶込ま": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekoma"
+ },
+ "溶込み": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekomi"
+ },
+ "溶込め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekome"
+ },
+ "溶込も": {
+ "w_type": "godan verb stem",
+ "romaji": "tokekomo"
+ },
+ "溶込んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekonda"
+ },
+ "溶込んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tokekonde"
+ },
+ "煌めか": {
+ "w_type": "godan verb stem",
+ "romaji": "kirameka"
+ },
+ "煌めき": {
+ "w_type": "godan verb stem",
+ "romaji": "kirameki"
+ },
+ "煌めけ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirameke"
+ },
+ "煌めこ": {
+ "w_type": "godan verb stem",
+ "romaji": "kirameko"
+ },
+ "煌めいた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirameita"
+ },
+ "煌めいて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kirameite"
+ },
+ "くり貫か": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuka"
+ },
+ "くり貫き": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuki"
+ },
+ "くり貫け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuke"
+ },
+ "くり貫こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kurinuko"
+ },
+ "くり貫いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuita"
+ },
+ "くり貫いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurinuite"
+ },
+ "俯か": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuka"
+ },
+ "俯き": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuki"
+ },
+ "俯け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuke"
+ },
+ "俯こ": {
+ "w_type": "godan verb stem",
+ "romaji": "utsumuko"
+ },
+ "俯いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuita"
+ },
+ "俯いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "utsumuite"
+ },
+ "立ち回ら": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimawara"
+ },
+ "立ち回り": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimawari"
+ },
+ "立ち回れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimaware"
+ },
+ "立ち回ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "tachimawaro"
+ },
+ "立ち回った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimawatta"
+ },
+ "立ち回って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "tachimawatte"
+ },
+ "いたみ悲しま": {
+ "w_type": "godan verb stem",
+ "romaji": "itamikanashima"
+ },
+ "いたみ悲しみ": {
+ "w_type": "godan verb stem",
+ "romaji": "itamikanashimi"
+ },
+ "いたみ悲しめ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itamikanashime"
+ },
+ "いたみ悲しも": {
+ "w_type": "godan verb stem",
+ "romaji": "itamikanashimo"
+ },
+ "いたみ悲しんだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itamikanashinda"
+ },
+ "いたみ悲しんで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "itamikanashinde"
+ },
+ "彫ら": {
+ "w_type": "godan verb stem",
+ "romaji": "hora"
+ },
+ "彫り": {
+ "w_type": "godan verb stem",
+ "romaji": "hori"
+ },
+ "彫れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hore"
+ },
+ "彫ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "horo"
+ },
+ "彫った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hotta"
+ },
+ "彫って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "hotte"
+ },
+ "満たさ": {
+ "w_type": "godan verb stem",
+ "romaji": "mitasa"
+ },
+ "満たし": {
+ "w_type": "godan verb stem",
+ "romaji": "mitashi"
+ },
+ "満たせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitase"
+ },
+ "満たそ": {
+ "w_type": "godan verb stem",
+ "romaji": "mitaso"
+ },
+ "満たした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitashita"
+ },
+ "満たして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "mitashite"
+ },
+ "聞き置か": {
+ "w_type": "godan verb stem",
+ "romaji": "kikioka"
+ },
+ "聞き置き": {
+ "w_type": "godan verb stem",
+ "romaji": "kikioki"
+ },
+ "聞き置け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikioke"
+ },
+ "聞き置こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kikioko"
+ },
+ "聞き置いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikioita"
+ },
+ "聞き置いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kikioite"
+ },
+ "紛らわさ": {
+ "w_type": "godan verb stem",
+ "romaji": "magirawasa"
+ },
+ "紛らわし": {
+ "w_type": "godan verb stem",
+ "romaji": "magirawashi"
+ },
+ "紛らわせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magirawase"
+ },
+ "紛らわそ": {
+ "w_type": "godan verb stem",
+ "romaji": "magirawaso"
+ },
+ "紛らわした": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magirawashita"
+ },
+ "紛らわして": {
+ "w_type": "conjugated godan verb",
+ "romaji": "magirawashite"
+ },
+ "上げ離さ": {
+ "w_type": "godan verb stem",
+ "romaji": "agehanasa"
+ },
+ "上げ離し": {
+ "w_type": "godan verb stem",
+ "romaji": "agehanashi"
+ },
+ "上げ離せ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agehanase"
+ },
+ "上げ離そ": {
+ "w_type": "godan verb stem",
+ "romaji": "agehanaso"
+ },
+ "上げ離した": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agehanashita"
+ },
+ "上げ離して": {
+ "w_type": "conjugated godan verb",
+ "romaji": "agehanashite"
+ },
+ "黒ま": {
+ "w_type": "godan verb stem",
+ "romaji": "kuroma"
+ },
+ "黒み": {
+ "w_type": "godan verb stem",
+ "romaji": "kuromi"
+ },
+ "黒め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kurome"
+ },
+ "黒も": {
+ "w_type": "godan verb stem",
+ "romaji": "kuromo"
+ },
+ "黒んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuronda"
+ },
+ "黒んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kuronde"
+ },
+ "躍り懸から": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakara"
+ },
+ "躍り懸かり": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakari"
+ },
+ "躍り懸かれ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakare"
+ },
+ "躍り懸かろ": {
+ "w_type": "godan verb stem",
+ "romaji": "odorikakaro"
+ },
+ "躍り懸かった": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakatta"
+ },
+ "躍り懸かって": {
+ "w_type": "conjugated godan verb",
+ "romaji": "odorikakatte"
+ },
+ "思い到ら": {
+ "w_type": "godan verb stem",
+ "romaji": "omoiitara"
+ },
+ "思い到り": {
+ "w_type": "godan verb stem",
+ "romaji": "omoiitari"
+ },
+ "思い到れ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoiitare"
+ },
+ "思い到ろ": {
+ "w_type": "godan verb stem",
+ "romaji": "omoiitaro"
+ },
+ "思い到った": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoiitatta"
+ },
+ "思い到って": {
+ "w_type": "conjugated godan verb",
+ "romaji": "omoiitatte"
+ },
+ "瞬が": {
+ "w_type": "godan verb stem",
+ "romaji": "majiroga"
+ },
+ "瞬ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "majirogi"
+ },
+ "瞬げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "majiroge"
+ },
+ "瞬ご": {
+ "w_type": "godan verb stem",
+ "romaji": "majirogo"
+ },
+ "瞬いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "majiroida"
+ },
+ "瞬いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "majiroide"
+ },
+ "歎か": {
+ "w_type": "godan verb stem",
+ "romaji": "nageka"
+ },
+ "歎き": {
+ "w_type": "godan verb stem",
+ "romaji": "nageki"
+ },
+ "歎け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageke"
+ },
+ "歎こ": {
+ "w_type": "godan verb stem",
+ "romaji": "nageko"
+ },
+ "歎いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageita"
+ },
+ "歎いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "nageite"
+ },
+ "感付か": {
+ "w_type": "godan verb stem",
+ "romaji": "kanzuka"
+ },
+ "感付き": {
+ "w_type": "godan verb stem",
+ "romaji": "kanzuki"
+ },
+ "感付け": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanzuke"
+ },
+ "感付こ": {
+ "w_type": "godan verb stem",
+ "romaji": "kanzuko"
+ },
+ "感付いた": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanzuita"
+ },
+ "感付いて": {
+ "w_type": "conjugated godan verb",
+ "romaji": "kanzuite"
+ },
+ "生き急が": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiisoga"
+ },
+ "生き急ぎ": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiisogi"
+ },
+ "生き急げ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiisoge"
+ },
+ "生き急ご": {
+ "w_type": "godan verb stem",
+ "romaji": "ikiisogo"
+ },
+ "生き急いだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiisoida"
+ },
+ "生き急いで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "ikiisoide"
+ },
+ "差し挟ま": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasama"
+ },
+ "差し挟み": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasami"
+ },
+ "差し挟め": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasame"
+ },
+ "差し挟も": {
+ "w_type": "godan verb stem",
+ "romaji": "sashihasamo"
+ },
+ "差し挟んだ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasanda"
+ },
+ "差し挟んで": {
+ "w_type": "conjugated godan verb",
+ "romaji": "sashihasande"
+ },
+ "照らさ": {
+ "w_type": "godan verb stem",
+ "romaji": "terasa"
+ },
+ "照らし": {
+ "w_type": "godan verb stem",
+ "romaji": "terashi"
+ },
+ "照らせ": {
+ "w_type": "conjugated godan verb",
+ "romaji": "terase"
+ },
+ "照らそ": {
+ "w_type