| ofs | hex dump | ascii | 
|---|
| 0000 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 00 00 00 00 00 00 | oauth2-auto-20250624.1919/...... | 
| 0020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0060 | 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000755.0000000.0000000.0000 | 
| 0080 | 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 33 31 37 31 00 20 35 00 00 00 | 0000000.00000000000.013171..5... | 
| 00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0100 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 0120 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0200 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 6f 61 75 74 68 32 | oauth2-auto-20250624.1919/oauth2 | 
| 0220 | 2d 61 75 74 6f 2d 70 6b 67 2e 65 6c 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | -auto-pkg.el.................... | 
| 0240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0260 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 0280 | 30 30 30 31 30 31 36 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 36 34 34 30 00 20 30 00 00 00 | 0001016.00000000000.016440..0... | 
| 02a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 02c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 02e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0300 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 0320 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 0340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0400 | 3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63    6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 | ;;.-*-.no-byte-compile:.t;.lexic | 
| 0420 | 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20    2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b | al-binding:.nil.-*-.(define-pack | 
| 0440 | 61 67 65 20 22 6f 61 75 74 68 32 2d 61 75 74 6f    22 20 22 32 30 32 35 30 36 32 34 2e 31 39 31 39 | age."oauth2-auto"."20250624.1919 | 
| 0460 | 22 0a 20 20 22 41 75 74 6f 6d 61 74 69 63 61 6c    6c 79 20 72 65 66 72 65 73 68 69 6e 67 20 4f 41 | "..."Automatically.refreshing.OA | 
| 0480 | 75 74 68 20 32 2e 30 20 74 6f 6b 65 6e 73 2e 22    0a 20 20 27 28 28 65 6d 61 63 73 20 22 32 36 2e | uth.2.0.tokens."...'((emacs."26. | 
| 04a0 | 31 22 29 0a 20 20 20 20 28 61 69 6f 20 20 20 22    31 2e 30 22 29 0a 20 20 20 20 28 61 6c 65 72 74 | 1").....(aio..."1.0").....(alert | 
| 04c0 | 20 22 31 2e 32 22 29 0a 20 20 20 20 28 64 61 73    68 20 20 22 32 2e 31 39 22 29 29 0a 20 20 3a 75 | ."1.2").....(dash.."2.19"))...:u | 
| 04e0 | 72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 74 68    75 62 2e 63 6f 6d 2f 72 68 61 70 73 30 64 79 2f | rl."https://github.com/rhaps0dy/ | 
| 0500 | 65 6d 61 63 73 2d 6f 61 75 74 68 32 2d 61 75 74    6f 22 0a 20 20 3a 63 6f 6d 6d 69 74 20 22 32 30 | emacs-oauth2-auto"...:commit."20 | 
| 0520 | 62 33 31 35 33 64 39 63 66 62 37 61 61 66 65 36    38 61 30 31 36 38 36 34 37 61 31 37 33 37 33 61 | b3153d9cfb7aafe68a0168647a17373a | 
| 0540 | 64 66 35 65 32 32 22 0a 20 20 3a 72 65 76 64 65    73 63 20 22 32 30 62 33 31 35 33 64 39 63 66 62 | df5e22"...:revdesc."20b3153d9cfb | 
| 0560 | 22 0a 20 20 3a 6b 65 79 77 6f 72 64 73 20 27 28    22 63 6f 6d 6d 22 20 22 6f 61 75 74 68 32 22 29 | "...:keywords.'("comm"."oauth2") | 
| 0580 | 0a 20 20 3a 61 75 74 68 6f 72 73 20 27 28 28 22    41 64 72 69 c3 a0 20 47 61 72 72 69 67 61 2d 41 | ...:authors.'(("Adri...Garriga-A | 
| 05a0 | 6c 6f 6e 73 6f 22 20 2e 20 22 61 64 72 69 61 2e    67 61 72 72 69 67 61 40 67 6d 61 69 6c 2e 63 6f | lonso"..."adria.garriga@gmail.co | 
| 05c0 | 6d 22 29 29 0a 20 20 3a 6d 61 69 6e 74 61 69 6e    65 72 73 20 27 28 28 22 41 64 72 69 c3 a0 20 47 | m"))...:maintainers.'(("Adri...G | 
| 05e0 | 61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 22 20 2e    20 22 61 64 72 69 61 2e 67 61 72 72 69 67 61 40 | arriga-Alonso"..."adria.garriga@ | 
| 0600 | 67 6d 61 69 6c 2e 63 6f 6d 22 29 29 29 0a 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | gmail.com")))................... | 
| 0620 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0640 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 07e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0800 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 32 30 32 35    30 36 32 34 2e 31 39 31 39 2f 6f 61 75 74 68 32 | oauth2-auto-20250624.1919/oauth2 | 
| 0820 | 2d 61 75 74 6f 2e 65 6c 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | -auto.el........................ | 
| 0840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0860 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 0880 | 30 30 36 31 36 34 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 36 37 36 00 20 30 00 00 00 | 0061644.00000000000.015676..0... | 
| 08a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 08c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 08e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0900 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 0920 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 0940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 09a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 09c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 09e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0a00 | 3b 3b 3b 20 6f 61 75 74 68 32 2d 61 75 74 6f 2e    65 6c 20 2d 2d 2d 20 41 75 74 6f 6d 61 74 69 63 | ;;;.oauth2-auto.el.---.Automatic | 
| 0a20 | 61 6c 6c 79 20 72 65 66 72 65 73 68 69 6e 67 20    4f 41 75 74 68 20 32 2e 30 20 74 6f 6b 65 6e 73 | ally.refreshing.OAuth.2.0.tokens | 
| 0a40 | 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e    64 69 6e 67 3a 20 74 3b 20 2d 2a 2d 0a 0a 3b 3b | .-*-.lexical-binding:.t;.-*-..;; | 
| 0a60 | 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32    30 32 32 2d 32 30 32 33 20 41 64 72 69 c3 a0 20 | .Copyright.(C).2022-2023.Adri... | 
| 0a80 | 47 61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 2c 20    52 6f 62 65 72 74 20 49 72 65 6c 61 6e 0a 0a 3b | Garriga-Alonso,.Robert.Irelan..; | 
| 0aa0 | 3b 20 41 75 74 68 6f 72 3a 20 41 64 72 69 c3 a0    20 47 61 72 72 69 67 61 2d 41 6c 6f 6e 73 6f 20 | ;.Author:.Adri...Garriga-Alonso. | 
| 0ac0 | 3c 61 64 72 69 61 2e 67 61 72 72 69 67 61 40 67    6d 61 69 6c 2e 63 6f 6d 3e 0a 3b 3b 20 55 52 4c | <adria.garriga@gmail.com>.;;.URL | 
| 0ae0 | 3a 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62    2e 63 6f 6d 2f 72 68 61 70 73 30 64 79 2f 65 6d | :.https://github.com/rhaps0dy/em | 
| 0b00 | 61 63 73 2d 6f 61 75 74 68 32 2d 61 75 74 6f 0a    3b 3b 20 50 61 63 6b 61 67 65 2d 56 65 72 73 69 | acs-oauth2-auto.;;.Package-Versi | 
| 0b20 | 6f 6e 3a 20 32 30 32 35 30 36 32 34 2e 31 39 31    39 0a 3b 3b 20 50 61 63 6b 61 67 65 2d 52 65 76 | on:.20250624.1919.;;.Package-Rev | 
| 0b40 | 69 73 69 6f 6e 3a 20 32 30 62 33 31 35 33 64 39    63 66 62 0a 3b 3b 20 4b 65 79 77 6f 72 64 73 3a | ision:.20b3153d9cfb.;;.Keywords: | 
| 0b60 | 20 63 6f 6d 6d 20 6f 61 75 74 68 32 0a 3b 3b 20    50 61 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 | .comm.oauth2.;;.Package-Requires | 
| 0b80 | 3a 20 28 28 65 6d 61 63 73 20 22 32 36 2e 31 22    29 20 28 61 69 6f 20 22 31 2e 30 22 29 20 28 61 | :.((emacs."26.1").(aio."1.0").(a | 
| 0ba0 | 6c 65 72 74 20 22 31 2e 32 22 29 20 28 64 61 73    68 20 22 32 2e 31 39 22 29 29 0a 0a 3b 3b 20 54 | lert."1.2").(dash."2.19"))..;;.T | 
| 0bc0 | 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66    72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f | his.program.is.free.software;.yo | 
| 0be0 | 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75    74 65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 | u.can.redistribute.it.and/or.mod | 
| 0c00 | 69 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20    74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 | ify.;;.it.under.the.terms.of.the | 
| 0c20 | 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62    6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 | .GNU.General.Public.License.as.p | 
| 0c40 | 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74    68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 | ublished.by.;;.the.Free.Software | 
| 0c60 | 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74    68 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 | .Foundation,.either.version.3.of | 
| 0c80 | 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72    0a 3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74 | .the.License,.or.;;.(at.your.opt | 
| 0ca0 | 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76    65 72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 | ion).any.later.version...;;.This | 
| 0cc0 | 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74    72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 | .program.is.distributed.in.the.h | 
| 0ce0 | 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c    20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 | ope.that.it.will.be.useful,.;;.b | 
| 0d00 | 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57    41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 | ut.WITHOUT.ANY.WARRANTY;.without | 
| 0d20 | 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65    64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b | .even.the.implied.warranty.of.;; | 
| 0d40 | 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59    20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 | .MERCHANTABILITY.or.FITNESS.FOR. | 
| 0d60 | 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52    50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b | A.PARTICULAR.PURPOSE...See.the.; | 
| 0d80 | 3b 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75    62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 | ;.GNU.General.Public.License.for | 
| 0da0 | 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a    3b 3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 | .more.details...;;.You.should.ha | 
| 0dc0 | 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f    70 79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 | ve.received.a.copy.of.the.GNU.Ge | 
| 0de0 | 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63    65 6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 | neral.Public.License.;;.along.wi | 
| 0e00 | 74 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e    20 20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 | th.this.program...If.not,.see.<h | 
| 0e20 | 74 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72    67 2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b | ttp://www.gnu.org/licenses/>...; | 
| 0e40 | 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a    3b 3b 20 53 74 61 74 65 20 6d 61 63 68 69 6e 65 | ;;.Commentary:..;;.State.machine | 
| 0e60 | 20 74 6f 20 66 65 74 63 68 20 4f 41 75 74 68 20    32 2e 30 20 74 6f 6b 65 6e 73 20 66 6f 72 20 76 | .to.fetch.OAuth.2.0.tokens.for.v | 
| 0e80 | 61 72 69 6f 75 73 20 65 6d 61 69 6c 20 61 63 63    6f 75 6e 74 73 2e 0a 3b 3b 0a 3b 3b 20 42 61 73 | arious.email.accounts..;;.;;.Bas | 
| 0ea0 | 65 64 20 6f 6e 20 7e 6d 75 74 74 5f 6f 61 75 74    68 32 2e 70 79 7e 2c 20 77 68 69 63 68 20 69 73 | ed.on.~mutt_oauth2.py~,.which.is | 
| 0ec0 | 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32    30 32 30 20 41 6c 65 78 61 6e 64 65 72 20 50 65 | .Copyright.(C).2020.Alexander.Pe | 
| 0ee0 | 72 6c 69 73 2c 0a 3b 3b 20 6c 69 63 65 6e 73 65    64 20 75 6e 64 65 72 20 74 68 65 20 47 50 4c 76 | rlis,.;;.licensed.under.the.GPLv | 
| 0f00 | 33 20 6f 72 20 6c 61 74 65 72 2e 0a 3b 3b 0a 3b    3b 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e | 3.or.later..;;.;;.The.entry.poin | 
| 0f20 | 74 73 20 61 72 65 20 60 6f 61 75 74 68 32 2d 61    75 74 6f 2d 70 6c 69 73 74 27 20 61 6e 64 20 74 | ts.are.`oauth2-auto-plist'.and.t | 
| 0f40 | 68 65 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66    75 6e 63 74 69 6f 6e 0a 3b 3b 20 60 6f 61 75 74 | he.convenience.function.;;.`oaut | 
| 0f60 | 68 32 2d 61 75 74 6f 2d 61 63 63 65 73 73 2d 74    6f 6b 65 6e 27 2e 0a 0a 3b 3b 3b 20 43 6f 64 65 | h2-auto-access-token'...;;;.Code | 
| 0f80 | 3a 0a 28 72 65 71 75 69 72 65 20 27 70 6c 73 74    6f 72 65 29 0a 28 72 65 71 75 69 72 65 20 27 61 | :.(require.'plstore).(require.'a | 
| 0fa0 | 69 6f 29 20 20 20 20 20 3b 20 70 72 6f 6d 69 73    65 73 0a 28 65 76 61 6c 2d 77 68 65 6e 2d 63 6f | io).....;.promises.(eval-when-co | 
| 0fc0 | 6d 70 69 6c 65 20 28 72 65 71 75 69 72 65 20 27    64 61 73 68 29 29 20 20 20 20 3b 20 60 2d 2d 6d | mpile.(require.'dash))....;.`--m | 
| 0fe0 | 61 70 27 0a 28 72 65 71 75 69 72 65 20 27 61 6c    65 72 74 29 20 20 20 3b 20 60 61 6c 65 72 74 27 | ap'.(require.'alert)...;.`alert' | 
| 1000 | 20 74 6f 20 67 69 76 65 20 74 68 65 20 75 73 65    72 20 61 20 68 65 61 64 73 20 75 70 20 74 6f 20 | .to.give.the.user.a.heads.up.to. | 
| 1020 | 67 6f 20 74 6f 20 74 68 65 69 72 20 62 72 6f 77    73 65 72 20 61 6e 64 20 6c 6f 67 20 69 6e 0a 28 | go.to.their.browser.and.log.in.( | 
| 1040 | 72 65 71 75 69 72 65 20 27 75 72 6c 2d 61 75 74    68 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 6f 61 | require.'url-auth)..(defgroup.oa | 
| 1060 | 75 74 68 32 2d 61 75 74 6f 20 6e 69 6c 0a 20 20    22 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 | uth2-auto.nil..."Automatically.r | 
| 1080 | 65 66 72 65 73 68 69 6e 67 20 4f 41 75 74 68 20    32 2e 30 20 74 6f 6b 65 6e 73 2e 22 0a 20 20 3a | efreshing.OAuth.2.0.tokens."...: | 
| 10a0 | 67 72 6f 75 70 20 27 63 6f 6d 6d 29 0a 0a 0a 3b    3b 20 45 6e 64 70 6f 69 6e 74 73 20 61 6e 64 20 | group.'comm)...;;.Endpoints.and. | 
| 10c0 | 63 6c 69 65 6e 74 20 73 65 63 72 65 74 2f 69 64    20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 | client.secret/id.used.for.variou | 
| 10e0 | 73 20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65    72 73 2e 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 | s.OAuth2.providers...(defcustom. | 
| 1100 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 69 63 72    6f 73 6f 66 74 2d 64 65 66 61 75 6c 74 2d 74 65 | oauth2-auto-microsoft-default-te | 
| 1120 | 6e 61 6e 74 20 22 63 6f 6d 6d 6f 6e 22 0a 20 20    22 44 65 66 61 75 6c 74 20 74 65 6e 61 6e 74 20 | nant."common"..."Default.tenant. | 
| 1140 | 49 44 20 66 6f 72 20 4d 69 63 72 6f 73 6f 66 74    20 4f 41 75 74 68 32 2e 22 0a 20 20 3a 67 72 6f | ID.for.Microsoft.OAuth2."...:gro | 
| 1160 | 75 70 20 27 6f 61 75 74 68 32 2d 61 75 74 6f 0a    20 20 3a 74 79 70 65 20 27 73 74 72 69 6e 67 29 | up.'oauth2-auto...:type.'string) | 
| 1180 | 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f | ..(defcustom.oauth2-auto-microso | 
| 11a0 | 66 74 2d 63 6c 69 65 6e 74 2d 69 64 20 22 22 0a    20 20 22 44 65 66 61 75 6c 74 20 63 6c 69 65 6e | ft-client-id.""..."Default.clien | 
| 11c0 | 74 20 49 44 20 66 6f 72 20 4d 69 63 72 6f 73 6f    66 74 20 4f 41 75 74 68 32 2e 22 0a 20 20 3a 67 | t.ID.for.Microsoft.OAuth2."...:g | 
| 11e0 | 72 6f 75 70 20 27 6f 61 75 74 68 32 2d 61 75 74    6f 0a 20 20 3a 74 79 70 65 20 27 73 74 72 69 6e | roup.'oauth2-auto...:type.'strin | 
| 1200 | 67 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f | g)..(defcustom.oauth2-auto-micro | 
| 1220 | 73 6f 66 74 2d 63 6c 69 65 6e 74 2d 73 65 63 72    65 74 20 22 22 0a 20 20 22 44 65 66 61 75 6c 74 | soft-client-secret.""..."Default | 
| 1240 | 20 63 6c 69 65 6e 74 20 73 65 63 72 65 74 20 66    6f 72 20 4d 69 63 72 6f 73 6f 66 74 20 4f 41 75 | .client.secret.for.Microsoft.OAu | 
| 1260 | 74 68 32 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27    6f 61 75 74 68 32 2d 61 75 74 6f 0a 20 20 3a 74 | th2."...:group.'oauth2-auto...:t | 
| 1280 | 79 70 65 20 27 73 74 72 69 6e 67 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68 32 2d | ype.'string)..(defcustom.oauth2- | 
| 12a0 | 61 75 74 6f 2d 67 6f 6f 67 6c 65 2d 63 6c 69 65    6e 74 2d 69 64 20 22 22 0a 20 20 22 44 65 66 61 | auto-google-client-id.""..."Defa | 
| 12c0 | 75 6c 74 20 63 6c 69 65 6e 74 20 49 44 20 66 6f    72 20 47 6f 6f 67 6c 65 20 4f 41 75 74 68 32 2e | ult.client.ID.for.Google.OAuth2. | 
| 12e0 | 22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74    68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20 | "...:group.'oauth2-auto...:type. | 
| 1300 | 27 73 74 72 69 6e 67 29 0a 0a 28 64 65 66 63 75    73 74 6f 6d 20 6f 61 75 74 68 32 2d 61 75 74 6f | 'string)..(defcustom.oauth2-auto | 
| 1320 | 2d 67 6f 6f 67 6c 65 2d 63 6c 69 65 6e 74 2d 73    65 63 72 65 74 20 22 22 0a 20 20 22 44 65 66 61 | -google-client-secret.""..."Defa | 
| 1340 | 75 6c 74 20 63 6c 69 65 6e 74 20 73 65 63 72 65    74 20 66 6f 72 20 47 6f 6f 67 6c 65 20 4f 41 75 | ult.client.secret.for.Google.OAu | 
| 1360 | 74 68 32 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27    6f 61 75 74 68 32 2d 61 75 74 6f 0a 20 20 3a 74 | th2."...:group.'oauth2-auto...:t | 
| 1380 | 79 70 65 20 27 73 74 72 69 6e 67 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68 32 2d | ype.'string)..(defcustom.oauth2- | 
| 13a0 | 61 75 74 6f 2d 61 64 64 69 74 69 6f 6e 61 6c 2d    70 72 6f 76 69 64 65 72 73 2d 61 6c 69 73 74 20 | auto-additional-providers-alist. | 
| 13c0 | 27 28 29 0a 20 20 22 41 64 64 69 74 69 6f 6e 61    6c 20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65 | '()..."Additional.OAuth2.provide | 
| 13e0 | 72 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 60 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 64 65 66 61 75 | rs.following.`oauth2-auto--defau | 
| 1400 | 6c 74 2d 70 72 6f 76 69 64 65 72 73 27 2e 22 0a    20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74 68 32 | lt-providers'."...:group.'oauth2 | 
| 1420 | 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20 27 61    6c 69 73 74 29 0a 0a 28 64 65 66 63 75 73 74 6f | -auto...:type.'alist)..(defcusto | 
| 1440 | 6d 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 61    6e 75 61 6c 6c 79 2d 61 75 74 68 20 6e 69 6c 0a | m.oauth2-auto-manually-auth.nil. | 
| 1460 | 20 20 22 49 66 20 6e 6f 6e 2d 6e 69 6c 2c 20 6e    6f 74 20 6c 61 75 6e 63 68 20 62 72 6f 77 73 65 | .."If.non-nil,.not.launch.browse | 
| 1480 | 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e    22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74 | r.automatically."...:group.'oaut | 
| 14a0 | 68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20    27 62 6f 6f 6c 65 61 6e 29 0a 0a 28 64 65 66 75 | h2-auto...:type.'boolean)..(defu | 
| 14c0 | 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 64    65 66 61 75 6c 74 2d 70 72 6f 76 69 64 65 72 73 | n.oauth2-auto--default-providers | 
| 14e0 | 20 28 29 0a 20 20 22 44 65 66 61 75 6c 74 20 4f    41 75 74 68 32 20 70 72 6f 76 69 64 65 72 73 2e | .()..."Default.OAuth2.providers. | 
| 1500 | 22 0a 20 20 28 6c 65 74 20 28 28 6d 73 2d 6f 61    75 74 68 32 2d 75 72 6c 20 28 63 6f 6e 63 61 74 | "...(let.((ms-oauth2-url.(concat | 
| 1520 | 20 22 68 74 74 70 73 3a 2f 2f 6c 6f 67 69 6e 2e    6d 69 63 72 6f 73 6f 66 74 6f 6e 6c 69 6e 65 2e | ."https://login.microsoftonline. | 
| 1540 | 63 6f 6d 2f 22 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | com/"........................... | 
| 1560 | 20 20 20 20 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 6d 69 63 72 6f 73 6f 66 74 2d 64 65 66 61 75 | .....oauth2-auto-microsoft-defau | 
| 1580 | 6c 74 2d 74 65 6e 61 6e 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | lt-tenant....................... | 
| 15a0 | 20 20 20 20 20 20 20 20 20 22 2f 6f 61 75 74 68    32 2f 76 32 2e 30 2f 22 29 29 29 0a 20 20 20 20 | ........."/oauth2/v2.0/")))..... | 
| 15c0 | 60 28 28 67 6f 6f 67 6c 65 0a 20 20 20 20 20 20    20 28 61 75 74 68 6f 72 69 7a 65 5f 75 72 6c 20 | `((google........(authorize_url. | 
| 15e0 | 2e 20 22 68 74 74 70 73 3a 2f 2f 61 63 63 6f 75    6e 74 73 2e 67 6f 6f 67 6c 65 2e 63 6f 6d 2f 6f | .."https://accounts.google.com/o | 
| 1600 | 2f 6f 61 75 74 68 32 2f 61 75 74 68 22 29 0a 20    20 20 20 20 20 20 28 74 6f 6b 65 6e 5f 75 72 6c | /oauth2/auth")........(token_url | 
| 1620 | 20 2e 20 22 68 74 74 70 73 3a 2f 2f 6f 61 75 74    68 32 2e 67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f | ..."https://oauth2.googleapis.co | 
| 1640 | 6d 2f 74 6f 6b 65 6e 22 29 0a 20 20 20 20 20 20    20 28 73 63 6f 70 65 20 2e 20 22 68 74 74 70 73 | m/token")........(scope..."https | 
| 1660 | 3a 2f 2f 6d 61 69 6c 2e 67 6f 6f 67 6c 65 2e 63    6f 6d 2f 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e | ://mail.google.com/.https://www. | 
| 1680 | 67 6f 6f 67 6c 65 61 70 69 73 2e 63 6f 6d 2f 61    75 74 68 2f 63 61 6c 65 6e 64 61 72 2e 65 76 65 | googleapis.com/auth/calendar.eve | 
| 16a0 | 6e 74 73 22 29 0a 20 20 20 20 20 20 20 28 63 6c    69 65 6e 74 5f 69 64 20 2e 20 2c 6f 61 75 74 68 | nts")........(client_id...,oauth | 
| 16c0 | 32 2d 61 75 74 6f 2d 67 6f 6f 67 6c 65 2d 63 6c    69 65 6e 74 2d 69 64 29 0a 20 20 20 20 20 20 20 | 2-auto-google-client-id)........ | 
| 16e0 | 28 63 6c 69 65 6e 74 5f 73 65 63 72 65 74 20 2e    20 2c 6f 61 75 74 68 32 2d 61 75 74 6f 2d 67 6f | (client_secret...,oauth2-auto-go | 
| 1700 | 6f 67 6c 65 2d 63 6c 69 65 6e 74 2d 73 65 63 72    65 74 29 29 0a 20 20 20 20 20 20 28 6d 69 63 72 | ogle-client-secret)).......(micr | 
| 1720 | 6f 73 6f 66 74 0a 20 20 20 20 20 20 20 28 61 75    74 68 6f 72 69 7a 65 5f 75 72 6c 20 2e 20 2c 28 | osoft........(authorize_url...,( | 
| 1740 | 63 6f 6e 63 61 74 20 6d 73 2d 6f 61 75 74 68 32    2d 75 72 6c 20 22 61 75 74 68 6f 72 69 7a 65 22 | concat.ms-oauth2-url."authorize" | 
| 1760 | 29 29 0a 20 20 20 20 20 20 20 28 74 6f 6b 65 6e    5f 75 72 6c 20 2e 20 2c 28 63 6f 6e 63 61 74 20 | ))........(token_url...,(concat. | 
| 1780 | 6d 73 2d 6f 61 75 74 68 32 2d 75 72 6c 20 22 74    6f 6b 65 6e 22 29 29 0a 20 20 20 20 20 20 20 28 | ms-oauth2-url."token"))........( | 
| 17a0 | 74 65 6e 61 6e 74 20 2e 20 2c 6f 61 75 74 68 32    2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f 66 74 2d | tenant...,oauth2-auto-microsoft- | 
| 17c0 | 64 65 66 61 75 6c 74 2d 74 65 6e 61 6e 74 29 0a    20 20 20 20 20 20 20 28 73 63 6f 70 65 20 2e 20 | default-tenant)........(scope... | 
| 17e0 | 22 6f 66 66 6c 69 6e 65 5f 61 63 63 65 73 73 20    68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b 2e | "offline_access.https://outlook. | 
| 1800 | 6f 66 66 69 63 65 2e 63 6f 6d 2f 49 4d 41 50 2e    41 63 63 65 73 73 41 73 55 73 65 72 2e 41 6c 6c | office.com/IMAP.AccessAsUser.All | 
| 1820 | 20 68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b    2e 6f 66 66 69 63 65 2e 63 6f 6d 2f 50 4f 50 2e | .https://outlook.office.com/POP. | 
| 1840 | 41 63 63 65 73 73 41 73 55 73 65 72 2e 41 6c 6c    20 68 74 74 70 73 3a 2f 2f 6f 75 74 6c 6f 6f 6b | AccessAsUser.All.https://outlook | 
| 1860 | 2e 6f 66 66 69 63 65 2e 63 6f 6d 2f 53 4d 54 50    2e 53 65 6e 64 22 29 0a 20 20 20 20 20 20 20 28 | .office.com/SMTP.Send")........( | 
| 1880 | 63 6c 69 65 6e 74 5f 69 64 20 2e 20 2c 6f 61 75    74 68 32 2d 61 75 74 6f 2d 6d 69 63 72 6f 73 6f | client_id...,oauth2-auto-microso | 
| 18a0 | 66 74 2d 63 6c 69 65 6e 74 2d 69 64 29 0a 20 20    20 20 20 20 20 28 63 6c 69 65 6e 74 5f 73 65 63 | ft-client-id)........(client_sec | 
| 18c0 | 72 65 74 20 2e 20 2c 6f 61 75 74 68 32 2d 61 75    74 6f 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6c 69 | ret...,oauth2-auto-microsoft-cli | 
| 18e0 | 65 6e 74 2d 73 65 63 72 65 74 29 29 29 29 29 0a    0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d | ent-secret)))))...(defun.oauth2- | 
| 1900 | 61 75 74 6f 2d 70 72 6f 76 69 64 65 72 73 2d 61    6c 69 73 74 20 28 29 0a 20 20 22 52 65 74 75 72 | auto-providers-alist.()..."Retur | 
| 1920 | 6e 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20    4f 41 75 74 68 32 20 70 72 6f 76 69 64 65 72 73 | n.all.available.OAuth2.providers | 
| 1940 | 2e 0a 54 68 69 73 20 63 6f 6d 62 69 6e 65 73 20    74 68 65 20 70 72 6f 76 69 64 65 72 73 20 73 70 | ..This.combines.the.providers.sp | 
| 1960 | 65 63 69 66 69 65 64 20 69 6e 20 60 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 64 65 66 61 75 6c 74 | ecified.in.`oauth2-auto--default | 
| 1980 | 2d 70 72 6f 76 69 64 65 72 73 27 20 61 6e 64 0a    60 6f 61 75 74 68 32 2d 61 75 74 6f 2d 61 64 64 | -providers'.and.`oauth2-auto-add | 
| 19a0 | 69 74 69 6f 6e 61 6c 2d 70 72 6f 76 69 64 65 72    73 2d 61 6c 69 73 74 27 2e 22 0a 20 20 28 61 70 | itional-providers-alist'."...(ap | 
| 19c0 | 70 65 6e 64 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 61 64 64 69 74 69 6f 6e 61 6c 2d 70 72 6f 76 | pend.oauth2-auto-additional-prov | 
| 19e0 | 69 64 65 72 73 2d 61 6c 69 73 74 0a 20 20 20 20    20 20 20 20 20 20 28 6f 61 75 74 68 32 2d 61 75 | iders-alist...........(oauth2-au | 
| 1a00 | 74 6f 2d 2d 64 65 66 61 75 6c 74 2d 70 72 6f 76    69 64 65 72 73 29 29 29 0a 0a 0a 3b 3b 20 4d 61 | to--default-providers)))...;;.Ma | 
| 1a20 | 69 6e 20 64 61 74 61 20 73 74 72 75 63 74 75 72    65 0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 | in.data.structure..(defun.oauth2 | 
| 1a40 | 2d 61 75 74 6f 2d 2d 6d 61 6b 65 2d 70 6c 69 73    74 20 28 72 65 73 70 6f 6e 73 65 20 70 6c 69 73 | -auto--make-plist.(response.plis | 
| 1a60 | 74 29 0a 20 20 22 4d 61 6b 65 20 74 68 65 20 6d    61 69 6e 20 64 61 74 61 20 73 74 72 75 63 74 75 | t)..."Make.the.main.data.structu | 
| 1a80 | 72 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65    2e 0a 0a 54 68 69 73 20 64 61 74 61 20 73 74 72 | re.of.the.module...This.data.str | 
| 1aa0 | 75 63 74 75 72 65 20 69 73 20 61 20 70 6c 69 73    74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e 20 | ucture.is.a.plist.containing.an. | 
| 1ac0 | 3a 61 63 63 65 73 73 2d 74 6f 6b 65 6e 2c 20 3a    72 65 66 72 65 73 68 2d 74 6f 6b 65 6e 2c 20 61 | :access-token,.:refresh-token,.a | 
| 1ae0 | 6e 64 0a 3a 65 78 70 69 72 61 74 69 6f 6e 2e 20    20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 | nd.:expiration...This.function.t | 
| 1b00 | 61 6b 65 73 20 52 45 53 50 4f 4e 53 45 20 66 72    6f 6d 20 e2 80 98 6f 61 75 74 68 32 2d 61 75 74 | akes.RESPONSE.from....oauth2-aut | 
| 1b20 | 6f 2d 2d 72 65 71 75 65 73 74 e2 80 99 2c 20 61    6e 64 20 64 61 74 61 0a 66 72 6f 6d 20 50 4c 49 | o--request...,.and.data.from.PLI | 
| 1b40 | 53 54 20 69 66 20 6e 6f 6e 2d 6e 69 6c 2e 20 20    54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 | ST.if.non-nil...The.return.value | 
| 1b60 | 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20    62 65 20 73 74 6f 72 65 64 20 69 6e 20 70 6c 73 | .is.intended.to.be.stored.in.pls | 
| 1b80 | 74 6f 72 65 2e 22 0a 20 20 28 6c 65 74 20 28 28    72 65 66 72 65 73 68 2d 74 6f 6b 65 6e 20 28 6f | tore."...(let.((refresh-token.(o | 
| 1ba0 | 72 20 28 63 64 72 20 28 61 73 73 6f 63 20 27 72    65 66 72 65 73 68 5f 74 6f 6b 65 6e 20 72 65 73 | r.(cdr.(assoc.'refresh_token.res | 
| 1bc0 | 70 6f 6e 73 65 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ponse))......................... | 
| 1be0 | 20 20 20 28 70 6c 69 73 74 2d 67 65 74 20 70 6c    69 73 74 20 3a 72 65 66 72 65 73 68 2d 74 6f 6b | ...(plist-get.plist.:refresh-tok | 
| 1c00 | 65 6e 29 29 29 29 0a 20 20 20 20 28 75 6e 6c 65    73 73 20 72 65 66 72 65 73 68 2d 74 6f 6b 65 6e | en)))).....(unless.refresh-token | 
| 1c20 | 0a 20 20 20 20 20 20 28 65 72 72 6f 72 20 22 4e    6f 20 72 65 66 72 65 73 68 20 74 6f 6b 65 6e 20 | .......(error."No.refresh.token. | 
| 1c40 | 69 6e 20 72 65 73 70 6f 6e 73 65 20 25 73 20 6f    72 20 70 6c 69 73 74 20 25 73 22 0a 20 20 20 20 | in.response.%s.or.plist.%s"..... | 
| 1c60 | 20 20 20 20 20 20 20 20 20 28 70 70 2d 74 6f 2d    73 74 72 69 6e 67 20 72 65 73 70 6f 6e 73 65 29 | .........(pp-to-string.response) | 
| 1c80 | 20 28 70 70 2d 74 6f 2d 73 74 72 69 6e 67 20 70    6c 69 73 74 29 29 29 0a 20 20 20 20 60 28 3a 61 | .(pp-to-string.plist))).....`(:a | 
| 1ca0 | 63 63 65 73 73 2d 74 6f 6b 65 6e 20 2c 28 63 64    72 20 28 61 73 73 6f 63 20 27 61 63 63 65 73 73 | ccess-token.,(cdr.(assoc.'access | 
| 1cc0 | 5f 74 6f 6b 65 6e 20 72 65 73 70 6f 6e 73 65 29    29 0a 20 20 20 20 20 20 3a 72 65 66 72 65 73 68 | _token.response)).......:refresh | 
| 1ce0 | 2d 74 6f 6b 65 6e 20 2c 72 65 66 72 65 73 68 2d    74 6f 6b 65 6e 0a 20 20 20 20 20 20 3a 65 78 70 | -token.,refresh-token.......:exp | 
| 1d00 | 69 72 61 74 69 6f 6e 20 2c 28 2b 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 6e 6f 77 29 0a 20 | iration.,(+.(oauth2-auto--now).. | 
| 1d20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 63 64 72 20 28 61 73 73 6f 63 | .....................(cdr.(assoc | 
| 1d40 | 20 27 65 78 70 69 72 65 73 5f 69 6e 20 72 65 73    70 6f 6e 73 65 29 29 29 29 29 29 0a 0a 0a 3b 3b | .'expires_in.response))))))...;; | 
| 1d60 | 20 43 68 65 63 6b 69 6e 67 20 74 6f 6b 65 6e 20    65 78 70 69 72 61 74 69 6f 6e 0a 0a 28 64 65 66 | .Checking.token.expiration..(def | 
| 1d80 | 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    6e 6f 77 20 28 29 0a 20 20 22 43 75 72 72 65 6e | un.oauth2-auto--now.()..."Curren | 
| 1da0 | 74 20 65 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e    64 73 2c 20 61 73 20 61 6e 20 69 6e 74 65 67 65 | t.epoch.in.seconds,.as.an.intege | 
| 1dc0 | 72 2e 22 0a 20 20 28 74 72 75 6e 63 61 74 65 20    28 66 6c 6f 61 74 2d 74 69 6d 65 29 29 29 0a 0a | r."...(truncate.(float-time))).. | 
| 1de0 | 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 2d 70 6c 69 73 74 2d 6e 65 65 64 73 2d | (defun.oauth2-auto--plist-needs- | 
| 1e00 | 72 65 66 72 65 73 68 69 6e 67 20 28 70 6c 69 73    74 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e | refreshing.(plist)..."Return.non | 
| 1e20 | 2d 6e 69 6c 20 69 66 20 74 68 65 20 61 75 74 68    65 6e 74 69 63 61 74 69 6f 6e 2d 74 6f 6b 65 6e | -nil.if.the.authentication-token | 
| 1e40 | 20 69 6e 20 50 4c 49 53 54 20 6e 65 65 64 73 20    72 65 66 72 65 73 68 69 6e 67 2e 22 0a 20 20 28 | .in.PLIST.needs.refreshing."...( | 
| 1e60 | 6f 72 20 28 6e 6f 74 20 28 70 6c 69 73 74 2d 67    65 74 20 70 6c 69 73 74 20 3a 65 78 70 69 72 61 | or.(not.(plist-get.plist.:expira | 
| 1e80 | 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 28 3e 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 6e 6f | tion)).......(>.(oauth2-auto--no | 
| 1ea0 | 77 29 0a 20 20 20 20 20 20 20 20 20 28 70 6c 69    73 74 2d 67 65 74 20 70 6c 69 73 74 20 3a 65 78 | w)..........(plist-get.plist.:ex | 
| 1ec0 | 70 69 72 61 74 69 6f 6e 29 29 29 29 0a 0a 0a 3b    3b 20 43 61 63 68 65 20 61 6e 64 20 70 6c 73 74 | piration))))...;;.Cache.and.plst | 
| 1ee0 | 6f 72 65 20 72 65 61 64 2f 77 72 69 74 65 0a 0a    28 64 65 66 63 75 73 74 6f 6d 20 6f 61 75 74 68 | ore.read/write..(defcustom.oauth | 
| 1f00 | 32 2d 61 75 74 6f 2d 70 6c 73 74 6f 72 65 20 28    63 6f 6e 63 61 74 20 75 73 65 72 2d 65 6d 61 63 | 2-auto-plstore.(concat.user-emac | 
| 1f20 | 73 2d 64 69 72 65 63 74 6f 72 79 20 22 6f 61 75    74 68 32 2d 61 75 74 6f 2e 70 6c 69 73 74 22 29 | s-directory."oauth2-auto.plist") | 
| 1f40 | 0a 20 20 22 46 69 6c 65 20 74 6f 20 73 74 6f 72    65 20 74 68 65 20 61 75 74 68 65 6e 74 69 63 61 | ..."File.to.store.the.authentica | 
| 1f60 | 74 65 64 20 61 63 63 6f 75 6e 74 73 20 74 6f 2e    22 0a 20 20 3a 67 72 6f 75 70 20 27 6f 61 75 74 | ted.accounts.to."...:group.'oaut | 
| 1f80 | 68 32 2d 61 75 74 6f 0a 20 20 3a 74 79 70 65 20    27 66 69 6c 65 29 0a 0a 3b 20 54 4f 44 4f 20 72 | h2-auto...:type.'file)..;.TODO.r | 
| 1fa0 | 65 6d 6f 76 65 20 63 61 63 68 65 20 6f 72 20 69    6e 76 61 6c 69 64 61 74 65 20 69 74 20 70 72 6f | emove.cache.or.invalidate.it.pro | 
| 1fc0 | 70 65 72 6c 79 20 77 68 65 6e 20 6f 74 68 65 72    20 70 72 6f 67 72 61 6d 73 20 77 72 69 74 65 20 | perly.when.other.programs.write. | 
| 1fe0 | 74 6f 20 64 69 73 6b 0a 28 64 65 66 76 61 72 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 | to.disk.(defvar.oauth2-auto--pls | 
| 2000 | 74 6f 72 65 2d 63 61 63 68 65 0a 20 20 28 6d 61    6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 | tore-cache...(make-hash-table.:t | 
| 2020 | 65 73 74 20 27 65 71 75 61 6c 29 0a 20 20 22 43    61 63 68 65 20 74 68 65 20 76 61 6c 75 65 73 20 | est.'equal)..."Cache.the.values. | 
| 2040 | 77 72 69 74 74 65 6e 20 74 6f 20 61 6e 64 20 72    65 61 64 20 66 72 6f 6d 20 74 68 65 20 70 6c 73 | written.to.and.read.from.the.pls | 
| 2060 | 74 6f 72 65 2e 22 29 0a 0a 28 64 65 66 75 6e 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 63 6f 6d | tore.")..(defun.oauth2-auto--com | 
| 2080 | 70 75 74 65 2d 69 64 20 28 75 73 65 72 6e 61 6d    65 20 70 72 6f 76 69 64 65 72 29 0a 20 20 22 55 | pute-id.(username.provider)..."U | 
| 20a0 | 6e 69 71 75 65 20 49 44 20 66 6f 72 20 61 20 55    53 45 52 4e 41 4d 45 20 61 6e 64 20 50 52 4f 56 | nique.ID.for.a.USERNAME.and.PROV | 
| 20c0 | 49 44 45 52 2e 22 0a 20 20 28 75 72 6c 2d 68 65    78 69 66 79 2d 73 74 72 69 6e 67 20 28 70 70 2d | IDER."...(url-hexify-string.(pp- | 
| 20e0 | 74 6f 2d 73 74 72 69 6e 67 20 28 6c 69 73 74 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 | to-string.(list.username.provide | 
| 2100 | 72 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f | r))))..(defun.oauth2-auto--plsto | 
| 2120 | 72 65 2d 77 72 69 74 65 20 28 75 73 65 72 6e 61    6d 65 20 70 72 6f 76 69 64 65 72 20 70 6c 69 73 | re-write.(username.provider.plis | 
| 2140 | 74 29 0a 20 20 22 53 61 76 65 20 64 61 74 61 20    50 4c 49 53 54 20 66 6f 72 20 55 53 45 52 4e 41 | t)..."Save.data.PLIST.for.USERNA | 
| 2160 | 4d 45 20 61 6e 64 20 50 52 4f 56 49 44 45 52 20    74 6f 20 74 68 65 20 70 6c 73 74 6f 72 65 20 61 | ME.and.PROVIDER.to.the.plstore.a | 
| 2180 | 6e 64 20 63 61 63 68 65 2e 22 0a 20 20 28 6c 65    74 20 28 28 69 64 20 28 6f 61 75 74 68 32 2d 61 | nd.cache."...(let.((id.(oauth2-a | 
| 21a0 | 75 74 6f 2d 2d 63 6f 6d 70 75 74 65 2d 69 64 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 | uto--compute-id.username.provide | 
| 21c0 | 72 29 29 0a 20 20 20 20 20 20 20 20 28 70 6c 73    74 6f 72 65 20 28 70 6c 73 74 6f 72 65 2d 6f 70 | r)).........(plstore.(plstore-op | 
| 21e0 | 65 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70    6c 73 74 6f 72 65 29 29 29 0a 20 20 20 20 28 75 | en.oauth2-auto-plstore))).....(u | 
| 2200 | 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 20    20 20 20 20 20 20 28 70 72 6f 67 31 20 70 6c 69 | nwind-protect.........(prog1.pli | 
| 2220 | 73 74 0a 20 20 20 20 20 20 20 20 20 20 28 61 64    76 69 63 65 2d 61 64 64 20 23 27 69 6e 73 65 72 | st...........(advice-add.#'inser | 
| 2240 | 74 20 3a 62 65 66 6f 72 65 20 23 27 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 69 6e 73 65 72 74 2d | t.:before.#'oauth2-auto--insert- | 
| 2260 | 62 72 65 61 6b 2d 6f 6e 2d 73 65 63 72 65 74 2d    65 6e 74 72 69 65 73 29 0a 20 20 20 20 20 20 20 | break-on-secret-entries)........ | 
| 2280 | 20 20 20 28 70 6c 73 74 6f 72 65 2d 70 75 74 20    70 6c 73 74 6f 72 65 20 69 64 20 6e 69 6c 20 70 | ...(plstore-put.plstore.id.nil.p | 
| 22a0 | 6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20    3b 3b 20 53 65 65 6d 73 20 6c 69 6b 65 20 77 65 | list)...........;;.Seems.like.we | 
| 22c0 | 20 6f 63 63 61 73 69 6f 6e 61 6c 6c 79 20 65 6e    64 20 75 70 20 77 69 74 68 20 61 20 6b 69 6c 6c | .occasionally.end.up.with.a.kill | 
| 22e0 | 65 64 20 62 75 66 66 65 72 20 69 6e 20 50 4c 53    54 4f 52 45 20 2d 20 72 65 69 6e 69 74 69 61 6c | ed.buffer.in.PLSTORE.-.reinitial | 
| 2300 | 69 7a 65 20 69 74 20 69 6e 20 74 68 61 74 20 63    61 73 65 2e 0a 20 20 20 20 20 20 20 20 20 20 28 | ize.it.in.that.case............( | 
| 2320 | 69 66 20 28 62 75 66 66 65 72 2d 6c 69 76 65 2d    70 20 28 70 6c 73 74 6f 72 65 2d 2d 67 65 74 2d | if.(buffer-live-p.(plstore--get- | 
| 2340 | 62 75 66 66 65 72 20 70 6c 73 74 6f 72 65 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | buffer.plstore))...............( | 
| 2360 | 70 72 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 70 6c 73 74 6f 72 65 2d 73 | progn.................(plstore-s | 
| 2380 | 61 76 65 20 70 6c 73 74 6f 72 65 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75 | ave.plstore).................(pu | 
| 23a0 | 74 68 61 73 68 20 69 64 20 70 6c 69 73 74 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 | thash.id.plist.oauth2-auto--plst | 
| 23c0 | 6f 72 65 2d 63 61 63 68 65 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 70 6c 73 74 6f 72 65 | ore-cache)).............(plstore | 
| 23e0 | 2d 63 6c 6f 73 65 20 70 6c 73 74 6f 72 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 6f 61 75 | -close.plstore).............(oau | 
| 2400 | 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72    65 2d 77 72 69 74 65 20 75 73 65 72 6e 61 6d 65 | th2-auto--plstore-write.username | 
| 2420 | 20 70 72 6f 76 69 64 65 72 20 70 6c 69 73 74 29    29 29 0a 20 20 20 20 20 20 28 70 6c 73 74 6f 72 | .provider.plist))).......(plstor | 
| 2440 | 65 2d 63 6c 6f 73 65 20 70 6c 73 74 6f 72 65 29    0a 20 20 20 20 20 20 28 61 64 76 69 63 65 2d 72 | e-close.plstore).......(advice-r | 
| 2460 | 65 6d 6f 76 65 20 23 27 69 6e 73 65 72 74 20 23    27 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 69 6e | emove.#'insert.#'oauth2-auto--in | 
| 2480 | 73 65 72 74 2d 62 72 65 61 6b 2d 6f 6e 2d 73 65    63 72 65 74 2d 65 6e 74 72 69 65 73 29 29 29 29 | sert-break-on-secret-entries)))) | 
| 24a0 | 0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d    61 75 74 6f 2d 2d 69 6e 73 65 72 74 2d 62 72 65 | ..(defun.oauth2-auto--insert-bre | 
| 24c0 | 61 6b 2d 6f 6e 2d 73 65 63 72 65 74 2d 65 6e 74    72 69 65 73 20 28 26 72 65 73 74 20 61 72 67 73 | ak-on-secret-entries.(&rest.args | 
| 24e0 | 29 0a 20 20 22 42 72 65 61 6b 20 69 66 20 74 72    79 69 6e 67 20 74 6f 20 69 6e 73 65 72 74 20 73 | )..."Break.if.trying.to.insert.s | 
| 2500 | 65 63 72 65 74 20 65 6e 74 72 69 65 73 20 6f 75    74 73 69 64 65 20 6f 66 20 70 6c 73 74 6f 72 65 | ecret.entries.outside.of.plstore | 
| 2520 | 20 62 75 66 66 65 72 2e 0a 41 52 47 53 20 61 72    65 20 74 68 6f 73 65 20 70 61 73 73 65 64 20 74 | .buffer..ARGS.are.those.passed.t | 
| 2540 | 6f 20 e2 80 98 69 6e 73 65 72 74 e2 80 99 2e 0a    0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 | o....insert......This.function.i | 
| 2560 | 73 20 61 64 64 65 64 20 61 73 20 62 65 66 6f 72    65 20 61 64 76 69 63 65 20 74 6f 20 e2 80 98 69 | s.added.as.before.advice.to....i | 
| 2580 | 6e 73 65 72 74 e2 80 99 20 74 6f 20 61 74 74 65    6d 70 74 20 74 6f 20 72 65 70 72 6f 64 75 63 65 | nsert....to.attempt.to.reproduce | 
| 25a0 | 20 61 6e 64 0a 66 69 78 20 68 74 74 70 73 3a 2f    2f 67 69 74 68 75 62 2e 63 6f 6d 2f 72 68 61 70 | .and.fix.https://github.com/rhap | 
| 25c0 | 73 30 64 79 2f 65 6d 61 63 73 2d 6f 61 75 74 68    32 2d 61 75 74 6f 2f 69 73 73 75 65 73 2f 36 2e | s0dy/emacs-oauth2-auto/issues/6. | 
| 25e0 | 22 0a 20 20 28 77 68 65 6e 0a 20 20 20 20 20 20    28 61 6e 64 0a 20 20 20 20 20 20 20 28 73 74 72 | "...(when.......(and........(str | 
| 2600 | 69 6e 67 70 20 28 62 75 66 66 65 72 2d 66 69 6c    65 2d 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 | ingp.(buffer-file-name))........ | 
| 2620 | 28 6e 6f 74 20 28 66 69 6c 65 2d 65 71 75 61 6c    2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | (not.(file-equal-p.............. | 
| 2640 | 28 66 69 6c 65 2d 74 72 75 65 6e 61 6d 65 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 73 74 6f | (file-truename.oauth2-auto-plsto | 
| 2660 | 72 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 28 66 69 6c 65 2d 74 72 75 65 6e 61 6d 65 20 | re)..............(file-truename. | 
| 2680 | 28 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d    65 29 29 29 29 0a 20 20 20 20 20 20 20 28 65 71 | (buffer-file-name))))........(eq | 
| 26a0 | 75 61 6c 20 22 3b 3b 3b 20 73 65 63 72 65 74 20    65 6e 74 72 69 65 73 5c 6e 22 20 28 6e 74 68 20 | ual.";;;.secret.entries\n".(nth. | 
| 26c0 | 30 20 61 72 67 73 29 29 0a 20 20 20 20 20 20 20    28 62 61 63 6b 74 72 61 63 65 2d 66 72 61 6d 65 | 0.args))........(backtrace-frame | 
| 26e0 | 73 20 27 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    70 6c 73 74 6f 72 65 2d 77 72 69 74 65 29 29 0a | s.'oauth2-auto--plstore-write)). | 
| 2700 | 20 20 20 20 28 65 72 72 6f 72 20 22 42 55 47 3a    20 41 74 74 65 6d 70 74 65 64 20 74 6f 20 77 72 | ....(error."BUG:.Attempted.to.wr | 
| 2720 | 69 74 65 20 e2 80 98 6f 61 75 74 68 32 2d 61 75    74 6f e2 80 99 20 6b 65 79 73 20 74 6f 20 25 73 | ite....oauth2-auto....keys.to.%s | 
| 2740 | 2c 20 6e 6f 74 20 e2 80 98 6f 61 75 74 68 32 2d    61 75 74 6f 2d 70 6c 73 74 6f 72 65 e2 80 99 20 | ,.not....oauth2-auto-plstore.... | 
| 2760 | 28 25 73 29 2e 20 20 50 6c 65 61 73 65 20 72 65    70 6f 72 74 20 74 6f 20 68 74 74 70 73 3a 2f 2f | (%s)...Please.report.to.https:// | 
| 2780 | 67 69 74 68 75 62 2e 63 6f 6d 2f 72 68 61 70 73    30 64 79 2f 65 6d 61 63 73 2d 6f 61 75 74 68 32 | github.com/rhaps0dy/emacs-oauth2 | 
| 27a0 | 2d 61 75 74 6f 2f 69 73 73 75 65 73 2f 36 2e 25    73 22 0a 20 20 20 20 20 20 20 20 20 20 20 28 62 | -auto/issues/6.%s"............(b | 
| 27c0 | 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65 29    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 73 | uffer-file-name).oauth2-auto-pls | 
| 27e0 | 74 6f 72 65 0a 20 20 20 20 20 20 20 20 20 20 20    28 69 66 20 28 61 6e 64 20 28 72 65 71 75 69 72 | tore............(if.(and.(requir | 
| 2800 | 65 20 27 62 61 63 6b 74 72 61 63 65 20 6e 69 6c    20 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | e.'backtrace.nil.t)............. | 
| 2820 | 20 20 20 20 20 20 20 20 28 66 62 6f 75 6e 64 70    20 27 62 61 63 6b 74 72 61 63 65 2d 70 72 69 6e | ........(fboundp.'backtrace-prin | 
| 2840 | 74 2d 74 6f 2d 73 74 72 69 6e 67 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f | t-to-string))................(co | 
| 2860 | 6e 63 61 74 20 22 20 42 61 63 6b 74 72 61 63 65    3a 5c 6e 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 | ncat.".Backtrace:\n\n".......... | 
| 2880 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 62    61 63 6b 74 72 61 63 65 2d 70 72 69 6e 74 2d 74 | ..............(backtrace-print-t | 
| 28a0 | 6f 2d 73 74 72 69 6e 67 20 28 62 61 63 6b 74 72    61 63 65 2d 66 72 61 6d 65 73 20 27 6f 61 75 74 | o-string.(backtrace-frames.'oaut | 
| 28c0 | 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72 65    2d 77 72 69 74 65 29 29 29 0a 20 20 20 20 20 20 | h2-auto--plstore-write)))....... | 
| 28e0 | 20 20 20 20 20 20 20 22 22 29 29 29 29 0a 0a 0a    28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 | .......""))))...(defun.oauth2-au | 
| 2900 | 74 6f 2d 2d 70 6c 73 74 6f 72 65 2d 72 65 61 64    20 28 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 | to--plstore-read.(username.provi | 
| 2920 | 64 65 72 29 0a 20 20 22 52 65 61 64 20 74 68 65    20 64 61 74 61 20 66 6f 72 20 55 53 45 52 4e 41 | der)..."Read.the.data.for.USERNA | 
| 2940 | 4d 45 20 61 6e 64 20 50 52 4f 56 49 44 45 52 20    66 72 6f 6d 20 74 68 65 20 63 61 63 68 65 2c 20 | ME.and.PROVIDER.from.the.cache,. | 
| 2960 | 65 6c 73 65 20 66 72 6f 6d 20 70 6c 73 74 6f 72    65 2e 0a 43 61 63 68 65 20 64 61 74 61 20 69 66 | else.from.plstore..Cache.data.if | 
| 2980 | 20 61 20 6d 69 73 73 20 6f 63 63 75 72 73 2e 22    0a 20 20 28 6c 65 74 20 28 28 69 64 20 28 6f 61 | .a.miss.occurs."...(let.((id.(oa | 
| 29a0 | 75 74 68 32 2d 61 75 74 6f 2d 2d 63 6f 6d 70 75    74 65 2d 69 64 20 75 73 65 72 6e 61 6d 65 20 70 | uth2-auto--compute-id.username.p | 
| 29c0 | 72 6f 76 69 64 65 72 29 29 29 0a 20 20 20 20 3b    20 41 73 73 75 6d 65 20 63 61 63 68 65 20 69 73 | rovider))).....;.Assume.cache.is | 
| 29e0 | 20 69 6e 76 61 6c 69 64 61 74 65 64 2e 20 46 49    58 4d 45 0a 20 20 20 20 28 6f 72 20 6e 69 6c 20 | .invalidated..FIXME.....(or.nil. | 
| 2a00 | 3b 28 67 65 74 68 61 73 68 20 69 64 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73 74 6f 72 | ;(gethash.id.oauth2-auto--plstor | 
| 2a20 | 65 2d 63 61 63 68 65 29 0a 20 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 70 6c 73 74 6f 72 65 20 | e-cache).........(let.((plstore. | 
| 2a40 | 28 70 6c 73 74 6f 72 65 2d 6f 70 65 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 70 6c 73 74 6f 72 | (plstore-open.oauth2-auto-plstor | 
| 2a60 | 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 | e)))...........(unwind-protect.. | 
| 2a80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 75    74 68 61 73 68 20 69 64 0a 20 20 20 20 20 20 20 | .............(puthash.id........ | 
| 2aa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 63 64 72 20 28 70 6c 73 74 6f 72 65 2d 67 65 | ................(cdr.(plstore-ge | 
| 2ac0 | 74 20 70 6c 73 74 6f 72 65 20 69 64 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | t.plstore.id)).................. | 
| 2ae0 | 20 20 20 20 20 20 6f 61 75 74 68 32 2d 61 75 74    6f 2d 2d 70 6c 73 74 6f 72 65 2d 63 61 63 68 65 | ......oauth2-auto--plstore-cache | 
| 2b00 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70    6c 73 74 6f 72 65 2d 63 6c 6f 73 65 20 70 6c 73 | ).............(plstore-close.pls | 
| 2b20 | 74 6f 72 65 29 29 29 29 29 29 0a 0a 0a 0a 3b 3b    20 4d 61 69 6e 20 65 6e 74 72 79 20 70 6f 69 6e | tore))))))....;;.Main.entry.poin | 
| 2b40 | 74 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 70 6c 69 73 74 20 | t..(aio-defun.oauth2-auto-plist. | 
| 2b60 | 28 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64    65 72 29 0a 20 20 22 52 65 74 75 72 6e 73 20 61 | (username.provider)..."Returns.a | 
| 2b80 | 6e 20 5c 5c 3d 27 6f 61 75 74 68 32 2d 74 6f 6b    65 6e 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 | n.\\='oauth2-token.structure.for | 
| 2ba0 | 20 55 53 45 52 4e 41 4d 45 20 61 6e 64 20 50 52    4f 56 49 44 45 52 2e 22 0a 20 20 3b 20 43 68 65 | .USERNAME.and.PROVIDER."...;.Che | 
| 2bc0 | 63 6b 20 74 68 65 20 70 6c 73 74 6f 72 65 20 66    6f 72 20 74 68 65 20 72 65 71 75 65 73 74 65 64 | ck.the.plstore.for.the.requested | 
| 2be0 | 20 75 73 65 72 6e 61 6d 65 20 61 6e 64 20 70 72    6f 76 69 64 65 72 0a 20 20 28 6c 65 74 20 28 28 | .username.and.provider...(let.(( | 
| 2c00 | 70 6c 69 73 74 20 28 6f 61 75 74 68 32 2d 61 75    74 6f 2d 2d 70 6c 73 74 6f 72 65 2d 72 65 61 64 | plist.(oauth2-auto--plstore-read | 
| 2c20 | 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64    65 72 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e | .username.provider))).....(if.(n | 
| 2c40 | 6f 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 70 6c 69 73 74 2d 6e 65 65 64 73 2d 72 65 66 | ot.(oauth2-auto--plist-needs-ref | 
| 2c60 | 72 65 73 68 69 6e 67 20 70 6c 69 73 74 29 29 0a    20 20 20 20 20 20 20 20 3b 20 49 66 20 65 78 70 | reshing.plist)).........;.If.exp | 
| 2c80 | 69 72 61 74 69 6f 6e 20 74 69 6d 65 20 69 73 20    66 6f 75 6e 64 20 61 6e 64 20 68 61 73 6e 27 74 | iration.time.is.found.and.hasn't | 
| 2ca0 | 20 68 61 70 70 65 6e 65 64 20 79 65 74 0a 20 20    20 20 20 20 20 20 70 6c 69 73 74 0a 20 20 20 20 | .happened.yet.........plist..... | 
| 2cc0 | 20 20 3b 20 4f 74 68 65 72 77 69 73 65 20 72 65    66 72 65 73 68 20 6f 72 20 61 75 74 68 65 6e 74 | ..;.Otherwise.refresh.or.authent | 
| 2ce0 | 69 63 61 74 65 20 74 68 65 20 75 73 65 72 2c 20    61 6e 64 20 77 72 69 74 65 20 74 68 65 20 72 65 | icate.the.user,.and.write.the.re | 
| 2d00 | 73 75 6c 74 20 74 6f 0a 20 20 20 20 20 20 3b 20    70 6c 73 74 6f 72 65 2e 0a 20 20 20 20 20 20 28 | sult.to.......;.plstore........( | 
| 2d20 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 6c 73    74 6f 72 65 2d 77 72 69 74 65 0a 20 20 20 20 20 | oauth2-auto--plstore-write...... | 
| 2d40 | 20 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69    64 65 72 0a 20 20 20 20 20 20 20 28 61 69 6f 2d | ..username.provider........(aio- | 
| 2d60 | 61 77 61 69 74 0a 20 20 20 20 20 20 20 20 28 6f    61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72 65 | await.........(oauth2-auto-refre | 
| 2d80 | 73 68 2d 6f 72 2d 61 75 74 68 65 6e 74 69 63 61    74 65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 | sh-or-authenticate.username.prov | 
| 2da0 | 69 64 65 72 20 70 6c 69 73 74 29 29 29 29 29 29    0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f 61 75 | ider.plist))))))..(aio-defun.oau | 
| 2dc0 | 74 68 32 2d 61 75 74 6f 2d 66 6f 72 63 65 2d 72    65 61 75 74 68 20 28 75 73 65 72 6e 61 6d 65 20 | th2-auto-force-reauth.(username. | 
| 2de0 | 70 72 6f 76 69 64 65 72 29 0a 20 20 22 41 75 74    68 65 6e 74 69 63 61 74 65 73 20 55 53 45 52 4e | provider)..."Authenticates.USERN | 
| 2e00 | 41 4d 45 20 77 69 74 68 20 50 52 4f 56 49 44 45    52 20 61 67 61 69 6e 20 61 6e 64 20 73 61 76 65 | AME.with.PROVIDER.again.and.save | 
| 2e20 | 73 20 74 6f 20 74 68 65 20 70 6c 73 74 6f 72 65    2e 22 0a 20 20 28 6f 61 75 74 68 32 2d 61 75 74 | s.to.the.plstore."...(oauth2-aut | 
| 2e40 | 6f 2d 2d 70 6c 73 74 6f 72 65 2d 77 72 69 74 65    0a 20 20 20 75 73 65 72 6e 61 6d 65 20 70 72 6f | o--plstore-write....username.pro | 
| 2e60 | 76 69 64 65 72 0a 20 20 20 28 61 69 6f 2d 61 77    61 69 74 0a 20 20 20 20 28 6f 61 75 74 68 32 2d | vider....(aio-await.....(oauth2- | 
| 2e80 | 61 75 74 6f 2d 61 75 74 68 65 6e 74 69 63 61 74    65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 | auto-authenticate.username.provi | 
| 2ea0 | 64 65 72 29 29 29 29 0a 0a 0a 28 64 65 66 75 6e    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6f 6c | der))))...(defun.oauth2-auto-pol | 
| 2ec0 | 6c 2d 70 72 6f 6d 69 73 65 20 28 70 72 6f 6d 69    73 65 29 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f | l-promise.(promise)..."Synchrono | 
| 2ee0 | 75 73 6c 79 20 77 61 69 74 20 66 6f 72 20 50 52    4f 4d 49 53 45 2c 20 70 6f 6c 6c 69 6e 67 20 65 | usly.wait.for.PROMISE,.polling.e | 
| 2f00 | 76 65 72 79 20 53 45 43 4f 4e 44 53 20 73 65 63    6f 6e 64 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 | very.SECONDS.seconds."...(let.(( | 
| 2f20 | 73 65 63 6f 6e 64 73 20 33 29 29 0a 20 20 20 28    77 68 69 6c 65 20 28 6e 75 6c 6c 20 28 61 69 6f | seconds.3))....(while.(null.(aio | 
| 2f40 | 2d 72 65 73 75 6c 74 20 70 72 6f 6d 69 73 65 29    29 0a 20 20 20 20 20 28 73 6c 65 65 70 2d 66 6f | -result.promise))......(sleep-fo | 
| 2f60 | 72 20 73 65 63 6f 6e 64 73 29 29 0a 20 20 20 28    66 75 6e 63 61 6c 6c 20 28 61 69 6f 2d 72 65 73 | r.seconds))....(funcall.(aio-res | 
| 2f80 | 75 6c 74 20 70 72 6f 6d 69 73 65 29 29 29 29 0a    0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a | ult.promise))))..;;;###autoload. | 
| 2fa0 | 28 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 70 6c 69 73 74 2d 73 79 6e 63 20 28 75 | (defun.oauth2-auto-plist-sync.(u | 
| 2fc0 | 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72    29 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73 | sername.provider)..."Synchronous | 
| 2fe0 | 6c 79 20 63 61 6c 6c 20 e2 80 98 6f 61 75 74 68    32 2d 61 75 74 6f 2d 70 6c 69 73 74 e2 80 99 20 | ly.call....oauth2-auto-plist.... | 
| 3000 | 61 6e 64 20 72 65 74 75 72 6e 20 72 65 73 75 6c    74 2e 0a 46 6f 72 20 55 53 45 52 4e 41 4d 45 20 | and.return.result..For.USERNAME. | 
| 3020 | 61 6e 64 20 50 52 4f 56 49 44 45 52 2c 20 73 65    65 2e 22 0a 20 20 28 6f 61 75 74 68 32 2d 61 75 | and.PROVIDER,.see."...(oauth2-au | 
| 3040 | 74 6f 2d 70 6f 6c 6c 2d 70 72 6f 6d 69 73 65 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 6c 69 | to-poll-promise.(oauth2-auto-pli | 
| 3060 | 73 74 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76    69 64 65 72 29 29 29 0a 0a 28 61 69 6f 2d 64 65 | st.username.provider)))..(aio-de | 
| 3080 | 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d    61 63 63 65 73 73 2d 74 6f 6b 65 6e 20 28 75 73 | fun.oauth2-auto-access-token.(us | 
| 30a0 | 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 29    0a 20 20 22 52 65 74 75 72 6e 73 20 61 63 63 65 | ername.provider)..."Returns.acce | 
| 30c0 | 73 73 2d 74 6f 6b 65 6e 20 73 74 72 69 6e 67 20    75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 | ss-token.string.used.to.authenti | 
| 30e0 | 63 61 74 65 20 55 53 45 52 4e 41 4d 45 20 74 6f    20 50 52 4f 56 49 44 45 52 2e 22 0a 20 20 28 70 | cate.USERNAME.to.PROVIDER."...(p | 
| 3100 | 6c 69 73 74 2d 67 65 74 20 28 61 69 6f 2d 61 77    61 69 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f | list-get.(aio-await.(oauth2-auto | 
| 3120 | 2d 70 6c 69 73 74 20 75 73 65 72 6e 61 6d 65 20    70 72 6f 76 69 64 65 72 29 29 0a 20 20 20 20 20 | -plist.username.provider))...... | 
| 3140 | 20 20 20 20 20 20 20 20 3a 61 63 63 65 73 73 2d    74 6f 6b 65 6e 29 29 0a 0a 3b 3b 3b 23 23 23 61 | ........:access-token))..;;;###a | 
| 3160 | 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 61 63 63 65 73 | utoload.(defun.oauth2-auto-acces | 
| 3180 | 73 2d 74 6f 6b 65 6e 2d 73 79 6e 63 20 28 75 73    65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 29 | s-token-sync.(username.provider) | 
| 31a0 | 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73 6c    79 20 63 61 6c 6c 20 e2 80 98 6f 61 75 74 68 32 | ..."Synchronously.call....oauth2 | 
| 31c0 | 2d 61 75 74 6f 2d 61 63 63 65 73 73 2d 74 6f 6b    65 6e e2 80 99 20 61 6e 64 20 72 65 74 75 72 6e | -auto-access-token....and.return | 
| 31e0 | 20 72 65 73 75 6c 74 2e 0a 46 6f 72 20 55 53 45    52 4e 41 4d 45 20 61 6e 64 20 50 52 4f 56 49 44 | .result..For.USERNAME.and.PROVID | 
| 3200 | 45 52 2c 20 73 65 65 2e 22 0a 20 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 70 6f 6c 6c 2d 70 72 | ER,.see."...(oauth2-auto-poll-pr | 
| 3220 | 6f 6d 69 73 65 20 28 6f 61 75 74 68 32 2d 61 75    74 6f 2d 61 63 63 65 73 73 2d 74 6f 6b 65 6e 20 | omise.(oauth2-auto-access-token. | 
| 3240 | 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65    72 29 29 29 0a 0a 0a 3b 3b 20 4d 61 6b 69 6e 67 | username.provider)))...;;.Making | 
| 3260 | 20 61 6e 64 20 65 6e 63 6f 64 69 6e 67 20 72 65    71 75 65 73 74 73 0a 0a 28 64 65 66 75 6e 20 6f | .and.encoding.requests..(defun.o | 
| 3280 | 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70 72 6f 76    69 64 65 72 2d 69 6e 66 6f 20 28 70 72 6f 76 69 | auth2-auto--provider-info.(provi | 
| 32a0 | 64 65 72 29 0a 20 20 22 47 65 74 20 64 61 74 61    20 66 6f 72 20 50 52 4f 56 49 44 45 52 20 66 72 | der)..."Get.data.for.PROVIDER.fr | 
| 32c0 | 6f 6d 20 60 6f 61 75 74 68 32 2d 61 75 74 6f 2d    70 72 6f 76 69 64 65 72 73 2d 61 6c 69 73 74 27 | om.`oauth2-auto-providers-alist' | 
| 32e0 | 2e 22 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 76    69 64 65 72 2d 69 6e 66 6f 20 28 63 64 72 20 28 | ."...(let.((provider-info.(cdr.( | 
| 3300 | 61 73 73 6f 63 20 70 72 6f 76 69 64 65 72 20 28    6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 72 6f 76 | assoc.provider.(oauth2-auto-prov | 
| 3320 | 69 64 65 72 73 2d 61 6c 69 73 74 29 29 29 29 29    0a 20 20 20 20 28 77 68 65 6e 20 28 6e 6f 74 20 | iders-alist))))).....(when.(not. | 
| 3340 | 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 0a 20    20 20 20 20 20 28 65 72 72 6f 72 20 22 6f 61 75 | provider-info).......(error."oau | 
| 3360 | 74 68 32 2d 61 75 74 6f 3a 20 55 6e 6b 6e 6f 77    6e 20 70 72 6f 76 69 64 65 72 3a 20 25 73 22 20 | th2-auto:.Unknown.provider:.%s". | 
| 3380 | 70 72 6f 76 69 64 65 72 29 29 0a 20 20 20 20 28    64 6f 6c 69 73 74 20 28 6b 65 79 20 27 28 63 6c | provider)).....(dolist.(key.'(cl | 
| 33a0 | 69 65 6e 74 5f 69 64 20 63 6c 69 65 6e 74 5f 73    65 63 72 65 74 29 29 0a 20 20 20 20 20 20 20 20 | ient_id.client_secret))......... | 
| 33c0 | 28 77 68 65 6e 20 28 65 71 75 61 6c 20 22 22 20    28 63 64 72 20 28 61 73 73 6f 63 20 6b 65 79 20 | (when.(equal."".(cdr.(assoc.key. | 
| 33e0 | 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 29 29    0a 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 | provider-info)))..........(error | 
| 3400 | 20 22 6f 61 75 74 68 32 2d 61 75 74 6f 3a 20 50    72 6f 76 69 64 65 72 20 25 73 20 77 61 73 20 72 | ."oauth2-auto:.Provider.%s.was.r | 
| 3420 | 65 71 75 65 73 74 65 64 20 62 75 74 20 68 61 73    20 6e 6f 20 60 25 73 27 20 73 70 65 63 69 66 69 | equested.but.has.no.`%s'.specifi | 
| 3440 | 65 64 22 20 70 72 6f 76 69 64 65 72 20 6b 65 79    29 29 29 0a 20 20 20 20 70 72 6f 76 69 64 65 72 | ed".provider.key))).....provider | 
| 3460 | 2d 69 6e 66 6f 29 29 0a 0a 28 64 65 66 75 6e 20    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75 72 6c | -info))..(defun.oauth2-auto--url | 
| 3480 | 69 66 79 2d 72 65 71 75 65 73 74 20 28 61 6c 69    73 74 29 0a 20 20 22 4d 61 6b 65 20 41 4c 49 53 | ify-request.(alist)..."Make.ALIS | 
| 34a0 | 54 20 6f 66 20 28 73 79 6d 62 6f 6c 20 2e 20 73    74 72 69 6e 67 29 20 69 6e 74 6f 20 55 52 4c 2d | T.of.(symbol...string).into.URL- | 
| 34c0 | 66 6f 72 6d 61 74 74 65 64 20 72 65 71 75 65 73    74 2e 22 0a 20 20 28 6d 61 70 63 6f 6e 63 61 74 | formatted.request."...(mapconcat | 
| 34e0 | 20 28 6c 61 6d 62 64 61 20 28 73 29 20 28 63 6f    6e 63 61 74 20 28 75 72 6c 2d 68 65 78 69 66 79 | .(lambda.(s).(concat.(url-hexify | 
| 3500 | 2d 73 74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d    6e 61 6d 65 20 28 63 61 72 20 73 29 29 29 0a 20 | -string.(symbol-name.(car.s))).. | 
| 3520 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 3540 | 22 3d 22 20 28 75 72 6c 2d 68 65 78 69 66 79 2d    73 74 72 69 6e 67 20 28 63 64 72 20 73 29 29 29 | "=".(url-hexify-string.(cdr.s))) | 
| 3560 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 61    6c 69 73 74 20 22 26 22 29 29 0a 0a 28 64 65 66 | )..............alist."&"))..(def | 
| 3580 | 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    63 72 61 66 74 2d 72 65 71 75 65 73 74 2d 61 6c | un.oauth2-auto--craft-request-al | 
| 35a0 | 69 73 74 20 28 70 72 6f 76 69 64 65 72 2d 69 6e    66 6f 20 64 61 74 61 2d 6b 65 79 73 20 65 78 74 | ist.(provider-info.data-keys.ext | 
| 35c0 | 72 61 2d 61 6c 69 73 74 29 0a 20 20 22 4d 61 6b    65 20 72 65 71 75 65 73 74 20 66 6f 72 20 50 52 | ra-alist)..."Make.request.for.PR | 
| 35e0 | 4f 56 49 44 45 52 2d 49 4e 46 4f 20 75 73 69 6e    67 20 74 68 65 20 69 6e 66 6f 20 69 6e 20 44 41 | OVIDER-INFO.using.the.info.in.DA | 
| 3600 | 54 41 2d 4b 45 59 53 20 61 6e 64 20 45 58 54 52    41 2d 41 4c 49 53 54 2e 22 0a 20 20 28 61 70 70 | TA-KEYS.and.EXTRA-ALIST."...(app | 
| 3620 | 65 6e 64 20 28 2d 2d 66 69 6c 74 65 72 20 28 6d    65 6d 71 20 28 63 61 72 20 69 74 29 20 64 61 74 | end.(--filter.(memq.(car.it).dat | 
| 3640 | 61 2d 6b 65 79 73 29 20 70 72 6f 76 69 64 65 72    2d 69 6e 66 6f 29 20 65 78 74 72 61 2d 61 6c 69 | a-keys).provider-info).extra-ali | 
| 3660 | 73 74 29 29 0a 0a 28 64 65 66 75 6e 20 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 | st))..(defun.oauth2-auto--reques | 
| 3680 | 74 2d 61 63 63 65 73 73 2d 70 61 72 73 65 20 28    29 0a 20 20 22 50 61 72 73 65 20 74 68 65 20 72 | t-access-parse.()..."Parse.the.r | 
| 36a0 | 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 41 75 74    68 20 72 65 71 75 65 73 74 2e 0a 0a 43 6f 64 65 | esult.of.an.OAuth.request...Code | 
| 36c0 | 20 66 72 6f 6d 20 60 6f 61 75 74 68 32 2e 65 6c    27 2c 20 6c 69 63 65 6e 73 65 64 20 75 6e 64 65 | .from.`oauth2.el',.licensed.unde | 
| 36e0 | 72 20 47 50 4c 76 33 2b 2e 0a 53 65 65 20 68 74    74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d | r.GPLv3+..See.https://github.com | 
| 3700 | 2f 65 6d 61 63 73 6d 69 72 72 6f 72 2f 6f 61 75    74 68 32 2e 22 0a 20 20 28 67 6f 74 6f 2d 63 68 | /emacsmirror/oauth2."...(goto-ch | 
| 3720 | 61 72 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a    20 20 28 77 68 65 6e 20 28 73 65 61 72 63 68 2d | ar.(point-min))...(when.(search- | 
| 3740 | 66 6f 72 77 61 72 64 2d 72 65 67 65 78 70 20 22    5e 24 22 20 6e 69 6c 20 74 29 0a 20 20 20 20 28 | forward-regexp."^$".nil.t).....( | 
| 3760 | 6a 73 6f 6e 2d 72 65 61 64 29 29 29 0a 0a 28 61    69 6f 2d 64 65 66 75 6e 20 6f 61 75 74 68 32 2d | json-read)))..(aio-defun.oauth2- | 
| 3780 | 61 75 74 6f 2d 2d 72 65 71 75 65 73 74 20 28 70    72 6f 76 69 64 65 72 20 75 72 6c 2d 6b 65 79 20 | auto--request.(provider.url-key. | 
| 37a0 | 64 61 74 61 2d 6b 65 79 73 20 65 78 74 72 61 2d    61 6c 69 73 74 29 0a 20 20 22 41 73 79 6e 63 68 | data-keys.extra-alist)..."Asynch | 
| 37c0 | 72 6f 6e 6f 75 73 6c 79 20 73 65 6e 64 20 61 20    50 4f 53 54 20 72 65 71 75 65 73 74 20 74 6f 20 | ronously.send.a.POST.request.to. | 
| 37e0 | 4f 41 75 74 68 32 20 50 52 4f 56 49 44 45 52 2e    0a 50 52 4f 56 49 44 45 52 20 75 73 65 73 20 74 | OAuth2.PROVIDER..PROVIDER.uses.t | 
| 3800 | 68 65 20 75 72 6c 20 61 6e 64 20 64 61 74 61 20    73 70 65 63 69 66 69 65 64 20 75 6e 64 65 72 20 | he.url.and.data.specified.under. | 
| 3820 | 55 52 4c 2d 4b 45 59 20 61 6e 64 0a 44 41 54 41    2d 4b 45 59 53 20 69 6e 20 74 68 65 20 70 72 6f | URL-KEY.and.DATA-KEYS.in.the.pro | 
| 3840 | 76 69 64 65 72 20 69 6e 66 6f 20 28 73 65 65 20    60 6f 61 75 74 68 32 2d 61 75 74 6f 2d 70 72 6f | vider.info.(see.`oauth2-auto-pro | 
| 3860 | 76 69 64 65 72 73 2d 61 6c 69 73 74 27 29 2e 0a    41 6c 73 6f 20 73 65 6e 64 20 64 61 74 61 20 69 | viders-alist')..Also.send.data.i | 
| 3880 | 6e 20 45 58 54 52 41 2d 41 4c 49 53 54 2e 22 0a    20 20 28 6c 65 74 2a 20 28 0a 20 20 20 20 20 20 | n.EXTRA-ALIST."...(let*.(....... | 
| 38a0 | 20 20 20 3b 3b 20 43 72 61 66 74 20 74 68 65 20    72 65 71 75 65 73 74 20 66 69 72 73 74 0a 20 20 | ...;;.Craft.the.request.first... | 
| 38c0 | 20 20 20 20 20 20 20 28 70 72 6f 76 69 64 65 72    2d 69 6e 66 6f 20 28 6f 61 75 74 68 32 2d 61 75 | .......(provider-info.(oauth2-au | 
| 38e0 | 74 6f 2d 2d 70 72 6f 76 69 64 65 72 2d 69 6e 66    6f 20 70 72 6f 76 69 64 65 72 29 29 0a 20 20 20 | to--provider-info.provider)).... | 
| 3900 | 20 20 20 20 20 20 28 75 72 6c 20 28 63 64 72 20    28 61 73 73 6f 63 20 75 72 6c 2d 6b 65 79 20 70 | ......(url.(cdr.(assoc.url-key.p | 
| 3920 | 72 6f 76 69 64 65 72 2d 69 6e 66 6f 29 29 29 0a    20 20 20 20 20 20 20 20 20 28 64 61 74 61 2d 61 | rovider-info)))..........(data-a | 
| 3940 | 6c 69 73 74 20 28 6f 61 75 74 68 32 2d 61 75 74    6f 2d 2d 63 72 61 66 74 2d 72 65 71 75 65 73 74 | list.(oauth2-auto--craft-request | 
| 3960 | 2d 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f | -alist.......................pro | 
| 3980 | 76 69 64 65 72 2d 69 6e 66 6f 20 64 61 74 61 2d    6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69 73 74 | vider-info.data-keys.extra-alist | 
| 39a0 | 29 29 0a 20 20 20 20 20 20 20 20 20 28 64 61 74    61 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d | ))..........(data.(oauth2-auto-- | 
| 39c0 | 75 72 6c 69 66 79 2d 72 65 71 75 65 73 74 20 64    61 74 61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 | urlify-request.data-alist))..... | 
| 39e0 | 20 20 20 20 20 3b 3b 20 50 61 72 61 6d 65 74 65    72 73 20 66 6f 72 20 60 75 72 6c 2d 72 65 74 72 | .....;;.Parameters.for.`url-retr | 
| 3a00 | 69 65 76 65 27 20 69 6e 73 69 64 65 20 60 61 69    6f 2d 75 72 6c 2d 72 65 74 72 69 65 76 65 27 0a | ieve'.inside.`aio-url-retrieve'. | 
| 3a20 | 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 65    67 69 73 74 65 72 65 64 2d 61 75 74 68 2d 73 63 | .........(url-registered-auth-sc | 
| 3a40 | 68 65 6d 65 73 20 6e 69 6c 29 0a 20 20 20 20 20    20 20 20 20 28 75 72 6c 2d 72 65 71 75 65 73 74 | hemes.nil)..........(url-request | 
| 3a60 | 2d 6d 65 74 68 6f 64 20 22 50 4f 53 54 22 29 0a    20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 65 | -method."POST")..........(url-re | 
| 3a80 | 71 75 65 73 74 2d 64 61 74 61 20 64 61 74 61 29    0a 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 | quest-data.data)..........(url-r | 
| 3aa0 | 65 71 75 65 73 74 2d 65 78 74 72 61 2d 68 65 61    64 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 27 | equest-extra-headers...........' | 
| 3ac0 | 28 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22    20 2e 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f | (("Content-Type"..."application/ | 
| 3ae0 | 78 2d 77 77 77 2d 66 6f 72 6d 2d 75 72 6c 65 6e    63 6f 64 65 64 22 29 29 29 0a 20 20 20 20 20 20 | x-www-form-urlencoded")))....... | 
| 3b00 | 20 20 20 3b 3b 20 54 4f 44 4f 3a 20 75 73 69 6e    67 20 60 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69 | ...;;.TODO:.using.`aio-url-retri | 
| 3b20 | 65 76 65 27 20 73 6f 6d 65 74 69 6d 65 73 20 72    65 73 75 6c 74 73 20 69 6e 20 61 20 68 75 6e 67 | eve'.sometimes.results.in.a.hung | 
| 3b40 | 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 63 6f 6e    6e 65 63 74 69 6f 6e 2c 20 73 6f 20 77 65 20 66 | ..........;;.connection,.so.we.f | 
| 3b60 | 61 6c 6c 20 62 61 63 6b 20 74 6f 20 e2 80 98 75    72 6c 2d 72 65 74 72 69 65 76 65 2d 73 79 6e 63 | all.back.to....url-retrieve-sync | 
| 3b80 | 68 72 6f 6e 6f 75 73 6c 79 e2 80 99 20 69 6e 73    74 65 61 64 2e 0a 20 20 20 20 20 20 20 20 20 3b | hronously....instead...........; | 
| 3ba0 | 3b 20 54 68 69 73 20 6d 65 74 68 6f 64 20 73 68    6f 75 6c 64 6e e2 80 99 74 20 62 65 20 63 61 6c | ;.This.method.shouldn...t.be.cal | 
| 3bc0 | 6c 65 64 20 76 65 72 79 20 6f 66 74 65 6e 2c 20    6f 6e 6c 79 20 77 68 65 6e 20 6f 62 74 61 69 6e | led.very.often,.only.when.obtain | 
| 3be0 | 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20    20 3b 3b 20 69 6e 69 74 69 61 6c 20 61 63 63 65 | ing.the..........;;.initial.acce | 
| 3c00 | 73 73 20 74 6f 6b 65 6e 20 61 6e 64 20 77 68 65    6e 20 72 65 66 72 65 73 68 69 6e 67 20 74 6f 6b | ss.token.and.when.refreshing.tok | 
| 3c20 | 65 6e 73 2c 20 77 68 69 63 68 20 6f 6e 6c 79 20    68 61 70 70 65 6e 73 0a 20 20 20 20 20 20 20 20 | ens,.which.only.happens......... | 
| 3c40 | 20 3b 3b 20 65 76 65 72 79 20 68 6f 75 72 20 6f    72 20 73 6f 2e 20 54 68 65 72 65 66 6f 72 65 20 | .;;.every.hour.or.so..Therefore. | 
| 3c60 | 49 20 74 68 69 6e 6b 20 74 68 69 73 20 69 73 20    61 6e 20 61 63 63 65 70 74 61 62 6c 65 20 77 6f | I.think.this.is.an.acceptable.wo | 
| 3c80 | 72 6b 61 72 6f 75 6e 64 0a 20 20 20 20 20 20 20    20 20 3b 3b 20 66 6f 72 20 6e 6f 77 2e 0a 20 20 | rkaround..........;;.for.now.... | 
| 3ca0 | 20 20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65    2d 62 75 66 66 65 72 20 28 61 69 6f 2d 61 77 61 | .......(response-buffer.(aio-awa | 
| 3cc0 | 69 74 20 28 75 72 6c 2d 72 65 74 72 69 65 76 65    2d 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 75 | it.(url-retrieve-synchronously.u | 
| 3ce0 | 72 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 28    72 65 73 70 6f 6e 73 65 20 28 77 69 74 68 2d 63 | rl)))..........(response.(with-c | 
| 3d00 | 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 72 65    73 70 6f 6e 73 65 2d 62 75 66 66 65 72 0a 20 20 | urrent-buffer.response-buffer... | 
| 3d20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 70 72 6f 67 31 20 28 6f 61 75 74 68 | ...................(prog1.(oauth | 
| 3d40 | 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74 2d    61 63 63 65 73 73 2d 70 61 72 73 65 29 0a 20 20 | 2-auto--request-access-parse)... | 
| 3d60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 | .....................(kill-buffe | 
| 3d80 | 72 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 29 29 29 29 29 29 0a 20 20 20 20 20 20 28 63 | r.(current-buffer)))))).......(c | 
| 3da0 | 6f 6e 64 0a 20 20 20 20 20 20 20 28 28 61 73 73    6f 63 20 27 65 72 72 6f 72 20 72 65 73 70 6f 6e | ond........((assoc.'error.respon | 
| 3dc0 | 73 65 29 0a 20 20 20 20 20 20 20 20 28 65 72 72    6f 72 20 22 4f 41 75 74 68 20 65 72 72 6f 72 2e | se).........(error."OAuth.error. | 
| 3de0 | 20 20 52 65 71 75 65 73 74 3a 20 25 73 2e 20 20    52 65 73 70 6f 6e 73 65 3a 20 25 73 22 0a 20 20 | ..Request:.%s...Response:.%s"... | 
| 3e00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 70    2d 74 6f 2d 73 74 72 69 6e 67 20 64 61 74 61 2d | .............(pp-to-string.data- | 
| 3e20 | 61 6c 69 73 74 29 20 28 70 70 2d 74 6f 2d 73 74    72 69 6e 67 20 72 65 73 70 6f 6e 73 65 29 29 29 | alist).(pp-to-string.response))) | 
| 3e40 | 0a 20 20 20 20 20 20 20 28 74 20 72 65 73 70 6f    6e 73 65 29 29 29 29 0a 0a 0a 3b 3b 20 42 61 72 | ........(t.response))))...;;.Bar | 
| 3e60 | 65 62 6f 6e 65 73 20 48 54 54 50 20 73 65 72 76    65 72 20 74 6f 20 72 65 63 65 69 76 65 20 74 68 | ebones.HTTP.server.to.receive.th | 
| 3e80 | 65 20 74 6f 6b 65 6e 73 0a 0a 28 64 65 66 75 6e    20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74 | e.tokens..(defun.oauth2-auto--ht | 
| 3ea0 | 74 70 64 2d 72 65 73 70 6f 6e 64 20 28 70 72 6f    63 65 73 73 20 72 65 73 70 6f 6e 73 65 29 0a 20 | tpd-respond.(process.response).. | 
| 3ec0 | 20 22 53 65 6e 64 20 72 65 73 70 6f 6e 73 65 20    66 6f 72 20 4f 41 75 74 68 32 20 63 68 61 6c 6c | ."Send.response.for.OAuth2.chall | 
| 3ee0 | 65 6e 67 65 2d 72 65 73 70 6f 6e 73 65 2e 0a 50    52 4f 43 45 53 53 20 69 73 20 74 68 65 20 73 65 | enge-response..PROCESS.is.the.se | 
| 3f00 | 72 76 65 72 20 70 72 6f 63 65 73 73 20 63 72 65    61 74 65 64 20 69 6e 20 e2 80 98 6f 61 75 74 68 | rver.process.created.in....oauth | 
| 3f20 | 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72 2d    72 65 71 75 65 73 74 e2 80 99 2e 0a 52 45 53 50 | 2-auto--browser-request.....RESP | 
| 3f40 | 4f 4e 53 45 20 69 73 20 74 68 65 20 48 54 54 50    20 72 65 73 70 6f 6e 73 65 20 62 6f 64 79 20 74 | ONSE.is.the.HTTP.response.body.t | 
| 3f60 | 6f 20 73 65 6e 64 2e 22 0a 20 20 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a | o.send."...(process-send-string. | 
| 3f80 | 20 20 20 70 72 6f 63 65 73 73 20 28 63 6f 6e 63    61 74 20 22 48 54 54 50 2f 31 2e 30 20 32 30 30 | ...process.(concat."HTTP/1.0.200 | 
| 3fa0 | 20 4f 4b 5c 6e 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 74 65 | .OK\n"...................."Conte | 
| 3fc0 | 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 6c    61 69 6e 3b 20 63 68 61 72 73 65 74 3d 75 74 66 | nt-Type:.text/plain;.charset=utf | 
| 3fe0 | 2d 38 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 | -8\n"....................(format | 
| 4000 | 20 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68    3a 20 25 69 5c 6e 5c 6e 22 20 28 6c 65 6e 67 74 | ."Content-Length:.%i\n\n".(lengt | 
| 4020 | 68 20 72 65 73 70 6f 6e 73 65 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | h.response)).................... | 
| 4040 | 72 65 73 70 6f 6e 73 65 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 22 5c 6e 5c | response...................."\n\ | 
| 4060 | 6e 22 29 29 0a 20 20 28 70 72 6f 63 65 73 73 2d    73 65 6e 64 2d 65 6f 66 20 70 72 6f 63 65 73 73 | n"))...(process-send-eof.process | 
| 4080 | 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 71 75 65 72 79 | ))..(defmacro.oauth2-auto--query | 
| 40a0 | 2d 63 61 73 65 20 28 26 72 65 73 74 20 63 61 73    65 73 29 0a 20 20 22 48 61 6e 64 6c 65 20 48 54 | -case.(&rest.cases)..."Handle.HT | 
| 40c0 | 54 50 20 71 75 65 72 69 65 73 20 62 61 73 65 64    20 6f 6e 20 74 68 65 20 6b 65 79 73 20 70 72 65 | TP.queries.based.on.the.keys.pre | 
| 40e0 | 73 65 6e 74 20 69 6e 20 e2 80 98 71 75 65 72 79    2d 61 6c 69 73 74 e2 80 99 2e 0a e2 80 98 71 75 | sent.in....query-alist........qu | 
| 4100 | 65 72 79 2d 61 6c 69 73 74 e2 80 99 20 69 73 20    61 20 66 72 65 65 20 76 61 72 69 61 62 6c 65 2c | ery-alist....is.a.free.variable, | 
| 4120 | 20 62 6f 75 6e 64 20 62 79 20 74 68 65 20 63 61    6c 6c 65 72 20 6f 66 20 74 68 69 73 20 6d 61 63 | .bound.by.the.caller.of.this.mac | 
| 4140 | 72 6f 2e 20 20 45 61 63 68 0a 65 6c 65 6d 65 6e    74 20 6f 66 20 43 41 53 45 53 20 68 61 73 20 74 | ro...Each.element.of.CASES.has.t | 
| 4160 | 68 65 20 66 6f 72 6d 61 74 20 e2 80 98 28 73 79    6d 62 6f 6c 73 20 6d 73 67 20 62 6f 64 79 29 27 | he.format....(symbols.msg.body)' | 
| 4180 | 2e 20 20 46 6f 72 20 65 61 63 68 20 65 6c 65 6d    65 6e 74 20 6f 66 0a 43 41 53 45 53 3a 0a 0a 2d | ...For.each.element.of.CASES:..- | 
| 41a0 | 20 e2 80 98 73 79 6d 62 6f 6c 73 27 20 69 73 20    61 20 6c 69 73 74 20 6f 66 20 61 74 20 6c 65 61 | ....symbols'.is.a.list.of.at.lea | 
| 41c0 | 73 74 20 6f 6e 65 20 73 79 6d 62 6f 6c 2c 20 77    68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6b | st.one.symbol,.which.should.be.k | 
| 41e0 | 65 79 73 20 69 6e 0a 20 20 e2 80 98 71 75 65 72    79 2d 61 6c 69 73 74 e2 80 99 2e 0a 2d 20 45 78 | eys.in......query-alist.....-.Ex | 
| 4200 | 74 72 61 63 74 20 61 6e 64 20 62 69 6e 64 20 6b    65 79 73 20 60 73 79 6d 62 6f 6c 73 27 20 66 72 | tract.and.bind.keys.`symbols'.fr | 
| 4220 | 6f 6d 20 60 71 75 65 72 79 2d 61 6c 69 73 74 27    2e 0a 2d 20 49 66 20 61 6c 6c 20 6f 66 20 74 68 | om.`query-alist'..-.If.all.of.th | 
| 4240 | 65 6d 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20    72 65 73 70 6f 6e 64 20 77 69 74 68 20 60 6d 73 | em.are.present,.respond.with.`ms | 
| 4260 | 67 27 20 61 6e 64 20 72 75 6e 73 20 60 62 6f 64    79 27 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c 65 | g'.and.runs.`body'...For.example | 
| 4280 | 20 6f 66 20 75 73 61 67 65 20 73 65 65 20 e2 80    98 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74 | .of.usage.see....oauth2-auto--ht | 
| 42a0 | 74 70 64 2d 66 69 6c 74 65 72 e2 80 99 2e 22 0a    20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 64 | tpd-filter...."...(declare....(d | 
| 42c0 | 65 62 75 67 20 28 26 72 65 73 74 20 28 28 73 79    6d 62 6f 6c 70 20 26 72 65 73 74 20 73 79 6d 62 | ebug.(&rest.((symbolp.&rest.symb | 
| 42e0 | 6f 6c 70 29 20 66 6f 72 6d 20 26 72 65 73 74 20    66 6f 72 6d 29 29 29 29 0a 20 20 60 28 63 6f 6e | olp).form.&rest.form))))...`(con | 
| 4300 | 64 0a 20 20 20 20 2c 40 28 6d 61 70 63 61 72 20    28 6c 61 6d 62 64 61 20 28 63 61 73 65 29 0a 20 | d.....,@(mapcar.(lambda.(case).. | 
| 4320 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6c 65 74 20 28 28 73 79 6d 62 6f 6c 73 20 28 63 | ...............(let.((symbols.(c | 
| 4340 | 61 72 20 63 61 73 65 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ar.case))....................... | 
| 4360 | 28 6d 73 67 20 28 63 61 64 72 20 63 61 73 65 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (msg.(cadr.case))............... | 
| 4380 | 20 20 20 20 20 20 20 20 28 62 6f 64 79 20 28 63    64 64 72 20 63 61 73 65 29 29 29 0a 20 20 20 20 | ........(body.(cddr.case)))..... | 
| 43a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28    28 61 6e 64 20 2c 40 28 2d 2d 6d 61 70 20 60 28 | ..............`((and.,@(--map.`( | 
| 43c0 | 63 64 72 20 28 61 73 73 6f 63 20 27 2c 69 74 20    71 75 65 72 79 2d 61 6c 69 73 74 29 29 20 73 79 | cdr.(assoc.',it.query-alist)).sy | 
| 43e0 | 6d 62 6f 6c 73 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 | mbols)).....................(let | 
| 4400 | 2a 20 28 2c 40 28 2d 2d 6d 61 70 20 60 28 2c 69    74 20 28 63 64 72 20 28 61 73 73 6f 63 20 27 2c | *.(,@(--map.`(,it.(cdr.(assoc.', | 
| 4420 | 69 74 20 71 75 65 72 79 2d 61 6c 69 73 74 29 29    29 20 73 79 6d 62 6f 6c 73 29 0a 20 20 20 20 20 | it.query-alist))).symbols)...... | 
| 4440 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 73 67 20 2c 6d 73 67 29 | ......................(msg.,msg) | 
| 4460 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 e2 80 98 69 67 | ).......................;;....ig | 
| 4480 | 6e 6f 72 65 e2 80 99 20 73 75 70 70 72 65 73 73    65 73 20 62 79 74 65 20 63 6f 6d 70 69 6c 65 72 | nore....suppresses.byte.compiler | 
| 44a0 | 20 77 61 72 6e 69 6e 67 73 20 69 66 20 74 68 65    20 6d 61 63 72 6f 0a 20 20 20 20 20 20 20 20 20 | .warnings.if.the.macro.......... | 
| 44c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    63 61 6c 6c 65 72 20 64 6f 65 73 6e e2 80 99 74 | .............;;.caller.doesn...t | 
| 44e0 | 20 75 73 65 20 74 68 65 20 76 61 72 69 61 62 6c    65 73 20 64 65 63 6c 61 72 65 64 20 69 6e 20 74 | .use.the.variables.declared.in.t | 
| 4500 | 68 65 20 e2 80 98 6c 65 74 2a e2 80 99 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | he....let*...................... | 
| 4520 | 20 20 20 20 3b 3b 20 61 62 6f 76 65 2e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....;;.above.................... | 
| 4540 | 20 20 20 20 28 69 67 6e 6f 72 65 20 6d 73 67 20    2c 40 73 79 6d 62 6f 6c 73 29 0a 20 20 20 20 20 | ....(ignore.msg.,@symbols)...... | 
| 4560 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 | .................(oauth2-auto--h | 
| 4580 | 74 74 70 64 2d 72 65 73 70 6f 6e 64 20 70 72 6f    63 65 73 73 20 6d 73 67 29 0a 20 20 20 20 20 20 | ttpd-respond.process.msg)....... | 
| 45a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    2c 40 62 6f 64 79 29 29 29 29 0a 20 20 20 20 20 | ................,@body))))...... | 
| 45c0 | 20 20 20 20 20 20 20 20 20 63 61 73 65 73 29 29    29 0a 0a 28 64 65 66 75 6e 20 6f 61 75 74 68 32 | .........cases)))..(defun.oauth2 | 
| 45e0 | 2d 61 75 74 6f 2d 2d 68 74 74 70 64 2d 66 69 6c    74 65 72 20 28 70 72 6f 63 65 73 73 20 69 6e 70 | -auto--httpd-filter.(process.inp | 
| 4600 | 75 74 29 0a 20 20 22 54 68 65 20 48 54 54 50 20    68 61 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 20 | ut)..."The.HTTP.handler.for.the. | 
| 4620 | 4f 41 75 74 68 32 20 63 68 61 6c 6c 65 6e 67 65    2d 72 65 73 70 6f 6e 73 65 20 73 65 72 76 65 72 | OAuth2.challenge-response.server | 
| 4640 | 2e 0a 50 52 4f 43 45 53 53 20 69 73 20 74 68 65    20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 20 | ..PROCESS.is.the.server.process. | 
| 4660 | 63 72 65 61 74 65 64 20 69 6e 20 e2 80 98 6f 61    75 74 68 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 | created.in....oauth2-auto--brows | 
| 4680 | 65 72 2d 72 65 71 75 65 73 74 e2 80 99 2e 0a 49    4e 50 55 54 20 69 73 20 74 68 65 20 72 61 77 20 | er-request.....INPUT.is.the.raw. | 
| 46a0 | 48 54 54 50 20 72 65 71 75 65 73 74 2e 22 0a 20    20 28 6c 65 74 20 28 28 71 75 65 72 79 2d 61 6c | HTTP.request."...(let.((query-al | 
| 46c0 | 69 73 74 0a 20 20 20 20 20 20 20 20 20 28 77 69    74 68 2d 74 65 6d 70 2d 62 75 66 66 65 72 0a 20 | ist..........(with-temp-buffer.. | 
| 46e0 | 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 69 6e 70 75 74 29 0a 20 20 20 20 20 20 20 | ..........(insert.input)........ | 
| 4700 | 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28    70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 | ....(goto-char.(point-min))..... | 
| 4720 | 20 20 20 20 20 20 20 28 72 65 2d 73 65 61 72 63    68 2d 66 6f 72 77 61 72 64 0a 20 20 20 20 20 20 | .......(re-search-forward....... | 
| 4740 | 20 20 20 20 20 20 22 5e 5b 5b 3a 73 70 61 63 65    3a 5d 5d 2a 47 45 54 5b 5b 3a 73 70 61 63 65 3a | ......"^[[:space:]]*GET[[:space: | 
| 4760 | 5d 5d 2b 5b 2f 3f 5d 2b 5c 5c 28 5b 5b 3a 67 72    61 70 68 3a 5d 5d 2a 5c 5c 29 5b 5b 3a 73 70 61 | ]]+[/?]+\\([[:graph:]]*\\)[[:spa | 
| 4780 | 63 65 3a 5d 5d 2b 48 54 54 50 2f 5b 30 2d 39 2e    5d 2b 5b 5b 3a 73 70 61 63 65 3a 5d 5d 2a 24 22 | ce:]]+HTTP/[0-9.]+[[:space:]]*$" | 
| 47a0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 6d 61    70 63 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 | )............(mapcar............ | 
| 47c0 | 20 28 6c 61 6d 62 64 61 20 28 69 74 29 20 28 63    6f 6e 73 20 28 69 6e 74 65 72 6e 20 28 63 61 72 | .(lambda.(it).(cons.(intern.(car | 
| 47e0 | 20 69 74 29 29 20 28 63 61 64 72 20 69 74 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 75 | .it)).(cadr.it))).............(u | 
| 4800 | 72 6c 2d 70 61 72 73 65 2d 71 75 65 72 79 2d 73    74 72 69 6e 67 20 28 6d 61 74 63 68 2d 73 74 72 | rl-parse-query-string.(match-str | 
| 4820 | 69 6e 67 20 31 29 29 29 29 29 29 0a 20 20 20 20    28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 71 75 | ing.1)))))).....(oauth2-auto--qu | 
| 4840 | 65 72 79 2d 63 61 73 65 0a 20 20 20 20 20 28 28    65 72 72 6f 72 20 65 72 72 6f 72 5f 64 65 73 63 | ery-case......((error.error_desc | 
| 4860 | 72 69 70 74 69 6f 6e 29 0a 20 20 20 20 20 20 28    66 6f 72 6d 61 74 20 22 45 72 72 6f 72 20 25 73 | ription).......(format."Error.%s | 
| 4880 | 3a 20 25 73 22 20 65 72 72 6f 72 20 65 72 72 6f    72 5f 64 65 73 63 72 69 70 74 69 6f 6e 29 0a 20 | :.%s".error.error_description).. | 
| 48a0 | 20 20 20 20 20 28 65 72 72 6f 72 20 6d 73 67 29    0a 20 20 20 20 20 20 6e 69 6c 29 0a 20 20 20 20 | .....(error.msg).......nil)..... | 
| 48c0 | 20 28 28 63 6f 64 65 20 73 74 61 74 65 29 0a 20    20 20 20 20 20 22 41 75 74 68 65 6e 74 69 63 61 | .((code.state)......."Authentica | 
| 48e0 | 74 69 6f 6e 20 74 6f 6b 65 6e 20 73 75 63 63 65    73 73 66 75 6c 6c 79 20 6f 62 74 61 69 6e 65 64 | tion.token.successfully.obtained | 
| 4900 | 20 62 79 20 45 6d 61 63 73 21 20 59 6f 75 20 6d    61 79 20 63 6c 6f 73 65 20 74 68 69 73 20 70 61 | .by.Emacs!.You.may.close.this.pa | 
| 4920 | 67 65 20 6e 6f 77 2e 22 0a 20 20 20 20 20 20 71    75 65 72 79 2d 61 6c 69 73 74 29 0a 20 20 20 20 | ge.now.".......query-alist)..... | 
| 4940 | 20 28 28 66 61 76 69 63 6f 6e 2e 69 63 6f 29 0a    20 20 20 20 20 20 22 22 0a 20 20 20 20 20 20 6e | .((favicon.ico)......."".......n | 
| 4960 | 69 6c 29 20 20 3b 20 6a 75 73 74 20 72 65 74 75    72 6e 20 65 6d 70 74 79 20 6c 69 73 74 20 69 66 | il)..;.just.return.empty.list.if | 
| 4980 | 20 66 61 76 69 63 6f 6e 2e 69 63 6f 20 69 73 20    72 65 71 75 65 73 74 65 64 0a 20 20 20 20 20 28 | .favicon.ico.is.requested......( | 
| 49a0 | 28 29 0a 20 20 20 20 20 20 28 66 6f 72 6d 61 74    20 22 43 6f 75 6c 64 20 6e 6f 74 20 70 61 72 73 | ().......(format."Could.not.pars | 
| 49c0 | 65 20 71 75 65 72 79 20 73 74 72 69 6e 67 20 25    73 22 20 28 70 70 2d 74 6f 2d 73 74 72 69 6e 67 | e.query.string.%s".(pp-to-string | 
| 49e0 | 20 71 75 65 72 79 2d 61 6c 69 73 74 29 29 0a 20    20 20 20 20 20 28 65 72 72 6f 72 20 6d 73 67 29 | .query-alist)).......(error.msg) | 
| 4a00 | 0a 20 20 20 20 20 20 6e 69 6c 29 29 29 29 0a 0a    28 61 69 6f 2d 64 65 66 75 6e 20 6f 61 75 74 68 | .......nil))))..(aio-defun.oauth | 
| 4a20 | 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72 2d    72 65 71 75 65 73 74 20 28 70 72 6f 76 69 64 65 | 2-auto--browser-request.(provide | 
| 4a40 | 72 20 75 72 6c 2d 6b 65 79 20 64 61 74 61 2d 6b    65 79 73 20 65 78 74 72 61 2d 61 6c 69 73 74 20 | r.url-key.data-keys.extra-alist. | 
| 4a60 | 26 6f 70 74 69 6f 6e 61 6c 20 71 75 69 65 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 | &optional.quiet)............(if. | 
| 4a80 | 6f 61 75 74 68 32 2d 61 75 74 6f 2d 6d 61 6e 75    61 6c 6c 79 2d 61 75 74 68 0a 20 20 20 20 20 20 | oauth2-auto-manually-auth....... | 
| 4aa0 | 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 61 77    61 69 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f | .........(aio-await.(oauth2-auto | 
| 4ac0 | 2d 2d 62 72 6f 77 73 65 72 2d 72 65 71 75 65 73    74 2d 6d 61 6e 75 61 6c 6c 79 20 70 72 6f 76 69 | --browser-request-manually.provi | 
| 4ae0 | 64 65 72 20 75 72 6c 2d 6b 65 79 20 64 61 74 61    2d 6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69 73 | der.url-key.data-keys.extra-alis | 
| 4b00 | 74 20 71 75 69 65 74 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 28 61 69 6f 2d 61 77 61 69 | t.quiet))..............(aio-awai | 
| 4b20 | 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    62 72 6f 77 73 65 72 2d 72 65 71 75 65 73 74 2d | t.(oauth2-auto--browser-request- | 
| 4b40 | 61 75 74 6f 20 70 72 6f 76 69 64 65 72 20 75 72    6c 2d 6b 65 79 20 64 61 74 61 2d 6b 65 79 73 20 | auto.provider.url-key.data-keys. | 
| 4b60 | 65 78 74 72 61 2d 61 6c 69 73 74 20 71 75 69 65    74 29 29 29 29 0a 0a 0a 28 61 69 6f 2d 64 65 66 | extra-alist.quiet))))...(aio-def | 
| 4b80 | 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    62 72 6f 77 73 65 72 2d 72 65 71 75 65 73 74 2d | un.oauth2-auto--browser-request- | 
| 4ba0 | 61 75 74 6f 20 28 70 72 6f 76 69 64 65 72 20 75    72 6c 2d 6b 65 79 20 64 61 74 61 2d 6b 65 79 73 | auto.(provider.url-key.data-keys | 
| 4bc0 | 20 65 78 74 72 61 2d 61 6c 69 73 74 20 26 6f 70    74 69 6f 6e 61 6c 20 71 75 69 65 74 29 0a 20 20 | .extra-alist.&optional.quiet)... | 
| 4be0 | 22 4f 70 65 6e 20 62 72 6f 77 73 65 72 20 66 6f    72 20 74 68 65 20 4f 41 75 74 68 32 20 50 52 4f | "Open.browser.for.the.OAuth2.PRO | 
| 4c00 | 56 49 44 45 52 2e 0a 42 72 6f 77 73 65 72 20 69    73 20 6f 70 65 6e 65 64 20 61 74 20 75 72 6c 20 | VIDER..Browser.is.opened.at.url. | 
| 4c20 | 61 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 67    69 76 65 6e 20 62 79 20 74 61 6b 69 6e 67 20 55 | and.parameters.given.by.taking.U | 
| 4c40 | 52 4c 2d 4b 45 59 20 61 6e 64 20 44 41 54 41 2d    4b 45 59 53 0a 66 72 6f 6d 20 74 68 65 20 64 61 | RL-KEY.and.DATA-KEYS.from.the.da | 
| 4c60 | 74 61 20 6f 66 20 74 68 65 20 50 52 4f 56 49 44    45 52 2c 20 61 6e 64 20 61 64 64 69 6e 67 20 45 | ta.of.the.PROVIDER,.and.adding.E | 
| 4c80 | 58 54 52 41 2d 41 4c 49 53 54 2e 20 20 54 68 65    6e 20 77 65 20 6c 69 73 74 65 6e 20 74 6f 20 74 | XTRA-ALIST...Then.we.listen.to.t | 
| 4ca0 | 68 65 0a 72 65 64 69 72 65 63 74 20 72 65 73 70    6f 6e 73 65 20 61 6e 64 20 72 65 74 75 72 6e 20 | he.redirect.response.and.return. | 
| 4cc0 | 69 74 2e 0a 0a 49 66 20 51 55 49 45 54 20 69 73    20 6e 6f 6e 2d 6e 69 6c 2c 20 73 75 70 70 72 65 | it...If.QUIET.is.non-nil,.suppre | 
| 4ce0 | 73 73 20 61 6c 65 72 74 73 2e 22 0a 20 20 28 6c    65 74 2a 20 28 3b 20 46 69 72 73 74 20 6f 70 65 | ss.alerts."...(let*.(;.First.ope | 
| 4d00 | 6e 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 73 6f    6d 65 20 70 6f 72 74 20 69 6e 20 6c 6f 63 61 6c | n.listener.to.some.port.in.local | 
| 4d20 | 68 6f 73 74 0a 20 20 20 20 20 20 20 20 20 28 73    65 72 76 65 72 2d 70 72 6f 63 2d 66 69 6c 74 65 | host..........(server-proc-filte | 
| 4d40 | 72 20 28 61 69 6f 2d 6d 61 6b 65 2d 63 61 6c 6c    62 61 63 6b 29 29 0a 20 20 20 20 20 20 20 20 20 | r.(aio-make-callback)).......... | 
| 4d60 | 28 73 65 72 76 65 72 2d 70 72 6f 63 20 28 6d 61    6b 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 | (server-proc.(make-network-proce | 
| 4d80 | 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 | ss........................:name. | 
| 4da0 | 20 20 20 22 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 68 74 74 70 64 22 0a 20 20 20 20 20 20 20 20 | ..."oauth2-auto--httpd"......... | 
| 4dc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    73 65 72 76 69 63 65 20 74 0a 20 20 20 20 20 20 | ...............:service.t....... | 
| 4de0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 73 65 72 76 65 72 20 20 74 0a 20 20 20 20 | .................:server..t..... | 
| 4e00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 68 6f 73 74 20 20 20 20 27 6c 6f 63 | ...................:host....'loc | 
| 4e20 | 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 66 61 6d 69 6c | al........................:famil | 
| 4e40 | 79 20 20 27 69 70 76 34 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | y..'ipv4........................ | 
| 4e60 | 3a 66 69 6c 74 65 72 20 20 28 63 61 72 20 73 65    72 76 65 72 2d 70 72 6f 63 2d 66 69 6c 74 65 72 | :filter..(car.server-proc-filter | 
| 4e80 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3a 63 6f 64 69 6e 67 | )........................:coding | 
| 4ea0 | 20 20 27 62 69 6e 61 72 79 29 29 29 0a 20 20 20    20 28 75 6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 | ..'binary))).....(unwind-protect | 
| 4ec0 | 0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28    28 73 65 72 76 65 72 2d 70 72 6f 6d 69 73 65 20 | .........(let*.((server-promise. | 
| 4ee0 | 28 63 64 72 20 73 65 72 76 65 72 2d 70 72 6f 63    2d 66 69 6c 74 65 72 29 29 0a 20 20 20 20 20 20 | (cdr.server-proc-filter))....... | 
| 4f00 | 20 20 20 20 20 20 20 20 20 28 73 65 72 76 65 72    2d 75 72 6c 20 28 66 6f 72 6d 61 74 20 22 68 74 | .........(server-url.(format."ht | 
| 4f20 | 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 25    69 2f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 | tp://localhost:%i/"............. | 
| 4f40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 61 64 72 20 28 70 72 | .......................(cadr.(pr | 
| 4f60 | 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 73 65    72 76 65 72 2d 70 72 6f 63 29 29 29 29 0a 20 20 | ocess-contact.server-proc))))... | 
| 4f80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65    64 69 72 65 63 74 2d 75 72 69 2d 65 6c 74 20 28 | .............(redirect-uri-elt.( | 
| 4fa0 | 63 6f 6e 73 20 27 72 65 64 69 72 65 63 74 5f 75    72 69 20 73 65 72 76 65 72 2d 75 72 6c 29 29 0a | cons.'redirect_uri.server-url)). | 
| 4fc0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 20 43 72 61 66 74 20 61 20 72 65 71 75 65 73 | ................;.Craft.a.reques | 
| 4fe0 | 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 76 65 72 79 2d 65 78 74 72 61 2d 61 6c 69 | t................(very-extra-ali | 
| 5000 | 73 74 20 28 63 6f 6e 73 20 72 65 64 69 72 65 63    74 2d 75 72 69 2d 65 6c 74 20 65 78 74 72 61 2d | st.(cons.redirect-uri-elt.extra- | 
| 5020 | 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3b 3b 20 28 76 65 72 79 2d | alist))................;;.(very- | 
| 5040 | 65 78 74 72 61 2d 61 6c 69 73 74 20 65 78 74 72    61 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 20 20 | extra-alist.extra-alist)........ | 
| 5060 | 20 20 20 20 20 20 20 20 3b 3b 20 61 6c 6d 6f 73    74 20 73 61 6d 65 20 63 6f 64 65 20 61 73 20 62 | ........;;.almost.same.code.as.b | 
| 5080 | 65 67 69 6e 6e 69 6e 67 20 6f 66 20 60 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 | eginning.of.`oauth2-auto--reques | 
| 50a0 | 74 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f | t'................(provider-info | 
| 50c0 | 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 70    72 6f 76 69 64 65 72 2d 69 6e 66 6f 20 70 72 6f | .(oauth2-auto--provider-info.pro | 
| 50e0 | 76 69 64 65 72 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 64 61 74 61 2d 61 6c 69 | vider))................(data-ali | 
| 5100 | 73 74 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 63 72 61 66 74 2d 72 65 71 75 65 73 74 2d 61 | st.(oauth2-auto--craft-request-a | 
| 5120 | 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | list............................ | 
| 5140 | 20 70 72 6f 76 69 64 65 72 2d 69 6e 66 6f 20 64    61 74 61 2d 6b 65 79 73 20 76 65 72 79 2d 65 78 | .provider-info.data-keys.very-ex | 
| 5160 | 74 72 61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 64 61 74 61 | tra-alist))................(data | 
| 5180 | 20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75    72 6c 69 66 79 2d 72 65 71 75 65 73 74 20 64 61 | .(oauth2-auto--urlify-request.da | 
| 51a0 | 74 61 2d 61 6c 69 73 74 29 29 0a 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 20 | ta-alist)).................(url. | 
| 51c0 | 28 63 64 72 20 28 61 73 73 6f 63 20 75 72 6c 2d    6b 65 79 20 70 72 6f 76 69 64 65 72 2d 69 6e 66 | (cdr.(assoc.url-key.provider-inf | 
| 51e0 | 6f 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3b 20 6f 70 65 6e 20 61 75 74 68 6f | o)))................;.open.autho | 
| 5200 | 72 69 7a 61 74 69 6f 6e 20 55 52 4c 20 69 6e 20    62 72 6f 77 73 65 72 0a 20 20 20 20 20 20 20 20 | rization.URL.in.browser......... | 
| 5220 | 20 20 20 20 20 20 20 28 72 65 73 70 6f 6e 73 65    2d 61 6c 69 73 74 20 6e 69 6c 29 29 0a 20 20 20 | .......(response-alist.nil)).... | 
| 5240 | 20 20 20 20 20 20 20 28 62 72 6f 77 73 65 2d 75    72 6c 20 28 63 6f 6e 63 61 74 20 75 72 6c 20 22 | .......(browse-url.(concat.url." | 
| 5260 | 3f 22 20 64 61 74 61 29 29 0a 0a 20 20 20 20 20    20 20 20 20 20 28 75 6e 6c 65 73 73 20 71 75 69 | ?".data))............(unless.qui | 
| 5280 | 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    61 6c 65 72 74 20 22 4c 6f 67 20 69 6e 20 74 6f | et.............(alert."Log.in.to | 
| 52a0 | 20 79 6f 75 72 20 61 63 63 6f 75 6e 74 20 66 6f    72 20 45 6d 61 63 73 20 69 6e 20 79 6f 75 72 20 | .your.account.for.Emacs.in.your. | 
| 52c0 | 62 72 6f 77 73 65 72 20 77 69 6e 64 6f 77 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | browser.window"................. | 
| 52e0 | 20 20 20 3a 74 69 74 6c 65 20 22 45 6d 61 63 73    20 4f 41 75 74 68 32 20 6c 6f 67 69 6e 22 0a 20 | ...:title."Emacs.OAuth2.login".. | 
| 5300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 3a 63 61 74 65 67 6f 72 79 20 27 6f 61 75 | ..................:category.'oau | 
| 5320 | 74 68 32 2d 61 75 74 6f 29 29 0a 20 20 20 20 20    20 20 20 20 20 3b 20 57 61 69 74 20 75 6e 74 69 | th2-auto))...........;.Wait.unti | 
| 5340 | 6c 20 77 65 20 67 65 74 20 61 20 72 65 70 6c 79    20 63 6f 6e 74 61 69 6e 69 6e 67 20 27 63 6f 64 | l.we.get.a.reply.containing.'cod | 
| 5360 | 65 20 61 6e 64 20 27 73 74 61 74 65 2e 0a 20 20    20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 | e.and.'state............(while.( | 
| 5380 | 6e 6f 74 20 72 65 73 70 6f 6e 73 65 2d 61 6c 69    73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | not.response-alist)............. | 
| 53a0 | 28 73 65 74 71 20 72 65 73 70 6f 6e 73 65 2d 61    6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 | (setq.response-alist............ | 
| 53c0 | 20 20 20 20 20 20 20 28 61 70 70 6c 79 20 23 27    6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 68 74 74 | .......(apply.#'oauth2-auto--htt | 
| 53e0 | 70 64 2d 66 69 6c 74 65 72 20 28 61 69 6f 2d 63    68 61 69 6e 20 73 65 72 76 65 72 2d 70 72 6f 6d | pd-filter.(aio-chain.server-prom | 
| 5400 | 69 73 65 29 29 29 29 0a 0a 20 20 20 20 20 20 20    20 20 20 3b 20 72 65 74 75 72 6e 20 74 68 65 20 | ise))))............;.return.the. | 
| 5420 | 72 65 73 70 6f 6e 73 65 2c 20 77 69 74 68 20 74    68 65 20 27 72 65 64 69 72 65 63 74 5f 75 72 69 | response,.with.the.'redirect_uri | 
| 5440 | 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73    20 72 65 64 69 72 65 63 74 2d 75 72 69 2d 65 6c | ...........(cons.redirect-uri-el | 
| 5460 | 74 20 72 65 73 70 6f 6e 73 65 2d 61 6c 69 73 74    29 29 0a 20 20 20 20 20 20 3b 20 41 6c 77 61 79 | t.response-alist)).......;.Alway | 
| 5480 | 73 20 6b 69 6c 6c 20 73 65 72 76 65 72 2d 70 72    6f 63 0a 20 20 20 20 20 20 28 64 65 6c 65 74 65 | s.kill.server-proc.......(delete | 
| 54a0 | 2d 70 72 6f 63 65 73 73 20 73 65 72 76 65 72 2d    70 72 6f 63 29 29 29 29 0a 0a 28 61 69 6f 2d 64 | -process.server-proc))))..(aio-d | 
| 54c0 | 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f    2d 2d 62 72 6f 77 73 65 72 2d 72 65 71 75 65 73 | efun.oauth2-auto--browser-reques | 
| 54e0 | 74 2d 6d 61 6e 75 61 6c 6c 79 20 28 70 72 6f 76    69 64 65 72 20 75 72 6c 2d 6b 65 79 20 64 61 74 | t-manually.(provider.url-key.dat | 
| 5500 | 61 2d 6b 65 79 73 20 65 78 74 72 61 2d 61 6c 69    73 74 20 26 6f 70 74 69 6f 6e 61 6c 20 71 75 69 | a-keys.extra-alist.&optional.qui | 
| 5520 | 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 22    4f 70 65 6e 20 62 72 6f 77 73 65 72 20 66 6f 72 | et)............"Open.browser.for | 
| 5540 | 20 74 68 65 20 4f 41 75 74 68 32 20 50 52 4f 56    49 44 45 52 2e 0a 49 6e 73 74 65 61 64 20 6f 66 | .the.OAuth2.PROVIDER..Instead.of | 
| 5560 | 20 6f 70 65 6e 69 6e 67 20 62 72 6f 77 73 65 72    2c 20 64 69 73 70 6c 61 79 20 74 68 65 20 61 75 | .opening.browser,.display.the.au | 
| 5580 | 74 68 6f 72 69 7a 61 74 69 6f 6e 20 55 52 4c 20    61 6e 64 20 77 61 69 74 20 66 6f 72 20 75 73 65 | thorization.URL.and.wait.for.use | 
| 55a0 | 72 20 74 6f 20 69 6e 70 75 74 20 74 68 65 20 63    6f 64 65 2e 0a 42 72 6f 77 73 65 72 20 55 52 4c | r.to.input.the.code..Browser.URL | 
| 55c0 | 20 69 73 20 63 6f 6e 73 74 72 75 63 74 65 64 20    66 72 6f 6d 20 75 72 6c 20 61 6e 64 20 70 61 72 | .is.constructed.from.url.and.par | 
| 55e0 | 61 6d 65 74 65 72 73 20 67 69 76 65 6e 20 62 79    20 74 61 6b 69 6e 67 20 55 52 4c 2d 4b 45 59 20 | ameters.given.by.taking.URL-KEY. | 
| 5600 | 61 6e 64 20 44 41 54 41 2d 4b 45 59 53 0a 66 72    6f 6d 20 74 68 65 20 64 61 74 61 20 6f 66 20 74 | and.DATA-KEYS.from.the.data.of.t | 
| 5620 | 68 65 20 50 52 4f 56 49 44 45 52 2c 20 61 6e 64    20 61 64 64 69 6e 67 20 45 58 54 52 41 2d 41 4c | he.PROVIDER,.and.adding.EXTRA-AL | 
| 5640 | 49 53 54 2e 0a 0a 49 66 20 51 55 49 45 54 20 69    73 20 6e 6f 6e 2d 6e 69 6c 2c 20 73 75 70 70 72 | IST...If.QUIET.is.non-nil,.suppr | 
| 5660 | 65 73 73 20 61 6c 65 72 74 73 2e 22 0a 20 20 20    20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 | ess.alerts."............(let*.(( | 
| 5680 | 72 65 64 69 72 65 63 74 2d 75 72 69 20 22 68 74    74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 38 | redirect-uri."http://localhost:8 | 
| 56a0 | 30 38 30 22 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 72 65 64 69 72 65 63 | 080")...................(redirec | 
| 56c0 | 74 2d 75 72 69 2d 65 6c 74 20 28 63 6f 6e 73 20    27 72 65 64 69 72 65 63 74 5f 75 72 69 20 72 65 | t-uri-elt.(cons.'redirect_uri.re | 
| 56e0 | 64 69 72 65 63 74 2d 75 72 69 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | direct-uri))...................( | 
| 5700 | 76 65 72 79 2d 65 78 74 72 61 2d 61 6c 69 73 74    20 28 63 6f 6e 73 20 72 65 64 69 72 65 63 74 2d | very-extra-alist.(cons.redirect- | 
| 5720 | 75 72 69 2d 65 6c 74 20 65 78 74 72 61 2d 61 6c    69 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 | uri-elt.extra-alist))........... | 
| 5740 | 20 20 20 20 20 20 20 20 28 70 72 6f 76 69 64 65    72 2d 69 6e 66 6f 20 28 6f 61 75 74 68 32 2d 61 | ........(provider-info.(oauth2-a | 
| 5760 | 75 74 6f 2d 2d 70 72 6f 76 69 64 65 72 2d 69 6e    66 6f 20 70 72 6f 76 69 64 65 72 29 29 0a 20 20 | uto--provider-info.provider))... | 
| 5780 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 64 61 74 61 2d 61 6c 69 73 74 20 28 6f 61 75 | ................(data-alist.(oau | 
| 57a0 | 74 68 32 2d 61 75 74 6f 2d 2d 63 72 61 66 74 2d    72 65 71 75 65 73 74 2d 61 6c 69 73 74 0a 20 20 | th2-auto--craft-request-alist... | 
| 57c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f | .............................pro | 
| 57e0 | 76 69 64 65 72 2d 69 6e 66 6f 20 64 61 74 61 2d    6b 65 79 73 20 76 65 72 79 2d 65 78 74 72 61 2d | vider-info.data-keys.very-extra- | 
| 5800 | 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 64 61 74 61 20 | alist))...................(data. | 
| 5820 | 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75 72    6c 69 66 79 2d 72 65 71 75 65 73 74 20 64 61 74 | (oauth2-auto--urlify-request.dat | 
| 5840 | 61 2d 61 6c 69 73 74 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c | a-alist))...................(url | 
| 5860 | 20 28 63 64 72 20 28 61 73 73 6f 63 20 75 72 6c    2d 6b 65 79 20 70 72 6f 76 69 64 65 72 2d 69 6e | .(cdr.(assoc.url-key.provider-in | 
| 5880 | 66 6f 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 61 75 74 68 2d 75 72 | fo)))...................(auth-ur | 
| 58a0 | 6c 20 28 63 6f 6e 63 61 74 20 75 72 6c 20 22 3f    22 20 64 61 74 61 29 29 29 0a 0a 20 20 20 20 20 | l.(concat.url."?".data)))....... | 
| 58c0 | 20 20 20 20 20 20 20 20 3b 3b 20 49 6e 73 74 65    61 64 20 6f 66 20 6f 70 65 6e 69 6e 67 20 62 72 | ........;;.Instead.of.opening.br | 
| 58e0 | 6f 77 73 65 72 2c 20 73 68 6f 77 20 55 52 4c 20    61 6e 64 20 77 61 69 74 20 66 6f 72 20 63 6f 64 | owser,.show.URL.and.wait.for.cod | 
| 5900 | 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28    75 6e 6c 65 73 73 20 71 75 69 65 74 0a 20 20 20 | e..............(unless.quiet.... | 
| 5920 | 20 20 20 20 20 20 20 20 20 20 20 20 28 61 6c 65    72 74 20 28 66 6f 72 6d 61 74 20 22 50 6c 65 61 | ............(alert.(format."Plea | 
| 5940 | 73 65 20 76 69 73 69 74 20 74 68 69 73 20 55 52    4c 20 74 6f 20 61 75 74 68 6f 72 69 7a 65 3a 5c | se.visit.this.URL.to.authorize:\ | 
| 5960 | 6e 25 73 5c 6e 5c 6e 41 66 74 65 72 20 61 75 74    68 6f 72 69 7a 61 74 69 6f 6e 2c 20 63 6f 70 79 | n%s\n\nAfter.authorization,.copy | 
| 5980 | 20 74 68 65 20 27 63 6f 64 65 27 20 70 61 72 61    6d 65 74 65 72 20 66 72 6f 6d 20 74 68 65 20 72 | .the.'code'.parameter.from.the.r | 
| 59a0 | 65 64 69 72 65 63 74 20 55 52 4c 20 61 6e 64 20    70 61 73 74 65 20 69 74 20 62 65 6c 6f 77 3a 22 | edirect.URL.and.paste.it.below:" | 
| 59c0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 | ...............................a | 
| 59e0 | 75 74 68 2d 75 72 6c 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a | uth-url).......................: | 
| 5a00 | 74 69 74 6c 65 20 22 45 6d 61 63 73 20 4f 41 75    74 68 32 20 6c 6f 67 69 6e 22 0a 20 20 20 20 20 | title."Emacs.OAuth2.login"...... | 
| 5a20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 63 61 74 65 67 6f 72 79 20 27 6f 61 75 74 | .................:category.'oaut | 
| 5a40 | 68 32 2d 61 75 74 6f 29 29 0a 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 57 61 69 74 20 | h2-auto))...............;;.Wait. | 
| 5a60 | 66 6f 72 20 75 73 65 72 20 74 6f 20 69 6e 70 75    74 20 74 68 65 20 63 6f 64 65 0a 20 20 20 20 20 | for.user.to.input.the.code...... | 
| 5a80 | 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63    6f 64 65 20 28 72 65 61 64 2d 73 74 72 69 6e 67 | ........(let.((code.(read-string | 
| 5aa0 | 20 28 66 6f 72 6d 61 74 20 22 50 6c 65 61 73 65    20 76 69 73 69 74 20 74 68 69 73 20 55 52 4c 20 | .(format."Please.visit.this.URL. | 
| 5ac0 | 74 6f 20 61 75 74 68 6f 72 69 7a 65 3a 5c 6e 25    73 5c 6e 5c 6e 41 66 74 65 72 20 61 75 74 68 6f | to.authorize:\n%s\n\nAfter.autho | 
| 5ae0 | 72 69 7a 61 74 69 6f 6e 2c 20 63 6f 70 79 20 74    68 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 | rization,.copy.the.code.from.the | 
| 5b00 | 20 72 65 64 69 72 65 63 74 20 55 52 4c 20 61 6e    64 20 70 61 73 74 65 20 69 74 20 68 65 72 65 2e | .redirect.URL.and.paste.it.here. | 
| 5b20 | 5c 6e 45 6e 74 65 72 20 61 75 74 68 6f 72 69 7a    61 74 69 6f 6e 20 63 6f 64 65 3a 20 22 20 61 75 | \nEnter.authorization.code:.".au | 
| 5b40 | 74 68 2d 75 72 6c 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3b 3b 20 72 65 74 | th-url))))................;;.ret | 
| 5b60 | 75 72 6e 20 74 68 65 20 72 65 73 70 6f 6e 73 65    2c 20 77 69 74 68 20 74 68 65 20 27 72 65 64 69 | urn.the.response,.with.the.'redi | 
| 5b80 | 72 65 63 74 5f 75 72 69 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 72 65 | rect_uri................(cons.re | 
| 5ba0 | 64 69 72 65 63 74 2d 75 72 69 2d 65 6c 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | direct-uri-elt.................. | 
| 5bc0 | 20 20 20 20 28 6c 69 73 74 20 28 63 6f 6e 73 20    27 63 6f 64 65 20 63 6f 64 65 29 0a 20 20 20 20 | ....(list.(cons.'code.code)..... | 
| 5be0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 73 20 27 72 65 | .......................(cons.'re | 
| 5c00 | 64 69 72 65 63 74 5f 75 72 69 20 72 65 64 69 72    65 63 74 2d 75 72 69 29 0a 20 20 20 20 20 20 20 | direct_uri.redirect-uri)........ | 
| 5c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 73 20 27 73 74 61 74 65 | ....................(cons.'state | 
| 5c40 | 20 28 63 64 72 20 28 61 73 73 6f 63 20 27 73 74    61 74 65 20 64 61 74 61 2d 61 6c 69 73 74 29 29 | .(cdr.(assoc.'state.data-alist)) | 
| 5c60 | 29 29 29 29 29 29 0a 0a 28 64 65 66 63 6f 6e 73    74 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 75 | ))))))..(defconst.oauth2-auto--u | 
| 5c80 | 72 6c 2d 75 6e 72 65 73 65 72 76 65 64 0a 20 20    22 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f | rl-unreserved..."abcdefghijklmno | 
| 5ca0 | 70 71 72 73 74 75 76 77 78 79 7a 41 42 43 44 45    46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 | pqrstuvwxyzABCDEFGHIJKLMNOPQRSTU | 
| 5cc0 | 56 57 58 59 30 31 32 33 34 35 36 37 38 39 2d 5f    22 0a 20 20 22 4c 69 73 74 20 6f 66 20 76 61 6c | VWXY0123456789-_"..."List.of.val | 
| 5ce0 | 69 64 20 6e 6f 6e 2d 70 61 64 64 69 6e 67 20 63    68 61 72 61 63 74 65 72 73 20 69 6e 20 42 61 73 | id.non-padding.characters.in.Bas | 
| 5d00 | 65 36 34 20 55 52 4c 20 65 6e 63 6f 64 65 64 20    73 74 72 69 6e 67 2e 22 29 0a 0a 28 64 65 66 75 | e64.URL.encoded.string.")..(defu | 
| 5d20 | 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 72    61 6e 64 6f 6d 2d 73 74 72 69 6e 67 20 28 6c 65 | n.oauth2-auto--random-string.(le | 
| 5d40 | 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 72    61 6e 64 6f 6d 20 73 74 72 69 6e 67 20 6f 66 20 | n)..."Return.a.random.string.of. | 
| 5d60 | 6c 65 6e 67 74 68 20 4c 45 4e 2e 0a 55 73 65 73    20 6f 6e 6c 79 20 63 68 61 72 61 63 74 65 72 73 | length.LEN..Uses.only.characters | 
| 5d80 | 20 76 61 6c 69 64 20 69 6e 20 74 68 65 20 6f 75    74 70 75 74 20 6f 66 20 60 62 61 73 65 36 34 75 | .valid.in.the.output.of.`base64u | 
| 5da0 | 72 6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67    27 2e 22 0a 20 20 3b 20 69 6e 73 70 69 72 65 64 | rl-encode-string'."...;.inspired | 
| 5dc0 | 20 62 79 20 68 74 74 70 3a 2f 2f 78 61 68 6c 65    65 2e 69 6e 66 6f 2f 65 6d 61 63 73 2f 65 6d 61 | .by.http://xahlee.info/emacs/ema | 
| 5de0 | 63 73 2f 65 6c 69 73 70 5f 69 6e 73 65 72 74 5f    72 61 6e 64 6f 6d 5f 6e 75 6d 62 65 72 5f 73 74 | cs/elisp_insert_random_number_st | 
| 5e00 | 72 69 6e 67 2e 68 74 6d 6c 0a 20 20 28 6c 65 74    20 28 28 72 61 6e 64 2d 6c 65 6e 20 28 6c 65 6e | ring.html...(let.((rand-len.(len | 
| 5e20 | 67 74 68 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d    2d 75 72 6c 2d 75 6e 72 65 73 65 72 76 65 64 29 | gth.oauth2-auto--url-unreserved) | 
| 5e40 | 29 29 0a 20 20 20 28 77 69 74 68 2d 74 65 6d 70    2d 62 75 66 66 65 72 0a 20 20 20 20 20 28 64 6f | ))....(with-temp-buffer......(do | 
| 5e60 | 74 69 6d 65 73 20 28 5f 6c 20 6c 65 6e 29 0a 20    20 20 20 20 20 20 28 69 6e 73 65 72 74 20 28 65 | times.(_l.len)........(insert.(e | 
| 5e80 | 6c 74 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d    75 72 6c 2d 75 6e 72 65 73 65 72 76 65 64 20 28 | lt.oauth2-auto--url-unreserved.( | 
| 5ea0 | 72 61 6e 64 6f 6d 20 72 61 6e 64 2d 6c 65 6e 29    29 29 29 0a 20 20 20 20 20 28 62 75 66 66 65 72 | random.rand-len))))......(buffer | 
| 5ec0 | 2d 73 74 72 69 6e 67 29 29 29 29 0a 0a 28 64 65    66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f 2d | -string))))..(defun.oauth2-auto- | 
| 5ee0 | 2d 62 61 73 65 36 34 75 72 6c 2d 65 6e 63 6f 64    65 2d 73 74 72 69 6e 67 20 28 73 74 72 69 6e 67 | -base64url-encode-string.(string | 
| 5f00 | 20 26 6f 70 74 69 6f 6e 61 6c 20 6e 6f 2d 70 61    64 29 0a 20 20 22 50 61 63 6b 61 67 65 2d 6c 6f | .&optional.no-pad)..."Package-lo | 
| 5f20 | 63 61 6c 20 76 65 72 73 69 6f 6e 20 6f 66 20 e2    80 98 62 61 73 65 36 34 75 72 6c 2d 65 6e 63 6f | cal.version.of....base64url-enco | 
| 5f40 | 64 65 2d 73 74 72 69 6e 67 e2 80 99 2e 0a 0a 42    61 73 65 36 34 75 72 6c 2d 65 6e 63 6f 64 65 20 | de-string......Base64url-encode. | 
| 5f60 | 53 54 52 49 4e 47 20 61 6e 64 20 72 65 74 75 72    6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 0a 4f | STRING.and.return.the.result...O | 
| 5f80 | 70 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 20 61    72 67 75 6d 65 6e 74 20 4e 4f 2d 50 41 44 20 6d | ptional.second.argument.NO-PAD.m | 
| 5fa0 | 65 61 6e 73 20 64 6f 20 6e 6f 74 20 61 64 64 20    70 61 64 64 69 6e 67 20 63 68 61 72 20 3d 2e 0a | eans.do.not.add.padding.char.=.. | 
| 5fc0 | 0a 54 68 69 73 20 70 72 6f 64 75 63 65 73 20 74    68 65 20 55 52 4c 20 76 61 72 69 61 6e 74 20 6f | .This.produces.the.URL.variant.o | 
| 5fe0 | 66 20 62 61 73 65 20 36 34 20 65 6e 63 6f 64 69    6e 67 20 64 65 66 69 6e 65 64 20 69 6e 20 52 46 | f.base.64.encoding.defined.in.RF | 
| 6000 | 43 20 34 36 34 38 2e 0a 0a 45 78 69 73 74 73 20    62 65 63 61 75 73 65 20 74 68 69 73 20 70 61 63 | C.4648...Exists.because.this.pac | 
| 6020 | 6b 61 67 65 20 69 73 20 63 6f 6d 70 61 74 69 62    6c 65 20 77 69 74 68 20 45 6d 61 63 73 20 32 36 | kage.is.compatible.with.Emacs.26 | 
| 6040 | 2e 31 2c 20 62 75 74 0a e2 80 98 62 61 73 65 36    34 75 72 6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 | .1,.but....base64url-encode-stri | 
| 6060 | 6e 67 e2 80 99 20 77 61 73 20 6f 6e 6c 79 20 61    64 64 65 64 20 69 6e 20 45 6d 61 63 73 20 32 37 | ng....was.only.added.in.Emacs.27 | 
| 6080 | 2e 31 2e 22 0a 20 20 28 69 66 20 28 66 62 6f 75    6e 64 70 20 27 62 61 73 65 36 34 75 72 6c 2d 65 | .1."...(if.(fboundp.'base64url-e | 
| 60a0 | 6e 63 6f 64 65 2d 73 74 72 69 6e 67 29 0a 20 20    20 20 20 20 3b 3b 20 55 73 65 20 66 75 6e 63 61 | ncode-string).......;;.Use.funca | 
| 60c0 | 6c 6c 20 74 6f 20 73 69 6c 65 6e 63 65 20 66 6c    79 63 68 65 63 6b 2e 0a 20 20 20 20 20 20 28 66 | ll.to.silence.flycheck........(f | 
| 60e0 | 75 6e 63 61 6c 6c 20 27 62 61 73 65 36 34 75 72    6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67 20 | uncall.'base64url-encode-string. | 
| 6100 | 73 74 72 69 6e 67 20 6e 6f 2d 70 61 64 29 0a 20    20 20 20 28 6c 65 74 2a 20 28 28 65 6e 63 20 28 | string.no-pad).....(let*.((enc.( | 
| 6120 | 62 61 73 65 36 34 2d 65 6e 63 6f 64 65 2d 73 74    72 69 6e 67 20 73 74 72 69 6e 67 20 74 29 29 0a | base64-encode-string.string.t)). | 
| 6140 | 20 20 20 20 20 20 20 20 20 20 20 28 65 6e 63 20    28 72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d | ...........(enc.(replace-regexp- | 
| 6160 | 69 6e 2d 73 74 72 69 6e 67 20 22 2b 22 20 22 2d    22 20 65 6e 63 29 29 0a 20 20 20 20 20 20 20 20 | in-string."+"."-".enc))......... | 
| 6180 | 20 20 20 28 65 6e 63 20 28 72 65 70 6c 61 63 65    2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e | ...(enc.(replace-regexp-in-strin | 
| 61a0 | 67 20 22 2f 22 20 22 5f 22 20 65 6e 63 29 29 29    0a 20 20 20 20 20 20 28 69 66 20 6e 6f 2d 70 61 | g."/"."_".enc))).......(if.no-pa | 
| 61c0 | 64 0a 20 20 20 20 20 20 20 20 20 20 28 72 65 70    6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 | d...........(replace-regexp-in-s | 
| 61e0 | 74 72 69 6e 67 20 22 3d 22 20 22 22 20 65 6e 63    29 0a 20 20 20 20 20 20 20 20 65 6e 63 29 29 29 | tring."="."".enc).........enc))) | 
| 6200 | 29 0a 0a 3b 3b 20 43 6f 6e 74 72 6f 6c 20 66 6c    6f 77 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 | )..;;.Control.flow.to.authentica | 
| 6220 | 74 65 20 63 6c 69 65 6e 74 20 74 6f 20 74 68 65    20 4f 41 75 74 68 32 20 70 72 6f 76 69 64 65 72 | te.client.to.the.OAuth2.provider | 
| 6240 | 73 0a 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 6f    61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72 65 | s...(aio-defun.oauth2-auto-refre | 
| 6260 | 73 68 2d 6f 72 2d 61 75 74 68 65 6e 74 69 63 61    74 65 20 28 75 73 65 72 6e 61 6d 65 20 70 72 6f | sh-or-authenticate.(username.pro | 
| 6280 | 76 69 64 65 72 20 70 6c 69 73 74 29 0a 20 20 22    54 72 79 20 74 6f 20 72 65 66 72 65 73 68 2c 20 | vider.plist)..."Try.to.refresh,. | 
| 62a0 | 61 6e 64 20 69 66 20 72 65 66 72 65 73 68 69 6e    67 20 66 61 69 6c 73 2c 20 61 75 74 68 65 6e 74 | and.if.refreshing.fails,.authent | 
| 62c0 | 69 63 61 74 65 2e 0a 46 6f 72 20 55 53 45 52 4e    41 4d 45 2c 20 50 52 4f 56 49 44 45 52 2c 20 61 | icate..For.USERNAME,.PROVIDER,.a | 
| 62e0 | 6e 64 20 50 4c 49 53 54 20 73 65 65 20 e2 80 98    6f 61 75 74 68 32 2d 61 75 74 6f 2d 72 65 66 72 | nd.PLIST.see....oauth2-auto-refr | 
| 6300 | 65 73 68 e2 80 99 2e 22 0a 20 20 28 6c 65 74 2a    20 28 28 70 72 6f 6d 69 73 65 20 28 6f 61 75 74 | esh...."...(let*.((promise.(oaut | 
| 6320 | 68 32 2d 61 75 74 6f 2d 72 65 66 72 65 73 68 20    75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 | h2-auto-refresh.username.provide | 
| 6340 | 72 20 70 6c 69 73 74 29 29 0a 20 20 20 20 20 20    20 20 20 28 72 65 73 75 6c 74 20 28 61 69 6f 2d | r.plist))..........(result.(aio- | 
| 6360 | 61 77 61 69 74 20 28 61 69 6f 2d 63 61 74 63 68    20 70 72 6f 6d 69 73 65 29 29 29 29 0a 20 20 20 | await.(aio-catch.promise)))).... | 
| 6380 | 20 28 69 66 20 28 65 71 20 28 63 61 72 20 72 65    73 75 6c 74 29 20 3a 73 75 63 63 65 73 73 29 0a | .(if.(eq.(car.result).:success). | 
| 63a0 | 20 20 20 20 20 20 20 20 3b 20 49 66 20 73 75 63    63 65 65 64 65 64 2c 20 72 65 74 75 72 6e 20 74 | ........;.If.succeeded,.return.t | 
| 63c0 | 68 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20    20 20 28 63 64 72 20 72 65 73 75 6c 74 29 0a 20 | he.result.........(cdr.result).. | 
| 63e0 | 20 20 20 20 20 3b 20 49 66 20 66 61 69 6c 65 64    2c 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 69 | .....;.If.failed,.authenticate.i | 
| 6400 | 6e 73 74 65 61 64 0a 20 20 20 20 20 20 28 61 69    6f 2d 61 77 61 69 74 20 28 6f 61 75 74 68 32 2d | nstead.......(aio-await.(oauth2- | 
| 6420 | 61 75 74 6f 2d 61 75 74 68 65 6e 74 69 63 61 74    65 20 75 73 65 72 6e 61 6d 65 20 70 72 6f 76 69 | auto-authenticate.username.provi | 
| 6440 | 64 65 72 29 29 29 29 29 0a 0a 28 61 69 6f 2d 64    65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75 74 6f | der)))))..(aio-defun.oauth2-auto | 
| 6460 | 2d 61 75 74 68 65 6e 74 69 63 61 74 65 20 28 75    73 65 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 | -authenticate.(username.provider | 
| 6480 | 29 0a 20 20 22 41 75 74 68 65 6e 74 69 63 61 74    65 73 20 55 53 45 52 4e 41 4d 45 20 75 73 69 6e | )..."Authenticates.USERNAME.usin | 
| 64a0 | 67 20 50 52 4f 56 49 44 45 52 20 61 6e 64 20 72    65 74 75 72 6e 73 20 61 20 70 6c 69 73 74 2e 22 | g.PROVIDER.and.returns.a.plist." | 
| 64c0 | 0a 20 20 28 6c 65 74 2a 20 28 28 73 74 61 74 65    20 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 72 | ...(let*.((state.(oauth2-auto--r | 
| 64e0 | 61 6e 64 6f 6d 2d 73 74 72 69 6e 67 20 38 29 29    0a 20 20 20 20 20 20 20 20 20 28 63 6f 64 65 2d | andom-string.8))..........(code- | 
| 6500 | 76 65 72 69 66 69 65 72 20 28 6f 61 75 74 68 32    2d 61 75 74 6f 2d 2d 72 61 6e 64 6f 6d 2d 73 74 | verifier.(oauth2-auto--random-st | 
| 6520 | 72 69 6e 67 20 34 33 29 29 0a 20 20 20 20 20 20    20 20 20 28 62 69 6e 61 72 79 2d 63 6f 64 65 2d | ring.43))..........(binary-code- | 
| 6540 | 63 68 61 6c 6c 65 6e 67 65 20 28 73 65 63 75 72    65 2d 68 61 73 68 20 27 73 68 61 32 35 36 20 63 | challenge.(secure-hash.'sha256.c | 
| 6560 | 6f 64 65 2d 76 65 72 69 66 69 65 72 20 6e 69 6c    20 6e 69 6c 20 74 29 29 0a 20 20 20 20 20 20 20 | ode-verifier.nil.nil.t))........ | 
| 6580 | 20 20 28 72 65 73 70 6f 6e 73 65 20 28 61 69 6f    2d 61 77 61 69 74 0a 20 20 20 20 20 20 20 20 20 | ..(response.(aio-await.......... | 
| 65a0 | 20 20 20 20 20 20 20 20 20 20 20 28 6f 61 75 74    68 32 2d 61 75 74 6f 2d 2d 62 72 6f 77 73 65 72 | ...........(oauth2-auto--browser | 
| 65c0 | 2d 72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 | -request......................pr | 
| 65e0 | 6f 76 69 64 65 72 20 27 61 75 74 68 6f 72 69 7a    65 5f 75 72 6c 0a 20 20 20 20 20 20 20 20 20 20 | ovider.'authorize_url........... | 
| 6600 | 20 20 20 20 20 20 20 20 20 20 20 27 28 63 6c 69    65 6e 74 5f 69 64 20 74 65 6e 61 6e 74 20 73 63 | ...........'(client_id.tenant.sc | 
| 6620 | 6f 70 65 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 60 28 28 6c 6f 67 | ope)......................`((log | 
| 6640 | 69 6e 5f 68 69 6e 74 20 2e 20 2c 75 73 65 72 6e    61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 | in_hint...,username)............ | 
| 6660 | 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73    70 6f 6e 73 65 5f 74 79 70 65 20 2e 20 22 63 6f | ............(response_type..."co | 
| 6680 | 64 65 22 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73 | de")........................(res | 
| 66a0 | 70 6f 6e 73 65 5f 6d 6f 64 65 20 2e 20 22 71 75    65 72 79 22 29 20 3b 3b 20 6d 69 63 72 6f 73 6f | ponse_mode..."query").;;.microso | 
| 66c0 | 66 74 2d 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | ft-only........................( | 
| 66e0 | 61 63 63 65 73 73 5f 74 79 70 65 20 2e 20 22 6f    66 66 6c 69 6e 65 22 29 20 3b 3b 20 67 6f 6f 67 | access_type..."offline").;;.goog | 
| 6700 | 6c 65 2d 6f 6e 6c 79 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | le-only........................( | 
| 6720 | 73 74 61 74 65 20 2e 20 2c 73 74 61 74 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | state...,state)................. | 
| 6740 | 20 20 20 20 20 20 20 28 63 6f 64 65 5f 63 68 61    6c 6c 65 6e 67 65 20 2e 20 2c 28 6f 61 75 74 68 | .......(code_challenge...,(oauth | 
| 6760 | 32 2d 61 75 74 6f 2d 2d 62 61 73 65 36 34 75 72    6c 2d 65 6e 63 6f 64 65 2d 73 74 72 69 6e 67 20 | 2-auto--base64url-encode-string. | 
| 6780 | 62 69 6e 61 72 79 2d 63 6f 64 65 2d 63 68 61 6c    6c 65 6e 67 65 20 74 29 29 0a 20 20 20 20 20 20 | binary-code-challenge.t))....... | 
| 67a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 63 6f 64 65 5f 63 68 61 6c 6c 65 6e 67 65 | .................(code_challenge | 
| 67c0 | 5f 6d 65 74 68 6f 64 20 2e 20 22 53 32 35 36 22    29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 | _method..."S256")))))..........( | 
| 67e0 | 72 65 73 70 6f 6e 73 65 2d 73 74 61 74 65 20 28    63 64 72 20 28 61 73 73 6f 63 20 27 73 74 61 74 | response-state.(cdr.(assoc.'stat | 
| 6800 | 65 20 72 65 73 70 6f 6e 73 65 29 29 29 0a 20 20    20 20 20 20 20 20 20 28 72 65 64 69 72 65 63 74 | e.response)))..........(redirect | 
| 6820 | 2d 75 72 69 20 28 63 64 72 20 28 61 73 73 6f 63    20 27 72 65 64 69 72 65 63 74 5f 75 72 69 20 72 | -uri.(cdr.(assoc.'redirect_uri.r | 
| 6840 | 65 73 70 6f 6e 73 65 29 29 29 0a 20 20 20 20 20    20 20 20 20 28 63 6f 64 65 20 28 63 64 72 20 28 | esponse)))..........(code.(cdr.( | 
| 6860 | 61 73 73 6f 63 20 27 63 6f 64 65 20 72 65 73 70    6f 6e 73 65 29 29 29 29 0a 0a 20 20 20 20 3b 20 | assoc.'code.response))))......;. | 
| 6880 | 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20    72 65 74 75 72 6e 20 73 74 61 74 65 20 6d 61 74 | Verify.that.the.return.state.mat | 
| 68a0 | 63 68 65 73 2e 0a 20 20 20 20 3b 20 68 74 74 70    73 3a 2f 2f 64 6f 63 73 2e 6d 69 63 72 6f 73 6f | ches......;.https://docs.microso | 
| 68c0 | 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 61 7a 75    72 65 2f 61 63 74 69 76 65 2d 64 69 72 65 63 74 | ft.com/en-us/azure/active-direct | 
| 68e0 | 6f 72 79 2f 64 65 76 65 6c 6f 70 2f 76 32 2d 6f    61 75 74 68 32 2d 61 75 74 68 2d 63 6f 64 65 2d | ory/develop/v2-oauth2-auth-code- | 
| 6900 | 66 6c 6f 77 23 73 75 63 63 65 73 73 66 75 6c 2d    72 65 73 70 6f 6e 73 65 0a 20 20 20 20 28 75 6e | flow#successful-response.....(un | 
| 6920 | 6c 65 73 73 20 28 65 71 75 61 6c 20 73 74 61 74    65 20 72 65 73 70 6f 6e 73 65 2d 73 74 61 74 65 | less.(equal.state.response-state | 
| 6940 | 29 0a 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20    20 20 20 20 20 20 22 53 74 61 74 65 20 73 65 6e | ).......(error........"State.sen | 
| 6960 | 74 20 61 6e 64 20 72 65 74 75 72 6e 65 64 20 64    6f 20 6e 6f 74 20 6d 61 74 63 68 20 2d 20 73 65 | t.and.returned.do.not.match.-.se | 
| 6980 | 63 75 72 69 74 79 20 72 69 73 6b 3a 20 73 74 61    74 65 3d 25 73 20 72 65 73 70 6f 6e 73 65 5f 73 | curity.risk:.state=%s.response_s | 
| 69a0 | 74 61 74 65 3d 25 73 22 0a 20 20 20 20 20 20 20    73 74 61 74 65 20 72 65 73 70 6f 6e 73 65 2d 73 | tate=%s"........state.response-s | 
| 69c0 | 74 61 74 65 29 29 0a 0a 20 20 20 20 28 6f 61 75    74 68 32 2d 61 75 74 6f 2d 2d 6d 61 6b 65 2d 70 | tate))......(oauth2-auto--make-p | 
| 69e0 | 6c 69 73 74 0a 20 20 20 20 20 28 61 69 6f 2d 61    77 61 69 74 0a 20 20 20 20 20 20 28 6f 61 75 74 | list......(aio-await.......(oaut | 
| 6a00 | 68 32 2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74    0a 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 | h2-auto--request........provider | 
| 6a20 | 20 27 74 6f 6b 65 6e 5f 75 72 6c 0a 20 20 20 20    20 20 20 27 28 63 6c 69 65 6e 74 5f 69 64 20 74 | .'token_url........'(client_id.t | 
| 6a40 | 65 6e 61 6e 74 20 63 6c 69 65 6e 74 5f 73 65 63    72 65 74 29 0a 20 20 20 20 20 20 20 60 28 28 72 | enant.client_secret)........`((r | 
| 6a60 | 65 64 69 72 65 63 74 5f 75 72 69 20 2e 20 2c 72    65 64 69 72 65 63 74 2d 75 72 69 29 0a 20 20 20 | edirect_uri...,redirect-uri).... | 
| 6a80 | 20 20 20 20 20 20 28 63 6f 64 65 20 2e 20 2c 63    6f 64 65 29 0a 20 20 20 20 20 20 20 20 20 28 67 | ......(code...,code)..........(g | 
| 6aa0 | 72 61 6e 74 5f 74 79 70 65 20 2e 20 22 61 75 74    68 6f 72 69 7a 61 74 69 6f 6e 5f 63 6f 64 65 22 | rant_type..."authorization_code" | 
| 6ac0 | 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f 64 65    5f 76 65 72 69 66 69 65 72 20 2e 20 2c 63 6f 64 | )..........(code_verifier...,cod | 
| 6ae0 | 65 2d 76 65 72 69 66 69 65 72 29 29 29 29 0a 20    20 20 20 20 6e 69 6c 29 29 29 0a 0a 28 61 69 6f | e-verifier))))......nil)))..(aio | 
| 6b00 | 2d 64 65 66 75 6e 20 6f 61 75 74 68 32 2d 61 75    74 6f 2d 72 65 66 72 65 73 68 20 28 5f 75 73 65 | -defun.oauth2-auto-refresh.(_use | 
| 6b20 | 72 6e 61 6d 65 20 70 72 6f 76 69 64 65 72 20 70    6c 69 73 74 29 0a 20 20 22 52 65 66 72 65 73 68 | rname.provider.plist)..."Refresh | 
| 6b40 | 20 61 63 63 65 73 73 20 6f 66 20 55 53 45 52 4e    41 4d 45 20 75 73 69 6e 67 20 50 52 4f 56 49 44 | .access.of.USERNAME.using.PROVID | 
| 6b60 | 45 52 20 75 73 69 6e 67 20 74 68 65 20 72 65 66    72 65 73 68 2d 74 6f 6b 65 6e 20 69 6e 20 50 4c | ER.using.the.refresh-token.in.PL | 
| 6b80 | 49 53 54 2e 0a 52 65 74 75 72 6e 20 74 68 65 20    72 65 66 72 65 73 68 65 64 20 70 6c 69 73 74 2e | IST..Return.the.refreshed.plist. | 
| 6ba0 | 22 0a 20 20 28 6c 65 74 20 28 28 72 65 66 72 65    73 68 2d 74 6f 6b 65 6e 20 28 70 6c 69 73 74 2d | "...(let.((refresh-token.(plist- | 
| 6bc0 | 67 65 74 20 70 6c 69 73 74 20 3a 72 65 66 72 65    73 68 2d 74 6f 6b 65 6e 29 29 29 0a 20 20 20 20 | get.plist.:refresh-token)))..... | 
| 6be0 | 28 75 6e 6c 65 73 73 20 72 65 66 72 65 73 68 2d    74 6f 6b 65 6e 0a 20 20 20 20 20 20 28 65 72 72 | (unless.refresh-token.......(err | 
| 6c00 | 6f 72 20 22 52 65 66 72 65 73 68 20 74 6f 6b 65    6e 20 69 73 20 6e 69 6c 20 69 6e 20 70 6c 69 73 | or."Refresh.token.is.nil.in.plis | 
| 6c20 | 74 3d 25 73 22 20 28 70 70 2d 74 6f 2d 73 74 72    69 6e 67 20 70 6c 69 73 74 29 29 29 0a 0a 20 20 | t=%s".(pp-to-string.plist))).... | 
| 6c40 | 20 20 3b 20 52 65 66 72 65 73 68 20 61 6e 20 6f    61 75 74 68 32 2d 74 6f 6b 65 6e 0a 20 20 20 20 | ..;.Refresh.an.oauth2-token..... | 
| 6c60 | 28 6f 61 75 74 68 32 2d 61 75 74 6f 2d 2d 6d 61    6b 65 2d 70 6c 69 73 74 0a 20 20 20 20 20 28 61 | (oauth2-auto--make-plist......(a | 
| 6c80 | 69 6f 2d 61 77 61 69 74 20 28 6f 61 75 74 68 32    2d 61 75 74 6f 2d 2d 72 65 71 75 65 73 74 0a 20 | io-await.(oauth2-auto--request.. | 
| 6ca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    70 72 6f 76 69 64 65 72 20 27 74 6f 6b 65 6e 5f | ................provider.'token_ | 
| 6cc0 | 75 72 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 27 28 63 6c 69 65 6e 74 5f 69 64 | url..................'(client_id | 
| 6ce0 | 20 74 65 6e 61 6e 74 20 63 6c 69 65 6e 74 5f 73    65 63 72 65 74 29 0a 20 20 20 20 20 20 20 20 20 | .tenant.client_secret).......... | 
| 6d00 | 20 20 20 20 20 20 20 20 60 28 28 72 65 66 72 65    73 68 5f 74 6f 6b 65 6e 20 2e 20 2c 72 65 66 72 | ........`((refresh_token...,refr | 
| 6d20 | 65 73 68 2d 74 6f 6b 65 6e 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 | esh-token)....................(g | 
| 6d40 | 72 61 6e 74 5f 74 79 70 65 20 2e 20 22 72 65 66    72 65 73 68 5f 74 6f 6b 65 6e 22 29 29 29 29 0a | rant_type..."refresh_token")))). | 
| 6d60 | 20 20 20 20 20 70 6c 69 73 74 29 29 29 0a 0a 28    70 72 6f 76 69 64 65 20 27 6f 61 75 74 68 32 2d | .....plist)))..(provide.'oauth2- | 
| 6d80 | 61 75 74 6f 29 0a 0a 3b 3b 3b 20 6f 61 75 74 68    32 2d 61 75 74 6f 2e 65 6c 20 65 6e 64 73 20 68 | auto)..;;;.oauth2-auto.el.ends.h | 
| 6da0 | 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ere............................. | 
| 6dc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6de0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6e00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6e20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6e40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6e60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6e80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6f00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6f20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 6fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7000 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7080 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 70a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 70c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 70e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7100 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 71a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 71c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 71e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7200 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7220 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7260 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7280 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 72a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 72c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 72e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7300 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 73a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 73c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 73e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7400 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7420 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7460 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7480 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 74a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 74c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 74e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7500 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7520 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 75a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 75c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 75e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7600 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7620 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7640 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 76a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 76c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 76e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 77a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 77c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 77e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |