Mercurial > cgi-bin > hgweb.cgi > PassMan
changeset 0:a6cfdffcaa94
Initial commit, incomplete but it runs sorta.
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,9 @@ +~$ +\.bak$ +\.class$ +\.dylib$ +\.o$ +^\.idea/ +^target/ +^out/ +^\#.*\#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PassMan.iml Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="kotlin-language" name="Kotlin"> + <configuration version="5" platform="JVM 1.8" allPlatforms="JVM [1.8]" useProjectSettings="false"> + <compilerSettings /> + <compilerArguments> + <stringArguments> + <stringArg name="jvmTarget" arg="1.8" /> + <stringArg name="apiVersion" arg="1.7" /> + <stringArg name="languageVersion" arg="1.7" /> + </stringArguments> + <arrayArguments> + <arrayArg name="pluginClasspaths" /> + <arrayArg name="pluginOptions" /> + </arrayArguments> + </compilerArguments> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/kotlin" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="library" scope="TEST" name="Maven: org.jetbrains.kotlin:kotlin-test-junit5:1.7.10" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.jetbrains.kotlin:kotlin-test:1.7.10" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.6.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.6.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.8.2" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.8.2" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.7.10" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10" level="project" /> + <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-reflect:1.7.10" level="project" /> + <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.36.0.3" level="project" /> + <orderEntry type="library" name="Maven: commons-cli:commons-cli:1.5.0" level="project" /> + </component> +</module> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/design.txt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,60 @@ +* First, decide that for some reason the standard pass password manager is + unacceptable. One reason may be the risk of compromise or bad commits + (by a hostile actor). Another may be matadata leakage: pass stores the + name of the (username, password) pair in plaintext. + + Regarding the latter, my ccrypt-based solution is better than that, and + it immediately struck me as a bad point. Was already thinking about what + I would do, and it involved sqlite with all fields except for time stamps + encrypted. + +* Using sqlite (sqlite3) and one of {Kotlin, Golang, Swift} (in rough order + of likelihood) would probably be the way to go. +* Use a table of the following form to store the passwords (call it passwords): + id integer not null primary key + name blob + username blob + password blob + notes blob (can be null) + created integer + modified integer + accessed (read) integer + + id will be the low 64 bits of the MD5 hash of the encrypted name + case-folded to lowercase (encrypt with a zero IV, don't prepend). + + all blobs will be AES-encrypted with prepended IV, a'la EncryptedProperties. + + timestamps are seconds or milliseconds since the epoch +* Use four other tables to store configuration parameters (as needed) + integers, reals, strings, blobs. + + Each will have an implicit rowid field, a string name field, and a + value field of type integer, real, text, or blob as appropriate. + + Probably only put those in the schema on an as-needed basis, i.e. + a reals table will only exist if we have configuration parameters +* Four major subcommands: create, read, update, delete. + + Error to create a password whose name (case insensitive) already exists. + + Error to read, update, or delete one whose name does not exist. + + Read should support a --like option to do inexact matching. If one + match, act much like read w/o --like. If multiple matches, just list + the names. + + Read should also support a --clip option that deposits the password + into the clipboard without printing it. + + Read should also support a --verbose or --long option that causes a + stanza-like, key: value dump of the full record. If --clip is used + along with --verbose, password prints as "(in clipboard)" + +* Use same password everywhere. + + Use a dummy config param to ensure correct password (attempt decrypt of + it first, write it base64'ed). + + Could theoretically use different p/w's for different rows, but causes + headaches matching names later, so avoid. + +* Misc: + + Include a password generator along the lines of genpass. + - This should be as a --generate option to the create and update + subcommands. + - --generate allows four other options: --length, --symbols, --clip, + --verbose. + - Default length should be 12 (default no symbols). + - If --clip supplied, copy new password to clipboard. + - If --verbose supplied, print new password. + - Default to be silent and not put password in clipboard, just change + in database. + + Command-line only, no GUI.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nyt.html Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,186 @@ +<!DOCTYPE html> +<html lang="en" class=" story nytapp-vi-article" xmlns:og="http://opengraphprotocol.org/schema/"> + <head> + <meta charset="utf-8" /> + <title data-rh="true">As More Vote by Mail, Faulty Ballots Could Impact Elections - The New York Times</title> + <meta data-rh="true" name="robots" content="noarchive, max-image-preview:large"/><meta data-rh="true" name="description" content="Nationwide, mailed ballots now account for nearly 20 percent of votes, yet such ballots are more likely to be compromised, and contested, than those cast in person, statistics show."/><meta data-rh="true" property="og:url" content="https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="og:title" content="Error and Fraud at Issue as Absentee Voting Rises (Published 2012)"/><meta data-rh="true" property="og:image" content="https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-articleLarge.jpg?year=2012&h=350&w=600&s=ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2&k=ZQJBKqZ0VN"/><meta data-rh="true" property="og:image:alt" content="An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting."/><meta data-rh="true" property="og:description" content="Nationwide, mailed ballots now account for nearly 20 percent of votes, yet such ballots are more likely to be compromised, and contested, than those cast in person, statistics show."/><meta data-rh="true" property="twitter:url" content="https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><meta data-rh="true" property="twitter:title" content="Error and Fraud at Issue as Absentee Voting Rises (Published 2012)"/><meta data-rh="true" property="twitter:description" content="Nationwide, mailed ballots now account for nearly 20 percent of votes, yet such ballots are more likely to be compromised, and contested, than those cast in person, statistics show."/><meta data-rh="true" property="twitter:image" content="https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-articleLarge.jpg?year=2012&h=350&w=600&s=ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2&k=ZQJBKqZ0VN&tw=1"/><meta data-rh="true" property="twitter:image:alt" content="An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting."/><meta data-rh="true" property="twitter:card" content="summary_large_image"/> <link data-rh="true" rel="canonical" href="https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><link data-rh="true" rel="alternate" href="nyt://article/85f0ce9d-c50a-5833-8f43-eaa4fd09f129"/><link data-rh="true" rel="alternate" type="application/json+oembed" href="https://www.nytimes.com/svc/oembed/json/?url=https%3A%2F%2Fwww.nytimes.com%2F2012%2F10%2F07%2Fus%2Fpolitics%2Fas-more-vote-by-mail-faulty-ballots-could-impact-elections.html" title="Error and Fraud at Issue as Absentee Voting Rises"/> <script data-rh="true" type="application/ld+json">{"@context":"http://schema.org","@type":"NewsArticle","description":"Nationwide, mailed ballots now account for nearly 20 percent of votes, yet such ballots are more likely to be compromised, and contested, than those cast in person, statistics show.","image":{"@context":"http://schema.org","@type":"ImageObject","url":"https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-superJumbo.jpg","height":1079,"width":1464,"caption":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting."},"mainEntityOfPage":"https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html","url":"https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html","author":[{"@context":"http://schema.org","@type":"Person","url":"https://www.nytimes.com/by/adam-liptak","name":"Adam Liptak"}],"dateModified":"2021-10-12T00:26:45.335Z","datePublished":"2012-10-07T03:10:09.000Z","headline":"As More Vote by Mail, Faulty Ballots Could Impact Elections","alternativeHeadline":"Error and Fraud at Issue as Absentee Voting Rises","publisher":{"@id":"https://www.nytimes.com/#publisher"},"copyrightHolder":{"@id":"https://www.nytimes.com/#publisher"},"sourceOrganization":{"@id":"https://www.nytimes.com/#publisher"},"copyrightYear":2022,"isAccessibleForFree":false,"hasPart":{"@type":"WebPageElement","isAccessibleForFree":false,"cssSelector":".meteredContent"},"isPartOf":{"@type":["CreativeWork","Product"],"name":"The New York Times","productID":"nytimes.com:basic"}}</script><script data-rh="true" type="application/ld+json">{"@context":"http://schema.org","@type":"NewsMediaOrganization","name":"The New York Times","logo":{"@context":"http://schema.org","@type":"ImageObject","url":"https://static01.nyt.com/images/misc/NYT_logo_rss_250x40.png","height":40,"width":250},"url":"https://www.nytimes.com/","@id":"https://www.nytimes.com/#publisher","diversityPolicy":"https://www.nytco.com/diversity-and-inclusion-at-the-new-york-times/","ethicsPolicy":"https://www.nytco.com/who-we-are/culture/standards-and-ethics/","masthead":"https://www.nytimes.com/interactive/2020/09/08/admin/the-new-york-times-masthead.html","foundingDate":"1851-09-18","sameAs":"https://en.wikipedia.org/wiki/The_New_York_Times"}</script><script data-rh="true" type="application/ld+json">{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@context":"http://schema.org","@type":"ListItem","name":"U.S.","position":1,"item":"https://www.nytimes.com/section/us"},{"@context":"http://schema.org","@type":"ListItem","name":"Politics","position":2,"item":"https://www.nytimes.com/section/politics"}]}</script> + <meta data-rh="true" property="article:published_time" content="2012-10-07T03:10:09.000Z"/><meta data-rh="true" property="article:modified_time" content="2021-10-12T00:26:45.335Z"/><meta data-rh="true" http-equiv="Content-Language" content="en"/><meta data-rh="true" name="articleid" content="100000001830255"/><meta data-rh="true" name="nyt_uri" content="nyt://article/85f0ce9d-c50a-5833-8f43-eaa4fd09f129"/><meta data-rh="true" name="pubp_event_id" content="pubp://event/fb2fd2461fb84214a4f7977e977f12d5"/><meta data-rh="true" name="image" content="https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-articleLarge.jpg?year=2012&h=350&w=600&s=ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2&k=ZQJBKqZ0VN"/><meta data-rh="true" name="byl" content="By Adam Liptak"/><meta data-rh="true" name="news_keywords" content="Absentee voting;Vote-by-mail;Early Voting,Fraud,Voter registration,2012 Presidential Election,None"/><meta data-rh="true" name="pdate" content="20121006"/><meta data-rh="true" property="article:section" content="U.S."/><meta data-rh="true" property="article:tag" content="Absentee Voting"/><meta data-rh="true" property="article:tag" content="Frauds and Swindling"/><meta data-rh="true" property="article:tag" content="Voter Registration and Requirements"/><meta data-rh="true" property="article:tag" content="Presidential Election of 2012"/><meta data-rh="true" property="article:tag" content="Series"/><meta data-rh="true" property="article:opinion" content="false"/><meta data-rh="true" property="article:content_tier" content="metered"/><meta data-rh="true" name="CG" content="us"/><meta data-rh="true" name="SCG" content="politics"/><meta data-rh="true" name="CN" content=""/><meta data-rh="true" name="CT" content=""/><meta data-rh="true" name="PT" content="article"/><meta data-rh="true" name="PST" content="News"/><meta data-rh="true" name="url" content="https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><meta data-rh="true" name="msapplication-starturl" content="https://www.nytimes.com"/><meta data-rh="true" property="al:android:url" content="nyt://article/85f0ce9d-c50a-5833-8f43-eaa4fd09f129"/><meta data-rh="true" property="al:android:package" content="com.nytimes.android"/><meta data-rh="true" property="al:android:app_name" content="NYTimes"/><meta data-rh="true" name="twitter:app:name:googleplay" content="NYTimes"/><meta data-rh="true" name="twitter:app:id:googleplay" content="com.nytimes.android"/><meta data-rh="true" name="twitter:app:url:googleplay" content="nyt://article/85f0ce9d-c50a-5833-8f43-eaa4fd09f129"/><meta data-rh="true" property="al:iphone:url" content="nytimes://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><meta data-rh="true" property="al:iphone:app_store_id" content="284862083"/><meta data-rh="true" property="al:iphone:app_name" content="NYTimes"/><meta data-rh="true" property="al:ipad:url" content="nytimes://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html"/><meta data-rh="true" property="al:ipad:app_store_id" content="357066198"/><meta data-rh="true" property="al:ipad:app_name" content="NYTimes"/> + +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<meta property="fb:app_id" content="9869919170" /> +<meta name="twitter:site" content="@nytimes" /> +<meta name="slack-app-id" content="A0121HXPPTQ" /> + + <script> + const override = (new URL(window.location)).searchParams.get('sentryOverride'); + if (override || Math.floor(Math.random() * 100) <= 1) { + document.write('<script src="https://js.sentry-cdn.com/7bc8bccf5c254286a99b11c68f6bf4ce.min.js" crossorigin="anonymous">' + '<' + '/script>'); + } + </script> + <script> + + if (window.Sentry) { + window.Sentry.onLoad(function() { + window.Sentry.init({ + maxBreadcrumbs: 30, + release: 'b7473876f987234cda2bd0ff7906c796093cecdc', + environment: 'prd', + beforeSend: function(e, v) { + if (/amazon-adsystem|ads-us|ampproject|amp4ads|pubads|2mdn|chartbeat|gsi|bk_addPageCtx|yimg|BOOMR|boomerang/.test(v.originalException && v.originalException.stack || '')) return null; + return e; + } + }); + }); + } + </script> + + + <link data-rh="true" rel="shortcut icon" href="/vi-assets/static-assets/favicon-d2483f10ef688e6f89e23806b9700298.ico"/><link data-rh="true" rel="apple-touch-icon" href="/vi-assets/static-assets/apple-touch-icon-28865b72953380a40aa43318108876cb.png"/><link data-rh="true" rel="apple-touch-icon-precomposed" sizes="144×144" href="/vi-assets/static-assets/ios-ipad-144x144-28865b72953380a40aa43318108876cb.png"/><link data-rh="true" rel="apple-touch-icon-precomposed" sizes="114×114" href="/vi-assets/static-assets/ios-iphone-114x144-080e7ec6514fdc62bcbb7966d9b257d2.png"/><link data-rh="true" rel="apple-touch-icon-precomposed" href="/vi-assets/static-assets/ios-default-homescreen-57x57-43808a4cd5333b648057a01624d84960.png"/> + <link href="https://g1.nyt.com/fonts/css/web-fonts.d05a02583ca20b8afd5115f3ef8f1b8d134f743d.css" rel="stylesheet" type="text/css" /> + <link rel="stylesheet" href="/vi-assets/static-assets/global-f449cfd9976ad673ef2b7ab5098b85be.css" /> + <style>[data-timezone] { display: none }</style> + <style data-lights-css="1dv1kvn k008qs 1hyfx7x nuvmzp 9e9ivx hnzl8o 6n7j50 1kj7lfb 1p66nw2 129gw94 1fe7a5q 1f8er69 10488qs 1e1s8k7 15uy5yv jq1cx6 yywogo vxcmzt 113xjf1 1baulvz 1sirvy4 1xlo06v 79elbk 1uhsiac 1ch24e9 1n1thlk 1w019mi 4m7ryc q1aqo6 1yccqtv 1tel06d 12fr9lp 18z7m18 1aor85t 1hqnpie epjblv fwqvlz 1u4hfeb x15j1o tvohiw 1iwv8en 1n6z4y 1ly73wi rfqw0c 19vbshk l9onyx 1r2mflq 1whphny z3e15g bsn42l sklrp3 1xhl2m 1izowsy 5nx6oe 1bgal8l 8k1w72 t4350i 1r7ky0e ew4tgv s99gbd 53u6y8 9tf9ac 1q2w90k 1bymuyk ui9rw0 1f7ibof fzvsed 123u7tk tkwi90 10698na nhjhh0 y3sf94 ni9it0 e1ifge 1r0gz1j 1o0kkht 1bvtpon 4skfbu 9eyi4s 1wb2lb 1ui00vj swbuts 1vxca1d z1t82k 11kk65x 1vkm6nb 1icycqh pga13o 6yj280 8qgvsz xt80pu 1e2jphy 233int 4anu6l 1u1psjv ccw2r3 1z1nqv rq4mmj y5g5d7 1u46b97 at9mc1 2fttua 1ho5u4o 13o0c9t a7htku 1wr3we4 1wa6gzb 1a48zt4 1a1lp8y jevhma n8ff4n 1pv2nfg 1f3mpp5 name 5j8bii duration delay timing-function">@-webkit-keyframes animation-5j8bii{from{opacity:0;}to{opacity:1;}}@keyframes animation-5j8bii{from{opacity:0;}to{opacity:1;}}.css-1dv1kvn{border:0;-webkit-clip:rect(0 0 0 0);clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;}.css-k008qs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.css-1hyfx7x{display:none;}.css-nuvmzp{font-size:14.25px;font-family:nyt-franklin,helvetica,arial,sans-serif;font-weight:700;text-transform:uppercase;-webkit-letter-spacing:0.7px;-moz-letter-spacing:0.7px;-ms-letter-spacing:0.7px;letter-spacing:0.7px;line-height:19px;}.css-nuvmzp:hover{-webkit-text-decoration:underline;text-decoration:underline;}.css-9e9ivx{display:none;font-size:10px;margin-left:auto;text-transform:uppercase;}.hasLinks .css-9e9ivx{display:block;}@media (min-width:740px){.hasLinks .css-9e9ivx{margin:none;position:absolute;right:20px;}}@media (min-width:1024px){.hasLinks .css-9e9ivx{display:none;}}.css-hnzl8o{display:inline-block;font-size:12px;-webkit-transition:color 0.6s ease;transition:color 0.6s ease;color:#121212;}.css-hnzl8o:hover{color:#666;}.css-6n7j50{display:inline;}.css-1kj7lfb{display:none;}@media (min-width:1024px){.css-1kj7lfb{display:inline-block;margin-right:7px;}}.css-1p66nw2{display:block;width:24px;height:24px;}.css-129gw94{line-height:0;}.css-1fe7a5q{display:inline-block;height:16px;vertical-align:sub;width:16px;}.css-1f8er69{border:0;-webkit-clip:rect(0 0 0 0);clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;border-radius:3px;cursor:pointer;font-family:nyt-franklin,helvetica,arial,sans-serif;-webkit-transition:ease 0.6s;transition:ease 0.6s;white-space:nowrap;vertical-align:middle;background-color:transparent;color:#000;font-size:11px;line-height:11px;font-weight:700;-webkit-letter-spacing:0.02em;-moz-letter-spacing:0.02em;-ms-letter-spacing:0.02em;letter-spacing:0.02em;padding:11px 12px 8px;background:#fff;display:inline-block;left:44px;text-transform:uppercase;-webkit-transition:none;transition:none;}.css-1f8er69:active,.css-1f8er69:focus{-webkit-clip:auto;clip:auto;overflow:visible;width:auto;height:auto;}.css-1f8er69::-moz-focus-inner{padding:0;border:0;}.css-1f8er69:-moz-focusring{outline:1px dotted;}.css-1f8er69:disabled,.css-1f8er69.disabled{opacity:0.5;cursor:default;}.css-1f8er69:active,.css-1f8er69.active{background-color:#f7f7f7;}@media (min-width:740px){.css-1f8er69:hover{background-color:#f7f7f7;}}.css-1f8er69:focus{margin-top:3px;padding:8px 8px 6px;}@media (min-width:1024px){.css-1f8er69{left:112px;}}.css-10488qs{display:none;}@media (min-width:1024px){.css-10488qs{display:inline-block;position:relative;}}.css-1e1s8k7{font-size:11px;text-align:center;padding-bottom:25px;}@media (min-width:1024px){.css-1e1s8k7{padding:0 3% 9px;}}.css-1e1s8k7.dockVisible{padding-bottom:45px;}@media (min-width:1024px){.css-1e1s8k7.dockVisible{padding:0 3% 45px;}}@media (min-width:1150px){.css-1e1s8k7{margin:0 auto;max-width:1200px;}}.NYTApp .css-1e1s8k7{display:none;}@media print{.css-1e1s8k7{display:none;}}.css-15uy5yv{border-top:1px solid #ebebeb;padding-top:9px;}.css-jq1cx6{color:#666;font-family:nyt-franklin,helvetica,arial,sans-serif;padding:10px 0;-webkit-text-decoration:none;text-decoration:none;white-space:nowrap;}.css-jq1cx6:hover{-webkit-text-decoration:underline;text-decoration:underline;}.css-yywogo{color:var(--color-signal-editorial,#326891);}.css-yywogo:visited{color:var(--color-signal-editorial,#326891);}.css-vxcmzt{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}.css-113xjf1{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:top;}.css-1baulvz{display:inline-block;}.css-1sirvy4{padding:0;margin-left:0;margin-right:0;}@media (max-width:420px){.css-1sirvy4{margin-left:-9px;margin-right:-10px;}}.css-1xlo06v{color:#999;display:inline;margin-right:12px;width:100%;}@media (max-width:420px){.css-1xlo06v{margin-right:6px;}}.css-1xlo06v > a,.css-1xlo06v > button{-webkit-text-decoration:none;text-decoration:none;}.css-1xlo06v > a:focus,.css-1xlo06v > button:focus{display:inline-block;outline:none;box-shadow:0 0 2px 1px rgb(0 95 204);}@supports selector(:focus-visible){.css-1xlo06v > a:focus,.css-1xlo06v > button:focus{box-shadow:none;}.css-1xlo06v > a:focus-visible,.css-1xlo06v > button:focus-visible{box-shadow:0 0 2px 1px rgb(0 95 204);}}.css-1xlo06v > a:focus{border-radius:100%;}.css-1xlo06v:last-of-type{margin-right:0;}.css-79elbk{position:relative;}.css-1uhsiac{height:auto;width:auto;border-radius:100%;background-color:transparent;}.css-1uhsiac:focus{outline:none;box-shadow:0 0 2px 1px rgb(0 95 204);}@supports selector(:focus-visible){.css-1uhsiac:focus{box-shadow:none;}.css-1uhsiac:focus-visible{box-shadow:0 0 2px 1px rgb(0 95 204);}}.css-1ch24e9#ap-gift-article-tooltip{display:none;width:215px;position:absolute;background-color:#000;border:1px solid #000;box-shadow:0 1px 3px rgba(0,0,0,0.15);border-radius:4px;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:0.75rem;line-height:1rem;color:#121212;box-sizing:border-box;top:38px;left:2px;z-index:199;}.css-1ch24e9#ap-gift-article-tooltip button{width:10px;position:absolute;right:9px;top:9px;background:transparent;}.css-1ch24e9#ap-gift-article-tooltip svg{stroke:#fff;}@media (max-width:600px){.css-1ch24e9#ap-gift-article-tooltip{left:-9px;}}#ap-gift-article-tooltip .css-1n1thlk{border:9px inset transparent;display:inline-block;height:0;position:absolute;width:0;border-bottom:12px solid #000;left:4%;top:-21px;}@media (max-width:600px){#ap-gift-article-tooltip .css-1n1thlk{left:8%;}}#ap-gift-article-tooltip .css-1w019mi{border:10px inset transparent;display:inline-block;height:0;position:absolute;width:0;border-bottom:14px solid #000;bottom:-15px;left:-10px;}@media (min-width:1150px){#ap-gift-article-tooltip .css-1w019mi{border-bottom:14px solid #000;}}#ap-gift-article .css-4m7ryc,#ap-gift-article-tooltip .css-4m7ryc{font-size:0.75rem;line-height:1.0625rem;}#ap-gift-article .css-4m7ryc strong,#ap-gift-article-tooltip .css-4m7ryc strong{font-weight:700;}.css-q1aqo6{height:auto;width:auto;border-radius:30px;background-color:transparent;}.css-q1aqo6:focus{outline:none;box-shadow:0 0 4px 1px rgb(0 95 204);}@supports selector(:focus-visible){.css-q1aqo6:focus{box-shadow:none;}.css-q1aqo6:focus-visible{box-shadow:0 0 4px 1px rgb(0 95 204);}}.css-1yccqtv{height:auto;width:auto;border:solid 1px #dfdfdf;background-color:#fff;border-radius:100%;}.css-1yccqtv:hover{background-color:#ebebeb;border:1px solid #ebebeb;}.css-1yccqtv .hiddenClass{display:none;}.css-1tel06d{display:none;}@media (min-width:740px){.css-1tel06d{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:16px;height:31px;}}@media (min-width:1024px){.css-1tel06d{display:none;}}@media print{.css-1tel06d{display:none;}}.css-12fr9lp{height:23px;margin-top:6px;}.css-18z7m18{display:none;}@media (min-width:1024px){.css-18z7m18{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:0;}}@media print{.css-18z7m18{display:block;}}.css-1aor85t{display:none;}@media (min-width:740px){.css-1aor85t{position:fixed;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;opacity:0;z-index:1;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;width:100%;height:32.063px;background:white;padding:5px 0;top:0;text-align:center;font-family:nyt-cheltenham,georgia,'times new roman',times,serif;box-shadow:rgba(0,0,0,0.08) 0 0 5px 1px;border-bottom:1px solid #e2e2e2;}}@media print{.css-1aor85t{position:relative;border:none;display:inline-block;opacity:1 !important;visibility:visible !important;}}.css-1hqnpie{margin-left:20px;margin-right:20px;max-width:1605px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;position:relative;width:100%;}@media (min-width:1360px){.css-1hqnpie{margin-left:20px;margin-right:20px;}}@media (min-width:1780px){.css-1hqnpie{margin-left:auto;margin-right:auto;}}@media print{.css-1hqnpie{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-epjblv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;max-width:1605px;overflow:hidden;position:absolute;width:56%;margin-left:calc((100% - 56%) / 2);}@media (min-width:1024px){.css-epjblv{width:53%;margin-left:calc((100% - 53%) / 2);}}@media print{.css-epjblv{display:none;}}.css-fwqvlz{font-family:nyt-cheltenham-small,georgia,'times new roman';font-weight:400;font-size:13px;-webkit-letter-spacing:0.015em;-moz-letter-spacing:0.015em;-ms-letter-spacing:0.015em;letter-spacing:0.015em;margin-top:10.5px;margin-right:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.css-1u4hfeb{font-family:nyt-franklin,helvetica,arial,sans-serif;font-weight:700;font-size:0.75rem;text-transform:uppercase;-webkit-letter-spacing:0;-moz-letter-spacing:0;-ms-letter-spacing:0;letter-spacing:0;margin-top:12.5px;margin-bottom:auto;margin-left:auto;white-space:nowrap;}.css-1u4hfeb:hover{-webkit-text-decoration:underline;text-decoration:underline;}.css-x15j1o{display:inline-block;padding-left:7px;padding-right:7px;font-size:13px;margin-top:10px;margin-bottom:auto;color:#ccc;}.css-tvohiw{margin-top:-1px;margin-bottom:auto;margin-left:auto;z-index:50;box-shadow:-14px 2px 7px -2px rgba(255,255,255,0.7);}@media (min-width:740px){.css-1iwv8en{margin-top:1px;}}@media (min-width:1024px){.css-1iwv8en{margin-top:0;}}.css-1n6z4y{font-family:nyt-franklin,helvetica,arial,sans-serif;color:#ccc !important;border-left:1px solid #ccc;margin-left:10px;padding:10px;display:none;}@media print{.css-1n6z4y{display:inline-block;}}.css-1ly73wi{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;-webkit-clip:rect(0 0 0 0);clip:rect(0 0 0 0);overflow:hidden;}.css-rfqw0c{text-align:center;height:100%;display:block;}.css-19vbshk{color:#ccc;display:none;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:0.5625rem;font-weight:300;-webkit-letter-spacing:0.05rem;-moz-letter-spacing:0.05rem;-ms-letter-spacing:0.05rem;letter-spacing:0.05rem;line-height:0.5625rem;margin-left:auto;text-align:center;text-transform:uppercase;}@media (min-width:600px){.css-19vbshk{display:inline-block;}}.css-19vbshk p{margin-bottom:auto;margin-right:7px;margin-top:auto;text-transform:none;}.css-l9onyx{color:#ccc;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:0.5625rem;font-weight:300;-webkit-letter-spacing:0.05rem;-moz-letter-spacing:0.05rem;-ms-letter-spacing:0.05rem;letter-spacing:0.05rem;line-height:0.5625rem;margin-bottom:9px;text-align:center;text-transform:uppercase;}.css-1r2mflq{top:0;position:-webkit-sticky;position:sticky;background-color:var(--color-background-elevated,#FFFFFF);z-index:902;}@media print{.css-1r2mflq{display:none;}}@media (min-width:1024px){.css-1r2mflq{margin-top:3px;}}.css-1whphny{width:100%;background-color:var(--color-background-secondary,#F8F8F8);}.css-z3e15g{position:fixed;opacity:0;-webkit-scroll-events:none;-moz-scroll-events:none;-ms-scroll-events:none;scroll-events:none;top:0;left:0;bottom:0;right:0;-webkit-transition:opacity 0.2s;transition:opacity 0.2s;background-color:#fff;pointer-events:none;}.sizeSmall .css-bsn42l{width:50%;}@media (min-width:600px){.sizeSmall .css-bsn42l{width:300px;}}@media (min-width:1440px){.sizeSmall .css-bsn42l{width:300px;}}@media (max-width:600px){.sizeSmall .css-bsn42l{width:50%;}}.sizeSmall.sizeSmallNoCaption .css-bsn42l{margin-left:auto;margin-right:auto;}@media (min-width:740px){.sizeSmall.layoutVertical .css-bsn42l{max-width:250px;}}@media (min-width:1024px){.sizeSmall.layoutVertical .css-bsn42l{width:250px;}}@media (max-width:740px){.sizeSmall.layoutVertical .css-bsn42l{max-width:250px;}}@media (min-width:740px){.sizeSmall.layoutHorizontal .css-bsn42l{max-width:300px;}}@media (min-width:1024px){.sizeSmall.layoutHorizontal .css-bsn42l{width:300px;}}@media (max-width:740px){.sizeSmall.layoutHorizontal .css-bsn42l{max-width:300px;}}@media (min-width:600px){.sizeMedium.layoutVertical.verticalVideo .css-bsn42l{width:310px;}}.css-sklrp3{margin:28px 0;}@media (min-width:600px){.css-1xhl2m{border-top:1px solid rgba(255,255,255,0.33);padding-top:24px;}}.css-1izowsy{width:100%;height:100%;max-height:150px;position:absolute;z-index:1;left:0;right:0;bottom:0;background:linear-gradient( transparent,rgba(0,0,0,0.7) );}@media (max-width:600px){.css-1izowsy{background:linear-gradient( transparent,rgba(0,0,0,0.7) );}}.css-5nx6oe{position:absolute;width:90%;bottom:51px;z-index:2;left:0;right:0;margin:auto;}@media (max-width:600px){.css-5nx6oe{bottom:45px;}}.css-1bgal8l{color:#FFFFFF;font-family:nyt-cheltenham,georgia,'times new roman',times,serif;font-size:1.375rem;line-height:1.5rem;font-weight:500;margin-bottom:12px;-webkit-font-smoothing:antialiased;}@media (min-width:740px){.css-1bgal8l{font-size:1.5rem;line-height:1.75rem;margin-bottom:19px;}}.css-8k1w72{font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:0.8125rem;line-height:0.8125rem;color:#FFFFFF;font-weight:500;display:inline-block;padding-right:0.75rem;vertical-align:middle;position:relative;-webkit-letter-spacing:0.03em;-moz-letter-spacing:0.03em;-ms-letter-spacing:0.03em;letter-spacing:0.03em;}.css-8k1w72:first-child{background-image:url('/vi-assets/static-assets/icon-slideshow-47beff4d2fe2169a60e0c3f92e469bc9.svg');background-repeat:no-repeat;display:inline-block;width:24px;height:20px;}@media (min-width:740px){.css-8k1w72:first-child{width:30px;height:25px;font-size:0.9375rem;line-height:0.9375rem;}}.css-8k1w72:last-child{border-left:1px solid rgba(255,255,255,0.33);padding-left:0.75rem;}.css-t4350i{font-size:1rem;vertical-align:middle;position:absolute;right:4px;bottom:0;-webkit-transition:right 0.18s ease-out;transition:right 0.18s ease-out;}.css-1r7ky0e .e6idgb70 + .e1h9rw200{margin-top:0;}.css-1r7ky0e .eoo0vm40 + .e1gnsphs0{margin-top:-0.3em;}.css-1r7ky0e .e6idgb70 + .eoo0vm40{margin-top:0;}.css-1r7ky0e .eoo0vm40 + figure{margin-top:1.2rem;}.css-1r7ky0e .e1gnsphs0 + figure{margin-top:1.2rem;}.css-ew4tgv{display:none;}@media (min-width:1024px){.css-ew4tgv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:0;margin-left:auto;width:130px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}@media (min-width:1150px){.css-ew4tgv{width:210px;}}@media print{.css-ew4tgv{display:none;}}.css-s99gbd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-bottom:1rem;}@media (min-width:1024px){.css-s99gbd{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;height:100%;width:945px;margin-left:auto;margin-right:auto;}}@media (min-width:1150px){.css-s99gbd{width:1110px;margin-left:auto;margin-right:auto;}}@media (min-width:1280px){.css-s99gbd{width:1170px;}}@media (min-width:1440px){.css-s99gbd{width:1200px;}}@media print{.css-s99gbd{margin-left:0;margin-right:0;width:100%;max-width:100%;}}@media print{.css-s99gbd{margin-bottom:1em;display:block;}}.css-53u6y8{margin-left:auto;margin-right:auto;width:100%;}@media (min-width:1024px){.css-53u6y8{margin-left:calc((100% - 600px) / 2);margin-right:0;width:600px;}}@media (min-width:1440px){.css-53u6y8{max-width:600px;width:600px;margin-left:calc((100% - 600px) / 2);}}@media print{.css-53u6y8{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-9tf9ac{margin-bottom:1em;}.css-1q2w90k{opacity:1;visibility:visible;-webkit-animation-name:animation-5j8bii;animation-name:animation-5j8bii;-webkit-animation-duration:300ms;animation-duration:300ms;-webkit-animation-delay:0ms;animation-delay:0ms;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;}@media print{.css-1q2w90k{display:none;}}@media (min-width:1024px){.css-1q2w90k{position:fixed;width:100%;top:0;left:0;z-index:200;background-color:#fff;border-bottom:none;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;}}@media (min-width:1024px){.css-1bymuyk{position:relative;border-bottom:1px solid #e2e2e2;}}.css-ui9rw0{background:#fff;border-bottom:1px solid #e2e2e2;height:36px;padding:8px 15px 3px;position:relative;}@media (min-width:740px){.css-ui9rw0{background:#fff;padding:10px 15px 6px;}}@media (min-width:1024px){.css-ui9rw0{background:transparent;border-bottom:0;padding:4px 15px 2px;}}@media (min-width:1024px){.css-ui9rw0{margin:0 auto;max-width:1605px;}}.css-1f7ibof{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-around;-webkit-justify-content:space-around;-ms-flex-pack:space-around;justify-content:space-around;left:10px;position:absolute;}@media print{.css-1f7ibof{display:none;}}.css-fzvsed{border-radius:3px;cursor:pointer;font-family:nyt-franklin,helvetica,arial,sans-serif;-webkit-transition:ease 0.6s;transition:ease 0.6s;white-space:nowrap;vertical-align:middle;background-color:transparent;color:#000;font-size:11px;line-height:11px;font-weight:700;-webkit-letter-spacing:0.02em;-moz-letter-spacing:0.02em;-ms-letter-spacing:0.02em;letter-spacing:0.02em;padding:11px 12px 8px;border:0;padding:8px 9px;text-transform:uppercase;}.css-fzvsed.hidden{opacity:0;visibility:hidden;}.css-fzvsed.hidden:focus{opacity:1;}.css-fzvsed::-moz-focus-inner{padding:0;border:0;}.css-fzvsed:-moz-focusring{outline:1px dotted;}.css-fzvsed:disabled,.css-fzvsed.disabled{opacity:0.5;cursor:default;}.css-fzvsed:active,.css-fzvsed.active{background-color:#f7f7f7;}@media (min-width:740px){.css-fzvsed:hover{background-color:#f7f7f7;}}@media (min-width:1024px){.css-fzvsed{display:none;}}.css-123u7tk{border-radius:3px;cursor:pointer;font-family:nyt-franklin,helvetica,arial,sans-serif;-webkit-transition:ease 0.6s;transition:ease 0.6s;white-space:nowrap;vertical-align:middle;background-color:#fff;border:1px solid #ebebeb;color:#333;font-size:11px;line-height:11px;font-weight:500;-webkit-letter-spacing:0.02em;-moz-letter-spacing:0.02em;-ms-letter-spacing:0.02em;letter-spacing:0.02em;padding:11px 12px 8px;text-transform:uppercase;display:none;padding:8px 9px 9px;}.css-123u7tk::-moz-focus-inner{padding:0;border:0;}.css-123u7tk:-moz-focusring{outline:1px dotted;}.css-123u7tk:disabled,.css-123u7tk.disabled{opacity:0.5;cursor:default;}.css-123u7tk:active,.css-123u7tk.active{background-color:#f7f7f7;}@media (min-width:740px){.css-123u7tk:hover{background-color:#f7f7f7;}}@media (min-width:1024px){.css-123u7tk{border:0;display:inline-block;margin-right:8px;}}.css-tkwi90{border-radius:3px;cursor:pointer;font-family:nyt-franklin,helvetica,arial,sans-serif;-webkit-transition:ease 0.6s;transition:ease 0.6s;white-space:nowrap;vertical-align:middle;background-color:transparent;color:#000;font-size:11px;line-height:11px;font-weight:700;-webkit-letter-spacing:0.02em;-moz-letter-spacing:0.02em;-ms-letter-spacing:0.02em;letter-spacing:0.02em;padding:11px 12px 8px;border:0;}.css-tkwi90::-moz-focus-inner{padding:0;border:0;}.css-tkwi90:-moz-focusring{outline:1px dotted;}.css-tkwi90:disabled,.css-tkwi90.disabled{opacity:0.5;cursor:default;}.css-tkwi90:active,.css-tkwi90.active{background-color:#f7f7f7;}@media (min-width:740px){.css-tkwi90:hover{background-color:#f7f7f7;}}.css-tkwi90.activeSearchButton{background-color:#f7f7f7;}@media (min-width:1024px){.css-tkwi90{padding:8px 9px 9px;}}.css-10698na{text-align:center;}@media (min-width:740px){.css-10698na{padding-top:0;}}@media print{.css-10698na a[href]::after{content:'';}.css-10698na svg{fill:black;}}.css-nhjhh0{display:block;width:189px;height:26px;margin:5px auto 0;}@media (min-width:740px){.css-nhjhh0{width:225px;height:31px;margin:4px auto 0;}}@media (min-width:1024px){.css-nhjhh0{width:195px;height:26px;margin:6px auto 0;}}.css-y3sf94{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:space-around;-webkit-justify-content:space-around;-ms-flex-pack:space-around;justify-content:space-around;position:absolute;right:10px;top:9px;}@media (min-width:1024px){.css-y3sf94{top:4px;}}@media print{.css-y3sf94{display:none;}}.css-ni9it0{border-radius:3px;cursor:pointer;font-family:nyt-franklin,helvetica,arial,sans-serif;-webkit-transition:ease 0.6s;transition:ease 0.6s;white-space:nowrap;vertical-align:middle;background-color:#567b95;border:1px solid #326891;color:#fff;font-size:11px;line-height:11px;font-weight:700;-webkit-letter-spacing:0.05em;-moz-letter-spacing:0.05em;-ms-letter-spacing:0.05em;letter-spacing:0.05em;padding:11px 12px 8px;text-transform:uppercase;display:inline-block;}.css-ni9it0::-moz-focus-inner{padding:0;border:0;}.css-ni9it0:-moz-focusring{outline:1px dotted;}.css-ni9it0:disabled,.css-ni9it0.disabled{opacity:0.5;cursor:default;}@media (min-width:740px){.css-ni9it0:hover{background-color:#326891;}}@media (min-width:1024px){.css-ni9it0{padding:8px 12px;height:11px;color:#fff !important;}}.css-ni9it0:hover{border:1px solid #326891;}.css-e1ifge{display:inline-block;padding:4px;}@media (min-width:1024px){.css-e1ifge{display:none;}}.css-1r0gz1j{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:11px;-webkit-box-pack:space-around;-webkit-justify-content:space-around;-ms-flex-pack:space-around;justify-content:space-around;padding:13px 20px 12px;}@media (min-width:740px){.css-1r0gz1j{position:relative;}}@media (min-width:1024px){.css-1r0gz1j{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border:none;padding:0;height:0;-webkit-transform:translateY(38px);-ms-transform:translateY(38px);transform:translateY(38px);-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}}@media print{.css-1r0gz1j{display:none;}}.css-1o0kkht{color:#121212;font-size:0.6875rem;font-family:nyt-franklin,helvetica,arial,sans-serif;display:none;width:auto;font-weight:700;}@media (min-width:740px){.css-1o0kkht{text-align:center;width:100%;}}@media (min-width:1024px){.css-1o0kkht{font-size:12px;width:auto;margin-bottom:5px;}}.css-1bvtpon{display:none;}.css-4skfbu{color:#999;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:17px;margin-bottom:5px;margin-bottom:0;}@media print{.css-4skfbu{display:none;}}.css-9eyi4s{color:#999;display:inline;margin-right:12px;width:100%;position:relative;}@media (max-width:420px){.css-9eyi4s{margin-right:6px;}}.css-9eyi4s > a,.css-9eyi4s > button{-webkit-text-decoration:none;text-decoration:none;}.css-9eyi4s > a:focus,.css-9eyi4s > button:focus{display:inline-block;outline:none;box-shadow:0 0 2px 1px rgb(0 95 204);}@supports selector(:focus-visible){.css-9eyi4s > a:focus,.css-9eyi4s > button:focus{box-shadow:none;}.css-9eyi4s > a:focus-visible,.css-9eyi4s > button:focus-visible{box-shadow:0 0 2px 1px rgb(0 95 204);}}.css-9eyi4s > a:focus{border-radius:100%;}.css-9eyi4s:last-of-type{margin-right:0;}.css-1wb2lb{display:inline-block;vertical-align:middle;width:20px;background-color:#fff;border:1px #dfdfdf solid;border-radius:100%;padding:6px;overflow:initial;vertical-align:middle;height:20px;}.css-1wb2lb:hover{background-color:#ebebeb;border:1px solid #ebebeb;}.css-1wb2lb:focus{border-radius:100%;outline:none;box-shadow:0 0 2px 1px rgb(0 95 204);}@supports selector(:focus-visible){.css-1wb2lb:focus{box-shadow:none;}.css-1wb2lb:focus-visible{box-shadow:0 0 2px 1px rgb(0 95 204);}}.css-1ui00vj{direction:ltr;display:inline-block;vertical-align:middle;background-color:#fff;color:#333;border:solid 1px #dfdfdf;-webkit-transition:background-color 0.1s,color 0.1s;transition:background-color 0.1s,color 0.1s;border-radius:30px;padding:6px 10px 6px;font-size:0.75rem;font-family:nyt-franklin,helvetica,arial,sans-serif;line-height:0.9375rem;text-align:right;font-weight:500;background-color:#fff;color:#333;border:solid 1px #dfdfdf;-webkit-transition:background-color 0.1s,color 0.1s;transition:background-color 0.1s,color 0.1s;}.css-1ui00vj:hover{background-color:#ebebeb;}@media (max-width:600px){.css-1ui00vj{padding:6px 7px 5px;}}.css-1ui00vj:hover{border:solid 1px #ebebeb;}.css-1ui00vj svg path{fill:#333;-webkit-transition:fill 0.5s;transition:fill 0.5s;}.css-1ui00vj svg{margin-right:5px;vertical-align:-6px;height:20px;}.css-1ui00vj:hover{border:solid 1px #ebebeb;}.css-1ui00vj svg path{fill:#333;-webkit-transition:fill 0.5s;transition:fill 0.5s;}.css-swbuts{height:18px;width:18px;padding:7px;overflow:visible;vertical-align:middle;cursor:not-allowed;}.css-swbuts g{stroke-width:0.1px;}@media (min-width:1150px){.css-swbuts:hover g,.css-swbuts:focus g{stroke:#333;}}@media (min-width:1150px){.css-swbuts:hover g,.css-swbuts:focus g{stroke:#666;opacity:1;}}.css-1vxca1d{position:relative;margin:0 auto;}@media (min-width:600px){.css-1vxca1d{margin:0 auto 20px;}}.css-1vxca1d .relatedcoverage + .recirculation{margin-top:20px;}.css-1vxca1d .wrap + .recirculation{margin-top:20px;}@media (min-width:1024px){.css-1vxca1d{padding-top:40px;}}.css-z1t82k{display:none;min-height:280px;}@media (min-width:765px){.css-z1t82k{background-color:#f7f7f7;border-bottom:1px solid #f3f3f3;display:block;padding-bottom:15px;padding-top:15px;margin:0;}}@media print{.css-z1t82k{display:none;}}.css-11kk65x{margin-top:1.5625rem;}@media (min-width:740px){.css-11kk65x{margin-top:3.75rem;}}.css-11kk65x .e6idgb70{color:var(--color-content-primary,#121212);font-weight:700;line-height:0.75rem;margin-bottom:1.25rem;margin-top:0;}@media print{.css-11kk65x .e6idgb70{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-11kk65x .e1h9rw200{margin-bottom:20px;}@media (min-width:740px){.css-11kk65x .e1h9rw200{position:relative;}}.css-11kk65x .ezdmqqa0{margin-bottom:3px;}@media (min-width:600px){.css-11kk65x .ezdmqqa0{margin-bottom:0;}}.css-11kk65x .e1wiw3jv0{color:var(--color-content-secondary,#363636);}.css-11kk65x .e16638kd0{display:inline-block;}.css-11kk65x .eakwutd0{margin-bottom:20px;color:var(--color-content-primary,#121212);}@media print{.css-11kk65x .eakwutd0{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-1icycqh{color:var(--color-content-primary,#121212);font-family:nyt-cheltenham,georgia,'times new roman',times,serif;font-weight:700;font-style:italic;font-size:1.9375rem;line-height:2.25rem;margin:0 20px 20px;position:relative;width:calc(100% - 40px);max-width:600px;margin-left:20px;margin-right:20px;}@media (min-width:740px){.css-1icycqh{font-size:2.5rem;line-height:2.875rem;}}@media (min-width:600px){.css-1icycqh{margin-left:auto;margin-right:auto;}}@media print{.css-1icycqh{margin-left:0;margin-right:0;width:100%;max-width:100%;}}@media (min-width:600px){.css-1icycqh{margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-1icycqh{width:600px;}}@media (min-width:1440px){.css-1icycqh{width:600px;max-width:600px;}}@media print{.css-1icycqh{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-pga13o#ap-share-article{font-family:nyt-franklin,helvetica,arial,sans-serif;font-style:normal;font-weight:500;font-size:1rem;line-height:1rem;color:#000;padding:21px 20px 15px 22px;text-align:left;}@media (min-width:1150px){.css-pga13o#ap-share-article{position:static;top:auto;left:auto;overflow-y:hidden;font-size:0.875rem;line-height:0.875rem;padding:14px;}}#ap-gift-article-tooltip .css-pga13o{padding:13px 15px 12px 15px;color:#fff;}#ap-gift-article .css-6yj280,#ap-gift-article-tooltip .css-6yj280{font-size:0.75rem;line-height:1.0625rem;}#ap-gift-article .css-6yj280 strong,#ap-gift-article-tooltip .css-6yj280 strong{font-weight:700;}#ap-gift-article .css-6yj280,#ap-gift-article-tooltip .css-6yj280{font-size:0.875rem;margin-bottom:4px;}.css-8qgvsz{font-weight:700;}.css-xt80pu{width:100%;width:calc(100% - 40px);max-width:600px;margin-left:20px;margin-right:20px;}@media (min-width:600px){.css-xt80pu{margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-xt80pu{width:600px;}}@media (min-width:1440px){.css-xt80pu{width:600px;max-width:600px;}}@media print{.css-xt80pu{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-1e2jphy{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0.25rem;}.css-1e2jphy > img,.css-1e2jphy a > img,.css-1e2jphy div > img{margin-right:10px;}.css-233int{display:inline-block;}.css-4anu6l{display:inline-block;margin:0;font-size:0.875rem;line-height:1.125rem;font-family:nyt-franklin,helvetica,arial,sans-serif;font-weight:700;color:var(--color-content-secondary,#363636);}@media (min-width:740px){.css-4anu6l{font-size:0.9375rem;line-height:1.25rem;}}.css-1u1psjv{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}.css-ccw2r3{-webkit-flex-shrink:1;-ms-flex-negative:1;flex-shrink:1;padding-right:1rem;list-style:none;}.css-1z1nqv{font-family:nyt-franklin,helvetica,arial,sans-serif;font-weight:500;color:var(--color-content-secondary,#363636);margin-bottom:1rem;font-size:0.8125rem;line-height:1rem;margin-bottom:0;margin-top:0;}.css-rq4mmj{height:auto;width:100%;width:100%;vertical-align:top;}.css-rq4mmj img{width:100%;vertical-align:top;}.css-y5g5d7{color:var(--color-content-quaternary,#727272);font-family:nyt-imperial,georgia,'times new roman',times,serif;margin:10px 20px 0;text-align:left;}.css-y5g5d7 a{color:var(--color-signal-editorial,#326891);-webkit-text-decoration:none;text-decoration:none;}.css-y5g5d7 a:hover,.css-y5g5d7 a:focus{-webkit-text-decoration:underline;text-decoration:underline;}@media (min-width:600px){.css-y5g5d7{margin-left:0;}}.sizeSmall .css-y5g5d7{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:calc(50% - 15px);margin:auto 0 15px 15px;}@media (min-width:600px){.sizeSmall .css-y5g5d7{width:260px;margin-left:15px;}}@media (min-width:740px){.sizeSmall .css-y5g5d7{margin-left:15px;}}@media (min-width:1440px){.sizeSmall .css-y5g5d7{width:330px;margin-left:15px;}}@media (max-width:600px){.sizeSmall .css-y5g5d7{margin:auto 0 0 15px;}}.sizeSmall.sizeSmallNoCaption .css-y5g5d7{margin-left:auto;margin-right:auto;margin-top:10px;}.sizeMedium .css-y5g5d7{max-width:900px;}.sizeMedium.layoutVertical.verticalVideo .css-y5g5d7{margin-left:0;margin-right:0;}.sizeLarge .css-y5g5d7{max-width:none;}@media (min-width:600px){.sizeLarge .css-y5g5d7{margin-left:20px;}}@media (min-width:740px){.sizeLarge .css-y5g5d7{margin-left:20px;max-width:900px;}}@media (min-width:1024px){.sizeLarge .css-y5g5d7{margin-left:0;max-width:720px;}}@media (min-width:1440px){.sizeLarge .css-y5g5d7{margin-left:0;max-width:900px;}}@media (min-width:740px){.sizeLarge.layoutVertical .css-y5g5d7{margin-left:0;}}.sizeFull .css-y5g5d7{margin-left:20px;}@media (min-width:600px){.sizeFull .css-y5g5d7{max-width:900px;}}@media (min-width:740px){.sizeFull .css-y5g5d7{max-width:900px;}}@media (min-width:1440px){.sizeFull .css-y5g5d7{max-width:900px;}}@media print{.css-y5g5d7{display:none;}}.css-1u46b97{display:inline;color:var(--color-content-quaternary,#727272);font-family:nyt-imperial,georgia,'times new roman',times,serif;line-height:1.125rem;-webkit-letter-spacing:0.01em;-moz-letter-spacing:0.01em;-ms-letter-spacing:0.01em;letter-spacing:0.01em;font-size:0.75rem;}@media (min-width:740px){.css-1u46b97{font-size:0.75rem;}}@media (min-width:1150px){.css-1u46b97{font-size:0.8125rem;}}.css-at9mc1{margin-bottom:0.78125rem;margin-top:0;overflow-wrap:break-word;color:var(--color-content-secondary,#363636);font-family:nyt-imperial,georgia,'times new roman',times,serif;font-size:1.125rem;line-height:1.5625rem;margin-left:20px;margin-right:20px;width:calc(100% - 40px);max-width:600px;}@media (min-width:740px){.css-at9mc1{margin-bottom:0.9375rem;margin-top:0;}}.css-at9mc1 .css-yywogo{-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-thickness:1px;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--color-signal-editorial,#326891);text-decoration-color:var(--color-signal-editorial,#326891);}.css-at9mc1 .css-yywogo:hover,.css-at9mc1 .css-yywogo:focus{-webkit-text-decoration:none;text-decoration:none;}@media (min-width:740px){.css-at9mc1{font-size:1.25rem;line-height:1.875rem;}}.css-at9mc1:first-child{margin-top:0;}.css-at9mc1:last-child{margin-bottom:0;}.css-at9mc1.e1h9rw200:last-child{margin-bottom:0.75rem;}.css-at9mc1.eoo0vm40:first-child{margin-top:0.8125rem;}@media (min-width:600px){.css-at9mc1{margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-at9mc1{margin-left:0;margin-right:0;width:100%;max-width:100%;}.css-at9mc1.eoo0vm40:first-child{margin-top:1.1875rem;}}@media print{.css-at9mc1{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-2fttua{background-color:#f7f7f7;border-bottom:1px solid #f3f3f3;border-top:1px solid #f3f3f3;margin:37px auto;padding-bottom:30px;padding-top:12px;text-align:center;margin-top:60px;min-height:280px;}@media (min-width:740px){.css-2fttua{margin:43px auto;}}@media print{.css-2fttua{display:none;}}@media (min-width:740px){.css-2fttua{margin-bottom:0;margin-top:0;}}.css-1ho5u4o{list-style:none;margin:0 0 15px;padding:0;}@media (min-width:600px){.css-1ho5u4o{display:inline-block;}}.css-13o0c9t{list-style:none;line-height:8px;margin:0 0 35px;padding:0;}@media (min-width:600px){.css-13o0c9t{display:inline-block;}}.css-a7htku{display:inline-block;line-height:20px;padding:0 10px;}.css-a7htku:first-child{border-left:none;}.css-a7htku.desktop{display:none;}@media (min-width:740px){.css-a7htku.smartphone{display:none;}.css-a7htku.desktop{display:inline-block;}.css-a7htku.mobileOnly{display:none;}}.css-1wr3we4{display:none;}@media (min-width:1024px){.css-1wr3we4{display:block;position:absolute;left:105px;line-height:19px;top:10px;}}.css-1wa6gzb{color:#999;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;font-family:nyt-franklin,helvetica,arial,sans-serif;font-size:17px;margin-bottom:5px;border-top:1px solid #ebebeb;padding-top:20px;width:calc(100% - 40px);max-width:600px;margin-left:20px;margin-right:20px;}@media print{.css-1wa6gzb{display:none;}}@media (min-width:740px){.css-1wa6gzb{border-top:1px solid #ebebeb;padding-top:20px;}}@media (min-width:600px){.css-1wa6gzb{margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-1wa6gzb{width:600px;}}@media (min-width:1440px){.css-1wa6gzb{width:600px;max-width:600px;}}@media print{.css-1wa6gzb{margin-left:0;margin-right:0;width:100%;max-width:100%;}}.css-1a48zt4{opacity:1;-webkit-transition:opacity 0.3s 0.2s;transition:opacity 0.3s 0.2s;}.css-1a1lp8y{margin:37px auto;margin-top:20px;margin-bottom:32px;}.css-1a1lp8y strong{font-weight:700;}.css-1a1lp8y em{font-style:italic;}.css-1a1lp8y.sizeSmall{width:calc(100% - 40px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (min-width:600px){.css-1a1lp8y.sizeSmall{max-width:600px;margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-1a1lp8y.sizeSmall{width:100%;}}@media (min-width:1440px){.css-1a1lp8y.sizeSmall{max-width:600px;}}.css-1a1lp8y.sizeSmall.sizeSmallNoCaption{display:block;}@media print{.css-1a1lp8y.sizeSmall.sizeSmallNoCaption{display:none;}}.css-1a1lp8y.sizeMedium{width:100%;max-width:600px;margin-right:auto;margin-left:auto;}@media (min-width:600px){.css-1a1lp8y.sizeMedium{width:calc(100% - 40px);}}@media (min-width:740px){.css-1a1lp8y.sizeMedium{max-width:600px;}}@media (min-width:600px){.css-1a1lp8y.sizeMedium.layoutVertical{width:420px;}}.css-1a1lp8y.sizeMedium.layoutVertical.verticalVideo{width:calc(100% - 40px);}@media (min-width:600px){.css-1a1lp8y.sizeMedium.layoutVertical.verticalVideo{width:310px;}}.css-1a1lp8y.sizeLarge{width:100%;max-width:1200px;margin-left:auto;margin-right:auto;}@media (min-width:600px){.css-1a1lp8y.sizeLarge{width:auto;}}@media (min-width:740px){.css-1a1lp8y.sizeLarge.layoutVertical{width:600px;}.css-1a1lp8y.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:1024px){.css-1a1lp8y.sizeLarge{width:945px;}}@media (min-width:1440px){.css-1a1lp8y.sizeLarge{width:1200px;}.css-1a1lp8y.sizeLarge.layoutVertical{width:720px;}.css-1a1lp8y.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:600px){.css-1a1lp8y{margin:43px auto;}}@media print{.css-1a1lp8y{display:none;}}@media (min-width:740px){.css-1a1lp8y{margin-top:25px;}}.css-jevhma{margin-right:7px;color:var(--color-content-quaternary,#727272);font-family:nyt-imperial,georgia,'times new roman',times,serif;font-size:0.875rem;line-height:1.125rem;}@media (min-width:740px){.css-jevhma{font-size:0.9375rem;line-height:1.25rem;}}.css-jevhma strong{font-weight:700;}.css-jevhma em{font-style:italic;}.css-jevhma a{color:var(--color-signal-editorial,#326891);}.css-jevhma a:visited{color:var(--color-signal-editorial,#326891);}.css-n8ff4n{color:inherit;-webkit-text-decoration:underline;text-decoration:underline;text-underline-offset:1px;-webkit-text-decoration-thickness:1px;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--color-content-quaternary,#727272);text-decoration-color:var(--color-content-quaternary,#727272);}.css-n8ff4n:hover,.css-n8ff4n:focus{-webkit-text-decoration:none;text-decoration:none;}.css-1pv2nfg{margin:37px auto;width:100%;opacity:1;-webkit-transition:opacity 0.15s;transition:opacity 0.15s;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:0;margin-bottom:0;margin-top:15px;}.css-1pv2nfg strong{font-weight:700;}.css-1pv2nfg em{font-style:italic;}.css-1pv2nfg.sizeSmall{width:calc(100% - 40px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (min-width:600px){.css-1pv2nfg.sizeSmall{max-width:600px;margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-1pv2nfg.sizeSmall{width:100%;}}@media (min-width:1440px){.css-1pv2nfg.sizeSmall{max-width:600px;}}.css-1pv2nfg.sizeSmall.sizeSmallNoCaption{display:block;}@media print{.css-1pv2nfg.sizeSmall.sizeSmallNoCaption{display:none;}}.css-1pv2nfg.sizeMedium{width:100%;max-width:600px;margin-right:auto;margin-left:auto;}@media (min-width:600px){.css-1pv2nfg.sizeMedium{width:calc(100% - 40px);}}@media (min-width:740px){.css-1pv2nfg.sizeMedium{max-width:600px;}}@media (min-width:600px){.css-1pv2nfg.sizeMedium.layoutVertical{width:420px;}}.css-1pv2nfg.sizeMedium.layoutVertical.verticalVideo{width:calc(100% - 40px);}@media (min-width:600px){.css-1pv2nfg.sizeMedium.layoutVertical.verticalVideo{width:310px;}}.css-1pv2nfg.sizeLarge{width:100%;max-width:1200px;margin-left:auto;margin-right:auto;}@media (min-width:600px){.css-1pv2nfg.sizeLarge{width:auto;}}@media (min-width:740px){.css-1pv2nfg.sizeLarge.layoutVertical{width:600px;}.css-1pv2nfg.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:1024px){.css-1pv2nfg.sizeLarge{width:945px;}}@media (min-width:1440px){.css-1pv2nfg.sizeLarge{width:1200px;}.css-1pv2nfg.sizeLarge.layoutVertical{width:720px;}.css-1pv2nfg.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:600px){.css-1pv2nfg{margin:43px auto;}}@media print{.css-1pv2nfg{display:none;}}@media (min-width:600px){.css-1pv2nfg{margin:15px auto 0;width:100%;}.css-1pv2nfg.sizeMedium{margin:15px auto 0;width:100%;}}.css-1f3mpp5{position:relative;margin:37px auto;}.css-1f3mpp5:hover .ewenx680{opacity:0.8;}.css-1f3mpp5:hover .css-t4350i{right:0;}.css-1f3mpp5 strong{font-weight:700;}.css-1f3mpp5 em{font-style:italic;}.css-1f3mpp5.sizeSmall{width:calc(100% - 40px);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}@media (min-width:600px){.css-1f3mpp5.sizeSmall{max-width:600px;margin-left:auto;margin-right:auto;}}@media (min-width:1024px){.css-1f3mpp5.sizeSmall{width:100%;}}@media (min-width:1440px){.css-1f3mpp5.sizeSmall{max-width:600px;}}.css-1f3mpp5.sizeSmall.sizeSmallNoCaption{display:block;}@media print{.css-1f3mpp5.sizeSmall.sizeSmallNoCaption{display:none;}}.css-1f3mpp5.sizeMedium{width:100%;max-width:600px;margin-right:auto;margin-left:auto;}@media (min-width:600px){.css-1f3mpp5.sizeMedium{width:calc(100% - 40px);}}@media (min-width:740px){.css-1f3mpp5.sizeMedium{max-width:600px;}}@media (min-width:600px){.css-1f3mpp5.sizeMedium.layoutVertical{width:420px;}}.css-1f3mpp5.sizeMedium.layoutVertical.verticalVideo{width:calc(100% - 40px);}@media (min-width:600px){.css-1f3mpp5.sizeMedium.layoutVertical.verticalVideo{width:310px;}}.css-1f3mpp5.sizeLarge{width:100%;max-width:1200px;margin-left:auto;margin-right:auto;}@media (min-width:600px){.css-1f3mpp5.sizeLarge{width:auto;}}@media (min-width:740px){.css-1f3mpp5.sizeLarge.layoutVertical{width:600px;}.css-1f3mpp5.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:1024px){.css-1f3mpp5.sizeLarge{width:945px;}}@media (min-width:1440px){.css-1f3mpp5.sizeLarge{width:1200px;}.css-1f3mpp5.sizeLarge.layoutVertical{width:720px;}.css-1f3mpp5.sizeLarge.layoutVertical.verticalVideo{width:600px;}}@media (min-width:600px){.css-1f3mpp5{margin:43px auto;}}@media print{.css-1f3mpp5{display:none;}}</style> + + + + + <script type="text/javascript"> + // 30.734kB + window.viHeadScriptSize = 30.734; + window.NYTD = {}; + window.vi = window.vi || {}; + window.vi.pageType = { type: '', edge: 'vi-story'}; + (function () { var userAgent=window.navigator.userAgent||window.navigator.vendor||window.opera||"",inNewsreaderApp=userAgent.includes("nytios")||userAgent.includes("nyt_android"),inXWordsApp=userAgent.includes("nyt_xwords_ios")||userAgent.includes("Crosswords"),inAndroid=userAgent.includes("nyt_android")||userAgent.includes("Crosswords"),iniOS=userAgent.includes("nytios")||userAgent.includes("nyt_xwords_ios"),isInWebviewByUserAgent=(inAndroid||iniOS)&&(inNewsreaderApp||inXWordsApp);function appType(){return inNewsreaderApp?"newsreader":inXWordsApp?"crosswords":""}function deviceType(){return inAndroid?"ANDROID":iniOS?"IOS":""}var _f=function(e){window.vi.webviewEnvironment={appType:appType(),deviceType:deviceType(),isInWebview:e.webviewEnvironment.isInWebview||isInWebviewByUserAgent}};;_f.apply(null, [{"gqlUrlClient":"https://samizdat-graphql.nytimes.com/graphql/v2","gqlRequestHeaders":{"nyt-app-type":"project-vi","nyt-app-version":"0.0.5","nyt-token":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+/oUCTBmD/cLdmcecrnBMHiU/pxQCn2DDyaPKUOXxi4p0uUSZQzsuq1pJ1m5z1i0YGPd1U1OeGHAChWtqoxC7bFMCXcwnE1oyui9G1uobgpm1GdhtwkR7ta7akVTcsF8zxiXx7DNXIPd2nIJFH83rmkZueKrC4JVaNzjvD+Z03piLn5bHWU6+w+rA+kyJtGgZNTXKyPh6EC6o5N+rknNMG5+CdTq35p8f99WjFawSvYgP9V64kgckbTbtdJ6YhVP58TnuYgr12urtwnIqWP9KSJ1e5vmgf3tunMqWNm6+AnsqNj8mCLdCuc5cEB74CwUeQcP2HQQmbCddBy2y0mEwIDAQAB"},"gqlFetchTimeout":1500,"disablePersistedQueries":false,"fastlyHeaders":{},"initialDeviceType":"smartphone","fastlyAbraConfig":{".ver":"9625.000","HOME_chartbeat":"0_Control","INT_cwv_v2_control_split":"","INT_cwv_dfp_deferAds_0322":"","Wirecutter_Growth_DEMO":"1_grow_variant"},"internalPreviewConfig":{},"webviewEnvironment":{"isInWebview":false},"serviceWorkerFile":"service-worker-test-1662742927491.js"}]); })();;(function () { var _f=function(i){window.vi=window.vi||{},window.vi.env=Object.freeze(i),window.hybrid=!1};;_f.apply(null, [{"JKIDD_PATH":"https://a.nytimes.com/svc/nyt/data-layer","ET2_URL":"https://a.et.nytimes.com","ALS_URL":"https://als-svc.nytimes.com","WEDDINGS_PATH":"https://content.api.nytimes.com","GDPR_PATH":"https://us-central1-nyt-dsra-prd.cloudfunctions.net/datagov-dsr-formhandler","RECAPTCHA_SITEKEY":"6LevSGcUAAAAAF-7fVZF05VTRiXvBDAY4vBSPaTF","ABRA_ET_URL":"//et.nytimes.com","NODE_ENV":"production","EXPERIMENTAL_ROUTE_PREFIX":"","ENVIRONMENT":"prd","RELEASE":"b7473876f987234cda2bd0ff7906c796093cecdc","RELEASE_TAG":"v2621","AUTH_HOST":"https://myaccount.nytimes.com","MESSAGING_LANDING_PAGE_HOST":"https://www.nytimes.com","SWG_PUBLICATION_ID":"nytimes.com","GQL_FETCH_TIMEOUT":"1500","GOOGLE_CLIENT_ID":"1005640118348-amh5tgkq641oru4fbhr3psm3gt2tcc94.apps.googleusercontent.com","STORY_SURROGATE_CONTROL":"max-age=300, stale-if-error=259200, stale-while-revalidate=259200","ONBOARDING_API_KEY":"lpCO5UAWFCa4e4KyawC71aeNUZ7n92r06JwVu6w4"}]); })();;(function () { var _f=function(){var e=window;e.initWebview=function(e){var i=document.documentElement;if(e.OS){var t=e.OS.toUpperCase();i.classList.add(t)}e.BaseFontSize&&(i.dataset.baseFontSize=e.BaseFontSize)};var i=e.navigator.userAgent.toLowerCase();/iphone|ipod|ipad/.test(i)||void 0===e.config||e.initWebview(e.config)};;_f.apply(null, []); })();; +!function(a){var s,c,p,_,d,l,u=[],f={pv_id:"",ctx_id:"",intra:!1,force_xhr:!1,store_last_response:!1 +},g="object"==typeof a.navigator&&"string"==typeof a.navigator.userAgent&&/iP(ad|hone|od)/.test( +a.navigator.userAgent),y="object"==typeof a.navigator&&a.navigator.sendBeacon, +v=y?g?"xhr_ios":"beacon":"xhr";function h(){var e,t,n=a.crypto||a.msCrypto;if(n)t=n.getRandomValues( +new Uint8Array(18));else for(t=[];t.length<18;)t.push(256*Math.random()^255&(e=e||+new Date)), +e=Math.floor(e/256);return btoa(String.fromCharCode.apply(String,t)).replace(/\+/g,"-").replace( +/\//g,"_")}if(a.nyt_et)try{console.warn("et2 snippet should only load once per page")}catch(e +){}else a.nyt_et=function(){var e,t,n,o=arguments;function r(e){var t,n,o,r,i;u.length&&(t=s+"track" +,n=JSON.stringify(u),e=e,o=f.force_xhr,r=f.store_last_response,!o&&("beacon"===v||y&&e)?( +o=a.navigator.sendBeacon(t,n),r&&(l=o)):(( +i="undefined"!=typeof XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP") +).open("POST",t),i.withCredentials=!0,i.setRequestHeader("Accept","*/*"), +"string"==typeof n?i.setRequestHeader("Content-Type","text/plain;charset=UTF-8" +):"[object Blob]"==={}.toString.call(n)&&n.type&&i.setRequestHeader("Content-Type",n.type), +r&&!i.onload&&(i.onload=function(){l=i.response},i.onerror=function(e){l=!1}),i.send(n)),u.length=0, +clearTimeout(d),d=null)}if("string"==typeof o[0]&&/init/.test(o[0])&&(f=function(e,t){var n="",o="", +r=!1,i=!1,a=!1;if("string"==typeof e&&"init"==e&&"object"==typeof t&&( +"boolean"==typeof t.intranet&&t.intranet&&(r=!0),"boolean"==typeof t.force_xhr&&t.force_xhr&&(i=!0), +"boolean"==typeof t.store_last_response&&t.store_last_response&&(a=!0), +"string"==typeof t.pv_id_override&&"string"==typeof t.ctx_id_override))if( +24<=t.pv_id_override.length&&24<=t.ctx_id_override.length)n=t.pv_id_override, +o=t.ctx_id_override;else try{console.warn("override id(s) must be >= 24 chars long")}catch(e){} +return{pv_id:n,ctx_id:o,intra:r,store_last_response:a,force_xhr:i}}(o[0],o[3]),p=f.pv_id||h(), +"init"==o[0]&&!c)){if(c=f.ctx_id||h(),"string"!=typeof o[1]||!/^http/.test(o[1]))throw new Error( +"init must include an et host url");if(s=String(o[1]).replace(/([^\/])$/,"$1/"), +"string"!=typeof o[2])throw new Error("init must include a source app name");_=o[2]}var i=o.length-1 +;(e=o[i]&&"object"==typeof o[i]?o[i]:e)||/init/.test(o[0])?e&&!e.subject&&console.warn( +"event data {} must include a subject"):console.warn( +"when invoked without 'init' or 'pageinit', nyt_et() must include a event data"),s&&e&&e.subject&&( +i=e.subject,delete e.subject,n="page_exit"==i||"ob_click"==(e.eventData||{}).type, +t="page"==i||"page_soft"==i?p:h(),u.push({context_id:c,pageview_id:p,event_id:t,client_lib:"v1.3.0", +sourceApp:_,intranet:f.intra?1:void 0,subject:i,how:n&&g&&y?"beacon_ios":v,client_ts:+new Date, +data:JSON.parse(JSON.stringify(e))}),"send"==o[0]||t==p||n?r(n):("soon"==o[0]&&(clearTimeout(d), +d=setTimeout(r,200)),d=d||setTimeout(r,5500)))},a.nyt_et.get_pageview_id=function(){return p}, +a.nyt_et.get_context_id=function(){return c},a.nyt_et.get_host=function(){return s}, +a.nyt_et.get_last_send_response=function(){var e=l;return e&&(l=null),e}}(window); +; + (function initWebUnifiedTracking(root) { + var _root; + + root = root || (typeof window !== 'undefined' ? window : undefined); + var UnifiedTracking = ((_root = root) === null || _root === void 0 ? void 0 : _root.UnifiedTracking) || {}; + UnifiedTracking.context = 'web'; + + if (!root) { + return UnifiedTracking; + } + + root.UnifiedTracking = UnifiedTracking; + + UnifiedTracking.sendAnalytic = function sendAnalytic(eventName, dataBlob) { + root.dataLayer = root.dataLayer || []; + + if (Array.isArray(root.dataLayer)) { + // Don't use a spread operator here for babel reasons + dataBlob.event = dataBlob.event || eventName; + root.dataLayer.push(dataBlob); + } + + return Promise.resolve({ + success: true + }); + }; + + return UnifiedTracking; +})(window); +;!function(r){var n,t;r=r||self,n=r.Abra,(t=r.Abra=function(){"use strict";var r=Array.isArray,n=function(r,n,t){var e=r(t,n),u=e[0],o=e[1];if(null==u||""===u)return n;for(var i=String(u).split("."),a=0;a<i.length&&(n=n[i[a]]);a++);return null==n&&(n=o),null!=n?n:null},t=function(r,n,t){return r(t,n).reduce((function(r,n){return parseFloat(r)+parseFloat(n)}),0)},e=function(r,n,t){var e=r(t,n);return e[0]/e[1]},u=function(r,n,t){var e=r(t,n);return e[0]%e[1]},o=function(r,n,t){return r(t,n).reduce((function(r,n){return parseFloat(r)*parseFloat(n)}),1)},i=function(r,n,t){var e=r(t,n),u=e[0],o=e[1];return void 0===o?-u:u-o};function a(n){return!(r(n)&&0===n.length||!n)}var f=function(r,n,t){for(var e,u=0;u<t.length;u++)if(!a(e=r(t[u],n)))return e;return e},c=function(r,n,t){var e;for(e=0;e<t.length-1;e+=2)if(a(r(t[e],n)))return r(t[e+1],n);return t.length===e+1?r(t[e],n):null},l=function(r,n,t){return!a(r(t,n)[0])},v=function(r,n,t){for(var e,u=0;u<t.length;u++)if(a(e=r(t[u],n)))return e;return e},d=function(r,n,t){var e=r(t,n);return e[0]===e[1]},s=function(r,n,t){var e=r(t,n);return e[0]!==e[1]},h=function(r,n,t){var e=r(t,n),u=e[0],o=e[1];return!(!o||void 0===o.indexOf)&&-1!==o.indexOf(u)},g=function(r,n,t){var e=r(t,n);return e[0]>e[1]},p=function(r,n,t){var e=r(t,n);return e[0]>=e[1]},b=function(r,n,t){var e=r(t,n),u=e[0],o=e[1],i=e[2];return void 0===i?u<o:u<o&&o<i},w=function(r,n,t){var e=r(t,n),u=e[0],o=e[1],i=e[2];return void 0===i?u<=o:u<=o&&o<=i},y=function(r,n,t){var e=t[0],u=t[1],o=t.slice(2),i=r(e,n);if(!i)return null;if(0===o.length)return null;if(1===o.length)return r(o[0],n);if(4294967295===o[0])return r(o[1],n);for(var a=function(r){var n,t,e,u,o,i=[],a=[t=1732584193,e=4023233417,~t,~e,3285377520],f=[],c=unescape(encodeURI(r))+"\x80",l=c.length;for(f[r=--l/4+2|15]=8*l;~l;)f[l>>2]|=c.charCodeAt(l)<<8*~l--;for(n=l=0;n<r;n+=16){for(t=a;l<80;t=[t[4]+(i[l]=l<16?~~f[n+l]:2*c|c<0)+1518500249+[e&u|~e&o,c=341275144+(e^u^o),882459459+(e&u|e&o|u&o),c+1535694389][l++/5>>2]+((c=t[0])<<5|c>>>27),c,e<<30|e>>>2,u,o])c=i[l-3]^i[l-8]^i[l-14]^i[l-16],e=t[1],u=t[2],o=t[3];for(l=5;l;)a[--l]+=t[l]}return a[0]>>>0}(i+" "+r(u,n));o.length>1;){var f=o.splice(0,2),c=f[0],l=f[1];if(a<=r(c,n))return r(l,n)}return 0===o.length?null:r(o[0],n)},k=function(r,n,t){var e=t[0],u=t[1],o=r(e,n);return null==o?null:new RegExp(u).test(o)};return function(a,m,O,A){void 0===a&&(a={}),void 0===m&&(m={}),void 0===O&&(O={}),void 0===A&&(A=!1);var j=function(){var r={},n=function(n){if(n)for(var t,e=decodeURIComponent(n[1]),u=/(?:^|,)([^,=]+)=([^,]*)/g;t=u.exec(e);){var o=t,i=o[1],a=o[2];r[i]=a||null}};n(document.cookie.match(/(?:^|;) *abra-overrides=([^;]+)/)),n(window.location.search.match(/(?:\?|&)abra-overrides=([^&]+)/));var t=/(?:^|;) *abra-nuke=true(?:;|$)/.test(document.cookie)||/(?:\?|&)abra-nuke=true(?:&|$)/.test(window.location.search);return[r,t]}(),x=j[0],E=j[1];Object.keys(O).forEach((function(r){x[r]=O[r]}));var F,C=A||E,R=(F={var:n,if:c,"===":d,"!==":s,and:f,or:v,"!":l,">":g,">=":p,"<":b,"<=":w,"+":t,"-":i,"*":o,"/":e,"%":u,in:h,abtest_partition:y,regex_match:k,ref:function(r,n,t){var e=r(t,n)[0];return U(e)}},function n(t,e){if(e||(e={}),r(t))return t.map((function(r){return n(r,e)}));if(!function(n){return"object"==typeof n&&null!==n&&!r(n)&&1===Object.keys(n).length}(t))return t;var u=function(r){return Object.keys(r)[0]}(t),o=t[u];r(o)||(o=[o]);var i=F[u];if(!i)throw new Error("Unrecognized operation "+u);return i(n,e,o)}),U=function(r){if(!r)return null;var n=x[r];if(void 0===n){if(!C){if(Object.prototype.hasOwnProperty.call(x,r))throw new Error("circular logic");x[r]=void 0,n=R(a[r],m)}void 0===n&&(n=null),x[r]=n}return n};return U}}()).noConflict=function(){return r.Abra=n,t}}(this); +;(function () { var NYTD="undefined"!=typeof window&&window.NYTD?window.NYTD:{};function setupTimeZone(){var e='[data-timezone][data-timezone~="'+(new Date).getHours()+'"] { display: block }',t=document.createElement("style");t.innerHTML=e,document.head.appendChild(t)}function addNYTAppClass(){window.vi.webviewEnvironment.isInWebview&&document.documentElement.classList.add("NYTApp"),window.vi.webviewEnvironment.deviceType&&document.documentElement.classList.add(window.vi.webviewEnvironment.deviceType)}function addNYTPageTypeClass(){var e=window.vi.pageType.edge;e&&document.documentElement.classList.add("nytapp-"+e)}function setupPageViewId(){NYTD.PageViewId={},NYTD.PageViewId.update=function(){return"undefined"!=typeof nyt_et&&"function"==typeof window.nyt_et.get_pageview_id?(window.nyt_et("pageinit"),NYTD.PageViewId.current=window.nyt_et.get_pageview_id()):NYTD.PageViewId.current="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),NYTD.PageViewId.current}}var _f=function(e){e=e||{};try{document.domain="nytimes.com"}catch(e){}window.swgUserInfoXhrObject=new XMLHttpRequest,setupPageViewId(),setupTimeZone(),addNYTAppClass(),addNYTPageTypeClass(),window.nyt_et&&"function"==typeof window.nyt_et&&window.nyt_et("init",vi.env.ET2_URL,"nyt-vi",{subject:"page",canonicalUrl:(document.querySelector("link[rel=canonical]")||{}).href,articleId:(document.querySelector("meta[name=articleid]")||{}).content,nyt_uri:(document.querySelector("meta[name=nyt_uri]")||{}).content,pubpEventId:(document.querySelector("meta[name=pubp_event_id]")||{}).content,url:location.href,referrer:document.referrer||void 0,client_tz_offset:(new Date).getTimezoneOffset(),fastly_headers:e.fastlyHeaders||{}}),"undefined"!=typeof nyt_et&&"function"==typeof window.nyt_et.get_pageview_id?NYTD.PageViewId.current=window.nyt_et.get_pageview_id():NYTD.PageViewId.update()};;_f.apply(null, [{"gqlUrlClient":"https://samizdat-graphql.nytimes.com/graphql/v2","gqlRequestHeaders":{"nyt-app-type":"project-vi","nyt-app-version":"0.0.5","nyt-token":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+/oUCTBmD/cLdmcecrnBMHiU/pxQCn2DDyaPKUOXxi4p0uUSZQzsuq1pJ1m5z1i0YGPd1U1OeGHAChWtqoxC7bFMCXcwnE1oyui9G1uobgpm1GdhtwkR7ta7akVTcsF8zxiXx7DNXIPd2nIJFH83rmkZueKrC4JVaNzjvD+Z03piLn5bHWU6+w+rA+kyJtGgZNTXKyPh6EC6o5N+rknNMG5+CdTq35p8f99WjFawSvYgP9V64kgckbTbtdJ6YhVP58TnuYgr12urtwnIqWP9KSJ1e5vmgf3tunMqWNm6+AnsqNj8mCLdCuc5cEB74CwUeQcP2HQQmbCddBy2y0mEwIDAQAB"},"gqlFetchTimeout":1500,"disablePersistedQueries":false,"fastlyHeaders":{},"initialDeviceType":"smartphone","fastlyAbraConfig":{".ver":"9625.000","HOME_chartbeat":"0_Control","INT_cwv_v2_control_split":"","INT_cwv_dfp_deferAds_0322":"","Wirecutter_Growth_DEMO":"1_grow_variant"},"internalPreviewConfig":{},"webviewEnvironment":{"isInWebview":false},"serviceWorkerFile":"service-worker-test-1662742927491.js"}]); })();;(function () { var NYTD="undefined"!=typeof window&&window.NYTD?window.NYTD:{};var _f=function(a){window.Abra&&"function"==typeof window.Abra&&(NYTD.Abra=function(t){var r=(t.document.cookie.match(/(?:^|;) *nyt-a=([^;]*)/)||[])[1],n=[];t.dataLayer=t.dataLayer||[],l.config=a.abraConfig||{},l.reportedAllocations={},l.reportedExposures={};var e=a.shouldBypassAbraContextAlloc,o=(a.abraURL||"").match(/current[/]([a-zA-Z-]+).json/i);l.integration=o&&o.length>1?o[1]:"";try{l.version=t.Abra(l.config)(".ver")}catch(a){l.version=0}var i=l.config,c={agent_id:r},s=t.Abra(i,c);function l(a){return l.getAbraSync(a).variant}return l.getAbraSync=function(a){var t=l.reportedAllocations[a];if(void 0!==t)return{variant:t,allocated:!0};var r=null,n=!1;try{r=s(a),n=!0}catch(a){}return{variant:r,allocated:n}},l.reportExposure=function(a){var r=l.getAbraSync(a).variant;void 0!==l.reportedExposures[a]&&r===l.reportedExposures[a]||(l.reportedExposures[a]=r,t.dataLayer.push({event:"ab-expose",abtest:{test:a,variant:r||"0",config_ver:l.version,integration:l.integration}}))},l.alloc=function(){Object.keys(l.config).filter(function(a){return!a.includes(".")}).forEach(function(a){var t=l.getAbraSync(a);t.allocated&&(l.reportedAllocations[a]=t.variant,n.push({test:a,variant:t.variant}))}),t.dataLayer.push({event:"ab-alloc",abtest:{batch:n}}),e&&(l.allAllocations=n)},l.alloc(),l}(this))};;_f.apply(null, [{"abraConfig":{".ver":10252,"UXF_cookingstory_0521":{"abtest_partition":[{"var":"agent_id"},"UXF_cookingstory_0521",2147483647,"0_Control",4294967295,"1_cookpromo"]},"styln_trust_inline_explainers_0822":{"if":[{"and":[{"===":[{"ref":"styln_trust"},"1_Show"]}]},{"abtest_partition":[{"var":"agent_id"},"styln_trust_inline_explainers_0822",92341796,"0_Control",1144608783,"1_Variant",1146756267,"0_Control",1148903751,"0_Control",1153198718,"0_Control",1155346202,"0_Control",1157493685,"0_Control",1159641169,"0_Control",2190433320,"0_Control",2276332666,"1_Variant",2534030704,"0_Control",2791728741,"1_Variant",3199750635,"0_Control",3607772528,"1_Variant",3951369911,"0_Control",4294967295,"1_Variant"]}]},"styln_trust":{"abtest_partition":[{"var":"agent_id"},"styln_trust",214748364,"0_Control",4294967295,"1_Show"]},"STYLN_remove_relatedlinks":{"abtest_partition":[{"var":"agent_id"},"STYLN_remove_relatedlinks",4252017622,"0_control_STYLN_remove_relatedlinks",4294967295,"1_remove_relatedlinks"]},"STYLN_pharmacy_components":{"abtest_partition":[{"var":"agent_id"},"STYLN_pharmacy_components",4080218930,"show",4123168603,"hide",4294967295,"show"]},"STYLN_opinion_modules_recirc":{"if":[{"and":[{"===":[{"ref":"STYLN_pharmacy_components"},"show"]}]},{"abtest_partition":[{"var":"agent_id"},"STYLN_opinion_modules_recirc",2147483647,"0_control",4294967295,"1_opinion"]}]},"STYLN_more_in_storylines_recirc":{"abtest_partition":[{"var":"agent_id"},"STYLN_more_in_storylines_recirc",42949672,"0_control",85899345,"1_variant"]},"STYLN_live_updates":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_updates",214748364,"0_control",429496729,"2_live_updates",4294967295,"1_live_updates"]},"STYLN_live_transition_alerts":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_transition_alerts",4294967295,"1_show"]},"STYLN_live_polling_push":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_polling_push",214748364,"0_hide",4294967295,"1_show"]},"STYLN_live_olympics_push":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_olympics_push",214748364,"0_hide",4294967295,"1_show"]},"STYLN_live_noreaster_alerts":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_noreaster_alerts",214748364,"0_hide",4294967295,"1_show"]},"STYLN_live_newupdates":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_newupdates",214748364,"control",4294967295,"variant"]},"styln_live_desktop_alerts":{"abtest_partition":[{"var":"agent_id"},"styln_live_desktop_alerts",2147483647,"0_Control",3221225471,"1_alert_toggle",4294967295,"2_page_load"]},"STYLN_live_derek_chauvin_trial_alerts":{"if":[{"and":[{"===":[{"ref":"STYLN_pharmacy_components"},"show"]}]},{"abtest_partition":[{"var":"agent_id"},"STYLN_live_derek_chauvin_trial_alerts",214748364,"0_hide",4294967295,"1_show"]}]},"STYLN_live_chat":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_chat",21474835,"1_use_sse",408021892,"0_Control",429496729,"1_use_sse"]},"STYLN_live_barrett_hearings_alerts":{"abtest_partition":[{"var":"agent_id"},"STYLN_live_barrett_hearings_alerts",214748364,"0_hide",2147483647,"1_show",2362232012,"0_hide",4294967295,"1_show"]},"STYLN_liveblog_email":{"abtest_partition":[{"var":"agent_id"},"STYLN_liveblog_email",2147483647,"0_control",4294967295,"1_signup"]},"STYLN_lb_pinned_video":{"abtest_partition":[{"var":"agent_id"},"STYLN_lb_pinned_video",4294967295,"1_pin"]},"STYLN_lb_newposts":{"abtest_partition":[{"var":"agent_id"},"STYLN_lb_newposts",4080218930,"0_control",4294967295,"1_lb_newposts"]},"STYLN_election_2020_alerts":{"abtest_partition":[{"var":"agent_id"},"STYLN_election_2020_alerts",214748364,"0_hide",4294967295,"1_show"]},"STYLN_daily_question_block":{"abtest_partition":[{"var":"agent_id"},"STYLN_daily_question_block",644245093,"0_control",1288490188,"1_variant"]},"styln-trending-primary-asset":{"abtest_partition":[{"var":"agent_id"},"styln-trending-primary-asset",2147483647,"0_Control",4294967295,"1_Show"]},"styln-top-links2":{"if":[{"and":[{"!":{"in":[{"ref":"STYLN_pharmacy_components"},["hide"]]}}]},{"abtest_partition":[{"var":"agent_id"},"styln-top-links2",2147483647,"0_hide",4294967295,"1_show"]}]},"styln-primary-assets-block":{"abtest_partition":[{"var":"agent_id"},"styln-primary-assets-block",1073741823,"0_Control",4294967295,"1_Show"]},"styln-music-guide":{"if":[{"and":[{"===":[{"ref":"STYLN_pharmacy_components"},"show"]}]},{"abtest_partition":[{"var":"agent_id"},"styln-music-guide",2147483647,"0_Control",4294967295,"1_Show"]}]},"styln-amy-chua":{"if":[{"and":[{"===":[{"ref":"STYLN_pharmacy_components"},"show"]}]},{"abtest_partition":[{"var":"agent_id"},"styln-amy-chua",2147483647,"0_Control",4294967295,"1_Show"]}]},"STORY_topical_recirc":{"abtest_partition":[{"var":"agent_id"},"STORY_topical_recirc",2147483647,"0_control",4294967295,"1_variant"]},"STORY_recirc_algo_show_more":{"if":[{"and":[{"===":[{"var":"device_type"},"smartphone"]}]},{"abtest_partition":[{"var":"regi_id"},"STORY_recirc_algo_show_more",1417339207,"0_control",2834678414,"1_show_button_all",4294967295,"2_longer_feed"]}]},"SJ_welcome_subscriber_app_copy_test_0122":{"if":[{"and":[{"===":[{"var":"user_type"},"sub"]}]},{"abtest_partition":[{"var":"regi_id"},"SJ_welcome_subscriber_app_copy_test_0122",858993458,"0_control",4294967295,"0_control"]}]},"SJ_welcomeBanner_0222":{"if":[{"and":[{"===":[{"ref":"SJ_universal_holdout_0722"},"1_test"]}]},{"abtest_partition":[{"var":"regi_id"},"SJ_welcomeBanner_0222",10737417,"1_Skip_Top_Ad_Banner",107374181,"1_Skip_Top_Ad_Banner",4294967295,"1_Skip_Top_Ad_Banner"]}]},"SJ_universal_holdout_0722":{"if":[{"and":[{"===":[{"var":"user_type"},"sub"]}]},{"abtest_partition":[{"var":"regi_id"},"SJ_universal_holdout_0722",85899345,"0_holdout",4294967295,"1_test"]}]},"SJ_newsletter_list_01_0222":{"abtest_partition":[{"var":"regi_id"},"SJ_newsletter_list_01_0222",1073741823,"0_control",4294967295,"0_control"]},"SJ_early_tenure_subscriber_test_0712":{"abtest_partition":[{"var":"regi_id"},"SJ_early_tenure_subscriber_test_0712",4294967295,"0_Control"]},"SJ_disrupter_rollout_0822":{"abtest_partition":[{"var":"agent_id"},"SJ_disrupter_rollout_0822",171798691,null]},"SJ_disrupter_post90_0822":{"abtest_partition":[{"var":"agent_id"},"SJ_disrupter_post90_0822",12884901,null,128849018,null]},"SJ_ADA_Onboarding_0622":{"abtest_partition":[{"var":"regi_id"},"SJ_ADA_Onboarding_0622",4294967295,"1_NewDLVisuals"]},"SA_Referral_iframe_0520":{"abtest_partition":[{"var":"agent_id"},"SA_Referral_iframe_0520",4294967295,"1_useiframe"]},"SA_get_started_now_01_0921":{"abtest_partition":[{"var":"regi_id"},"SA_get_started_now_01_0921",858993458,"0_control",4294967295,"0_control"]},"SA_get_started_later_01_0621":{"abtest_partition":[{"var":"regi_id"},"SA_get_started_later_01_0621",2147483647,"0_control",3435973836,"0_control",4294967295,"0_control"]},"SA_breadth_step_01_0421":{"abtest_partition":[{"var":"regi_id"},"SA_breadth_step_01_0421",2147483647,"0_control",4294967295,"0_control"]},"SA_app_step_01_0521":{"abtest_partition":[{"var":"regi_id"},"SA_app_step_01_0521",4294967295,"0_control"]},"ON_User_State_API":{"abtest_partition":[{"var":"agent_id"},"ON_User_State_API",4294967295,"1_user_state"]},"ON_testIgnoreMe_0902":{"if":[{"and":[{"!":{"in":[{"var":"user_type"},["sub"]]}}]},{"abtest_partition":[{"var":"regi_id"},"ON_testIgnoreMe_0902",2147483647,"0_Control",4294967295,"1_variant"]}]},"ON_MAPS_audience_split":{"abtest_partition":[{"var":"agent_id"},"ON_MAPS_audience_split",2147483647,"0_onboarding",4294967295,"1_maps"]},"ON_formers_benefits_paywall":{"abtest_partition":[{"var":"regi_id"},"ON_formers_benefits_paywall",858993458,"3_basic",4294967295,"3_basic"]},"ON_app_dl_mweb_hp_regi_final":{"if":[{"and":[{"!":{"in":[{"var":"user_type"},["sub"]]}}]},{"abtest_partition":[{"var":"regi_id"},"ON_app_dl_mweb_hp_regi_final",214748364,"0_control",4294967295,"0_control"]}]},"ON_app_dl_mweb_hp_dummy":{"if":[{"and":[{"!":{"in":[{"var":"user_type"},["sub"]]}}]},{"abtest_partition":[{"var":"regi_id"},"ON_app_dl_mweb_hp_dummy",1073741823,"0_control",2147483647,"1_dock_std",3221225471,"2_dock_exp",4294967295,"3_custom_dock"]}]},"MX_message_selection_integration_0722":{"abtest_partition":[{"var":"agent_id"},"MX_message_selection_integration_0722",4294967295,"0_message_selection_turned_off"]},"MKT_welcome_ad_stp_1120":{"abtest_partition":[{"var":"agent_id"},"MKT_welcome_ad_stp_1120",2147483647,"0_control",4294967295,"1_welcome_stp"]},"MKT_segops_regi_bundle_login_test":{"abtest_partition":[{"var":"agent_id"},"MKT_segops_regi_bundle_login_test",4294967295,"1_login"]},"MKT_not_ready_to_sub_survey":{"abtest_partition":[{"var":"agent_id"},"MKT_not_ready_to_sub_survey",3221225471,"0_control",3435973836,"1_survey",4294967295,"0_control"]},"MKT_formers_benefits_paywall_0822":{"if":[{"and":[{"!":{"in":[{"ref":"ON_formers_benefits_paywall"},["1_ada_benefits_150","2_ada_simple_150"]]}}]},{"abtest_partition":[{"var":"regi_id"},"MKT_formers_benefits_paywall_0822",536870911,"0_control",1073741823,"1_ada_benefits_150",1610612735,"2_ada_simple_150",2147483647,"3_basic"]}]},"MKT_dfp_hd_paywall_zip":{"abtest_partition":[{"var":"agent_id"},"MKT_dfp_hd_paywall_zip",2147483647,"0_control",4294967295,"1_zip"]},"MKT_CKGiftLPTest_creativeredesign":{"abtest_partition":[{"var":"agent_id"},"MKT_CKGiftLPTest_creativeredesign",1431942095,"0_control",2863454695,"1_ck_gift_shortlp",4294967295,"2_ck_gift_longlp"]},"MAPS_subonly_cards_gs_092021":{"if":[{"and":[{"===":[{"var":"user_type"},"sub"]}]},{"abtest_partition":[{"var":"agent_id"},"MAPS_subonly_cards_gs_092021",1073741823,"2_subandfree",4294967295,"2_subandfree"]}]},"MAPS_scrolly_preview_test":{"abtest_partition":[{"var":"agent_id"},"MAPS_scrolly_preview_test",858993458,"0_Control",2290506058,"1_scroll_without_recirc",3722018658,"2_scroll_with_recirc",4008492976,"1_scroll_without_recirc",4294967295,"2_scroll_with_recirc"]},"MAPS_foryou_optin_0421":{"if":[{"and":[{"in":[{"var":"user_type"},["regi"]]},{"===":[{"ref":"ON_MAPS_audience_split"},"1_maps"]}]},{"abtest_partition":[{"var":"agent_id"},"MAPS_foryou_optin_0421",1431942095,"0_control",2863454695,"1_interests",4294967295,"2_auto_optin"]}]},"MAPS_cwv_email_signup_dock_0322":{"if":[{"and":[{"===":[{"var":"user_type"},"sub"]}]},{"abtest_partition":[{"var":"regi_id"},"MAPS_cwv_email_signup_dock_0322",1460288880,"0_control",2877628087,"1_dock_simple",4294967295,"2_dock_descriptive"]}]},"InvolChurn_CopyUpdate":{"abtest_partition":[{"var":"agent_id"},"InvolChurn_CopyUpdate",2147483647,"0_control",4294967295,"1_concisemessage"]},"dfp_wordlebot_ad":{"abtest_partition":[{"var":"agent_id"},"dfp_wordlebot_ad"]},"DFP_Prebid_Price_0722":{"abtest_partition":[{"var":"agent_id"},"DFP_Prebid_Price_0722",1438814043,"0_Control",2727304232,"1_Dense",2748779068,"0_Control",2791728741,"0_Control",2834678414,"0_Control",2856153251,"0_Control",2920577760,"0_Control",2963527433,"0_Control",3006477106,"0_Control",3049426779,"0_Control",3135326125,"0_Control",3178275798,"0_Control",3199750635,"0_Control",3221225471,"0_Control",3242700307,"0_Control",3264175144,"0_Control",3285649980,"0_Control",3307124817,"0_Control",3393024163,"0_Control",3414498999,"0_Control",3435973836,"0_Control",4294967295,"1_Dense"]},"dfp_messaging_flexframe_ctr":{"abtest_partition":[{"var":"agent_id"},"dfp_messaging_flexframe_ctr",322122546,"2_noheadnosummary",644245093,"1_msgInv_noCTA",4294967295,"0_control"]},"DFP_live_0722":{"abtest_partition":[{"var":"agent_id"},"DFP_live_0722",429496729,"0_Control",3865470565,"1_Top",4294967295,"2_Top_Mid"]},"DFP_Higher_Ads_0622":{"abtest_partition":[{"var":"agent_id"},"DFP_Higher_Ads_0622",42949672,"0_Control",4294967295,"0_Control"]},"DFP_EngMetrics":{"abtest_partition":[{"var":"agent_id"},"DFP_EngMetrics",42949672,"0_control",85899345,"1_hover"]},"DFP_blockDetect_0221":{"abtest_partition":[{"var":"agent_id"},"DFP_blockDetect_0221",1073741823,"1_network_detection",4294967295,null]},"DFP_amzn":{"abtest_partition":[{"var":"agent_id"},"DFP_amzn",42949672,"0_control",429642757,"0_control",472540891,"1_amzn_fast_fetch",515490564,"2_adslot_priority",901994671,"2_adslot_priority",944892804,"3_no_mnet"]},"DFP_als_home":{"abtest_partition":[{"var":"agent_id"},"DFP_als_home",4294967295,"1_als"]},"DFP_als":{"abtest_partition":[{"var":"agent_id"},"DFP_als",4294967295,"1_als"]},"dfp_adslot4v2":{"abtest_partition":[{"var":"agent_id"},"dfp_adslot4v2",4294967295,"1_external"]},"DATAGOV_banner_202110":{"abtest_partition":[{"var":"agent_id"},"DATAGOV_banner_202110",3435973836,"0_Control",4294967295,"1_RejectAll"]},"APP_2021H1_SLS":{"if":[{"and":[{"===":[{"var":"user_type"},"sub"]}]},{"abtest_partition":[{"var":"regi_id"},"APP_2021H1_SLS",1159641169,"1_share",1932735282,"1_share",4294967295,"1_share"]}]},"ACCT_RegiLoginConfusion":{"abtest_partition":[{"var":"regi_id"},"ACCT_RegiLoginConfusion",1431942095,"0_control",2863454695,"1_linkSwitchAccount",4294967295,"2_linkSwitchAccountMessage"]},"ACCT_MastheadUserModal":{"abtest_partition":[{"var":"regi_id"},"ACCT_MastheadUserModal",1431942095,"0_control",2863454695,"1_drawerDesign",4294967295,"2_drawerDesignAccountIA"]}},"abraURL":"https://a1.nyt.com/abra-config/current/vi-prd.json","shouldBypassAbraContextAlloc":false}]); })();;(function () { var _f=function(e){var r=function(){var r=e.url;try{r+=window.location.search.slice(1).split("&").reduce(function(e,r){return"ip-override"===r.split("=")[0]?"?"+r:e},"")}catch(e){console.warn(e)}var n=new XMLHttpRequest;for(var t in n.withCredentials=!0,n.open("POST",r,!0),n.setRequestHeader("Content-Type","application/json"),e.headers)n.setRequestHeader(t,e.headers[t]);return n.send(e.body),n};window.userXhrObject=r(),window.userXhrRefresh=function(){return window.userXhrObject=r(),window.userXhrObject}};;_f.apply(null, [{"url":"https://samizdat-graphql.nytimes.com/graphql/v2","body":"{\"operationName\":\"UserQuery\",\"variables\":{},\"query\":\" query UserQuery { user { __typename profile { displayName email } userInfo { regiId entitlements demographics { emailSubscriptions wat } } subscriptionDetails { bundleType cancellationDate graceStartDate graceEndDate isFreeTrial hasQueuedSub startDate endDate status hasActiveEntitlements entitlements billingSource promotionTierType subscriptionName } } } \"}","headers":{"nyt-app-type":"project-vi","nyt-app-version":"0.0.5","nyt-token":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+/oUCTBmD/cLdmcecrnBMHiU/pxQCn2DDyaPKUOXxi4p0uUSZQzsuq1pJ1m5z1i0YGPd1U1OeGHAChWtqoxC7bFMCXcwnE1oyui9G1uobgpm1GdhtwkR7ta7akVTcsF8zxiXx7DNXIPd2nIJFH83rmkZueKrC4JVaNzjvD+Z03piLn5bHWU6+w+rA+kyJtGgZNTXKyPh6EC6o5N+rknNMG5+CdTq35p8f99WjFawSvYgP9V64kgckbTbtdJ6YhVP58TnuYgr12urtwnIqWP9KSJ1e5vmgf3tunMqWNm6+AnsqNj8mCLdCuc5cEB74CwUeQcP2HQQmbCddBy2y0mEwIDAQAB"}}]); })();;(function () { var registry=window._interactiveRegistry={};function getId(t){for(;(t=t.parentElement)&&!t.matches("[data-sourceid].interactive-body"););return t?t.getAttribute("data-sourceid"):null}window.registerInteractive=function(t){var e={_subs:{cleanup:[],remount:[]},id:t,on:function(t,r){return this._subs[t].push(r),e}};registry[t]=e},window.getInteractiveBridge=function(t){var e="string"==typeof t?t:getId(t);return registry[e]}; })();;(function () { var _f=function(){"function"!=typeof window.onInitNativeAds&&(window.onInitNativeAds=function(){})};;_f.apply(null, []); })(); + </script> + <script>!function(e){function t(t){for(var n,a,i=t[0],l=t[1],f=t[2],c=0,s=[];c<i.length;c++)a=i[c],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t);s.length;)s.shift()();return u.push.apply(u,f||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,i=1;i<r.length;i++){var l=r[i];0!==o[l]&&(n=!1)}n&&(u.splice(t--,1),e=a(a.s=r[0]))}return e}var n={},o={87:0},u=[];function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=n,a.d=function(e,t,r){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(a.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)a.d(r,n,function(t){return e[t]}.bind(null,n));return r},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="/vi-assets/static-assets/";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var f=0;f<i.length;f++)t(i[f]);var p=l;r()}([]); +//# sourceMappingURL=runtime~adslot-d624c64683857e276da4.js.map</script> + <script async src="/vi-assets/static-assets/adslot-b2073fe8eb38885b0585.js"></script> + + <script data-rh="true" > + (function () { var _f=function(){const o="1_block";function n(o){return window&&window.NYTD&&window.NYTD.Abra?window.NYTD.Abra(o):""}window.adClientUtils={hasActiveToggle:function(r){return n(r)!==o},getAbraVar:n,reportExposure:function(o){window&&window.NYTD&&window.NYTD.Abra&&window.NYTD.Abra.reportExposure&&window.NYTD.Abra.reportExposure(o)}}};;_f.apply(null, []); })(); + (function () { undefined })(); + (function () { var _f=function(){var t,e,o=50,n=50;function i(t){if(!document.getElementById("3pCheckIframeId")){if(t||(t=1),!document.body){if(t>o)return;return t+=1,setTimeout(i.bind(null,t),n)}var e,a,r;e="https://static01.nyt.com/ads/tpc-check.html",a=document.body,(r=document.createElement("iframe")).src=e,r.id="3pCheckIframeId",r.style="display:none;",r.height=0,r.width=0,a.insertBefore(r,a.firstChild)}}function a(t){if("https://static01.nyt.com"===t.origin)try{"3PCookieSupported"===t.data&&googletag.cmd.push(function(){googletag.pubads().setTargeting("cookie","true")}),"3PCookieNotSupported"===t.data&&googletag.cmd.push(function(){googletag.pubads().setTargeting("cookie","false")})}catch(t){}}function r(){if(function(){if(Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0)return!0;if("[object SafariRemoteNotification]"===(!window.safari||safari.pushNotification).toString())return!0;try{return window.localStorage&&/Safari/.test(window.navigator.userAgent)}catch(t){return!1}}()){try{window.openDatabase(null,null,null,null)}catch(e){return t(),!0}try{localStorage.length?e():(localStorage.x=1,localStorage.removeItem("x"),e())}catch(o){navigator.cookieEnabled?t():e()}return!0}}!function(){try{googletag.cmd.push(function(){googletag.pubads().setTargeting("cookie","unknown")})}catch(t){}}(),t=function(){try{googletag.cmd.push(function(){googletag.pubads().setTargeting("cookie","private")})}catch(t){}}||function(){},e=function(){window.addEventListener("message",a,!1),i(0)}||function(){},function(){if(window.webkitRequestFileSystem)return window.webkitRequestFileSystem(window.TEMPORARY,1,e,t),!0}()||r()||function(){if(!window.indexedDB&&(window.PointerEvent||window.MSPointerEvent))return t(),!0}()||e()};;_f.apply(null, ["dfp_story_toggle"]); })(); + </script><script data-rh="true" id="als-svc">(function () { var _f=function(e,t,a){var n;if(!(n=a,!!(window&&window.adClientUtils&&window.adClientUtils.hasActiveToggle)&&window.adClientUtils.hasActiveToggle(n)))return;!function(e){window&&window.NYTD&&window.NYTD.Abra&&window.NYTD.Abra.reportExposure(e)}(a);let i=()=>{var e=new Date,t=e.getFullYear();return e.getMonth()<9&&(t+="0"),t+=e.getMonth()+1,e.getDate()<10&&(t+="0"),t+=e.getDate(),e.getHours()<10&&(t+="0"),t+=e.getHours(),e.getMinutes()<10&&(t+="0"),t+=e.getMinutes(),e.getSeconds()<10&&(t+="0"),t+e.getSeconds()};window.googletag=window.googletag||{},googletag.cmd=googletag.cmd||[];let o=new URLSearchParams(location.search).get("alice_rules_test");var l,s=new XMLHttpRequest,r=window.vi.env.ALS_URL,d=document.querySelector('[name="nyt_uri"]');if(t)l="uri="+(g=t);else if("/"===location.pathname){var g=encodeURIComponent("https://www.nytimes.com/pages/index.html");l="uri="+g}else if(void 0===d||""===d||null===d){var c=e||location.protocol+"//"+location.hostname+location.pathname;l="url="+encodeURIComponent(c)}else{g=encodeURIComponent(d.content);l="uri="+g}var u=document.querySelector('[name="template"]'),w=document.querySelector('[name="prop"]'),m=document.querySelector('[name="plat"]'),p=null==u||null==u.content?"":u.content,_=null==w||null==w.content?"nyt":w.content,v=null==m||null==m.content?"web":m.content;window.innerWidth<740&&(_="mnyt",v="mweb");var b=window.localStorage.getItem("als_test_clientside"),f=null;window.googletag.cmd.push(function(){var e=b&&0!==b.length?b:"empty_empty_empty_"+i(),t=f||e;googletag.pubads().setTargeting("als_test_clientside",t)});var h=window.localStorage.getItem("mktg"),y=null;window.googletag.cmd.push(function(){var e=y||h;e&&googletag.pubads().setTargeting("mktg",e)});var U,L=window.localStorage.getItem("bt");window.googletag.cmd.push(function(){var e=U||L;e&&googletag.pubads().setTargeting("bt",e)});var T=window.localStorage.getItem("sub"),S=null;window.googletag.cmd.push(function(){var e=S||T;e&&googletag.pubads().setTargeting("sub",e)}),l=null==o?l:l+"&alice_rules_test="+o,s.open("GET",r+"/als?"+l+"&typ="+p+"&prop="+_+"&plat="+v,!0),s.withCredentials=!0,s.send(),s.onerror=function(){var e="reqfailed_reqfailed_reqfailed_"+i();f=e,window.googletag.cmd.push(function(){googletag.pubads().setTargeting("als_test_clientside",e)});var t={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-reqfail-"+l}};(window.dataLayer=window.dataLayer||[]).push(t)},s.onreadystatechange=function(){if(4===s.readyState)if(200===s.status){var e=JSON.parse(s.responseText);f=e.als_test_clientside&&0!==e.als_test_clientside.length?e.als_test_clientside:"bou_bou_bou_"+i(),void 0!==e.User&&(void 0!==e.User.mktg&&(y=e.User.mktg,window.localStorage.setItem("mktg",e.User.mktg)),void 0!==e.User.bt&&(U=e.User.bt,window.localStorage.setItem("bt",e.User.bt)),void 0!==e.User.sub&&(S=e.User.sub,window.localStorage.setItem("sub",e.User.sub))),window.googletag.cmd.push(function(){if(e.als_test_clientside&&0!==e.als_test_clientside.length)googletag.pubads().setTargeting("als_test_clientside",e.als_test_clientside),window.localStorage.setItem("als_test_clientside","ls-"+e.als_test_clientside);else{var t=void 0===e.als_test_clientside?"undefined_undefined_undefined_"+i():"blank_blank_blank_"+i();googletag.pubads().setTargeting("als_test_clientside",t);var a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-test-client-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}if(void 0!==e.User){if(y)googletag.pubads().setTargeting("mktg",y);else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-mktg-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}if(void 0!==U)googletag.pubads().setTargeting("bt",U);else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-bt-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}if(S)googletag.pubads().setTargeting("sub",S);else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-sub-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}(e.User.lucidC1||e.User.lucidC2||e.User.lucidC3||e.User.lucidC4||e.User.lucidC5)&&dataLayer.push({event:"lucidtest",c1_val:e.User.lucidC1,c2_val:e.User.lucidC2,c3_val:e.User.lucidC3,c4_val:e.User.lucidC4,c5_val:e.User.lucidC5})}else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-user-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}if(void 0!==e.Asset)for(var n in e.Asset){var o=e.Asset[n];if(o)googletag.pubads().setTargeting(n,o);else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-"+n+"-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}}else{a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-asset-undefined"}};(window.dataLayer=window.dataLayer||[]).push(a)}})}else{s.responseText.substring(0,40);var t="error_"+s.status+"_error_"+i();window.googletag.cmd.push(function(){googletag.pubads().setTargeting("als_test_clientside",t)});var a={event:"impression",module:{name:"alice-timing",context:"script-load",label:"alice-error-ajaxreq-"+s.status+"-"+l}};(window.dataLayer=window.dataLayer||[]).push(a)}}};;_f.apply(null, [null,null,"als_toggle"]); })();</script><script data-rh="true" id="adslot-config">(function() { + var AdSlot4=function(){"use strict";function a(){return window.AdSlot4=window.AdSlot4||{},window.AdSlot4.cmd=window.AdSlot4.cmd||[],window.AdSlot4}function n(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}function t(e){return-1!==document.cookie.indexOf(e)}function o(e){var n={PURR_AcceptableTrackers:0,PURR_AdConfiguration:5,PURR_DataSaleOptOutUI:2,PURR_DataProcessingConsentUI:3,PURR_AcceptableTrackers_v2:4,PURR_AdConfiguration_v2:5,PURR_DataProcessingPreferenceUI:6,PURR_DataSaleOptOutUI_v2:7,PURR_CaliforniaNoticesUI:8,PURR_EmailMarketingOptInUI:9,PURR_DeleteIPAddress:10,PURR_AdConfiguration_v3:11},t=function(e){e=("; "+document.cookie).split("; "+e+"=");return 2===e.length?e.pop().split(";").shift():null}(e),o={};return Object.keys(n).forEach(function(e){o[e]=function(e,n){n=new RegExp("^.{"+n+"}(.)"),n=e.match(n);return(null==n?void 0:n[1])||""}(t,n[e])}),d.forEach(function(n){Object.keys(n.valueMapping).forEach(function(e){n.valueMapping[e]===o[n.name]&&(o[n.name]=e)})}),o}function i(){var e;try{return function(){if("undefined"==typeof window)return!1;var e=window.navigator.userAgent||window.navigator.vendor,n=-1!==e.indexOf("nyt_android"),t=-1!==e.indexOf("nytios"),o=-1!==e.indexOf("nyt_xwords_ios"),e=-1!==e.indexOf("Crosswords");return n||t||o||e}()?null!==(e=null===window||void 0===window?void 0:window.config)&&void 0!==e&&e.PurrDirectives?window.config.PurrDirectives:t("override-purr")?o("override-purr"):r({},c):t("nyt-purr")?o("nyt-purr"):r({},c)}catch(e){return console.warn("can’t get directives from cookie or config",e),r({},c)}}var r=function(){return(r=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)},d=[{name:"PURR_AcceptableTrackers",valueMapping:{controllers:"c",processors:"p"}},{name:"PURR_AdConfiguration",valueMapping:{full:"f",npa:"n","adluce-socrates":"s"}},{name:"PURR_DataSaleOptOutUI",valueMapping:{hide:"h",show:"s"}},{name:"PURR_DataProcessingConsentUI",valueMapping:{hide:"h",show:"s"}},{name:"PURR_AcceptableTrackers_v2",valueMapping:{controllers:"c",processors:"p",essentials:"e"}},{name:"PURR_AdConfiguration_v2",valueMapping:{full:"f",rdp:"r",npa:"n",adluce:"a","adluce-socrates":"s"}},{name:"PURR_DataProcessingPreferenceUI",valueMapping:{hide:"h","allow-opt-out":"o","allow-opt-in":"i","allow-opt-in-or-out":"a"}},{name:"PURR_DataSaleOptOutUI_v2",valueMapping:{hide:"h",show:"s","show-opted-out":"o"}},{name:"PURR_CaliforniaNoticesUI",valueMapping:{hide:"h",show:"s"}},{name:"PURR_EmailMarketingOptInUI",valueMapping:{checked:"c",unchecked:"u"}},{name:"PURR_DeleteIPAddress",valueMapping:{delete:"d",keep:"k"}},{name:"PURR_AdConfiguration_v3",valueMapping:{full:"f",rdp:"r",npa:"n",ltd:"l","adluce-socrates":"s"}}],c={PURR_DataSaleOptOutUI:"hide",PURR_DataSaleOptOutUI_v2:"hide",PURR_CaliforniaNoticesUI:"hide",PURR_DataProcessingConsentUI:"hide",PURR_DataProcessingPreferenceUI:"hide",PURR_AcceptableTrackers_v2:"controllers",PURR_AcceptableTrackers:"controllers",PURR_AdConfiguration_v2:"full",PURR_AdConfiguration:"full",PURR_EmailMarketingOptInUI:"checked",PURR_DeleteIPAddress:"delete",PURR_AdConfiguration_v3:"full"};function e(){return"full"===(e={},n()&&(e=i().PURR_AdConfiguration_v3||i().PURR_AdConfiguration_v2),e);var e}function u(){return!(!!n()&&null!==window.navigator.userAgent.match(/nyt[-_]?(?:ios|android)/i))&&e()}function l(e,n,t){var o=document.getElementsByTagName("head")[0],i=document.createElement("script");n&&(i.onload=n),t&&(i.onerror=t),i.src=e,i.async=!0,o.appendChild(i)}function s(){a().cmd.push(function(){var e="".concat("GeoEdge"," failed to load");a().events.publish({name:h,value:{message:e}})})}function p(){return!window.grumi&&(l("//rumcdn.geoedge.be/b3960cc6-bfd2-4adc-910c-6e917e8a6a0e/grumi-ip.js",null,s),window.grumi={key:"b3960cc6-bfd2-4adc-910c-6e917e8a6a0e",cfg:{advs:v}})}function m(){var e;window.apstag||(e="".concat(_," not loading properly"),console.warn(e))}function f(){a().cmd.push(function(){var e="".concat(_," failed to load");a().events.publish({name:U,value:{type:_,message:e}})})}function w(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window;return e.googletag=e.googletag||{},e.googletag.cmd=e.googletag.cmd||[],e.googletag}function g(e){return!(!window.apstag||!window.apstag.fetchBids)&&(window.apstag.fetchBids({slots:e},void(window.apstag&&window.apstag.setDisplayBids&&w().cmd.push(window.apstag.setDisplayBids()))),!0)}var v={32074718:!0,4792640386:!0,21966278:!0,4558311760:!0,4552626466:!0,4400775978:!0,39318518:!0,4874174581:!0,33597638:!0,38636678:!0,38637278:!0,33597998:!0,33613118:!0},h="script_loader_error",_="A9",b=[[300,250],[728,90],[970,90],[970,250]],R="large",P="medium",y="small",U="BidderError",A="AdEmpty",k="AdBlockOn",x="AdDefined",I="AdRefreshed";function C(e,n){var t;return(e=[].concat((t=n,[].concat(e).slice().sort(function(e,n){return n[0]-e[0]}).find(function(e){return!Number.isNaN(e[0])&&e[0]<t}))).pop())&&e.length?e:null}function D(i){return function(){var e,n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=n.sizes,o=void 0===t?[]:t,t=n.truePosition,n=n.id,o=C(o,window.innerWidth),o=(e=o,Array.isArray(e)?b.filter(function(n){return e.some(function(e){return e[0]===n[0]&&e[1]===n[1]})}):(console.warn("filterSizes() did not receive an array"),[]));if(0<o.length){o=[{slotID:t||n,slotName:"".concat(t||n,"_").concat(i,"_web"),sizes:o}];return g(o),!0}return!1}}function O(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function z(t,o){return E.map(function(e){var n=e.id,e=e.sizes;return{slotID:n,slotName:"".concat(n,"_").concat(o,"_web"),sizes:(e=e)[t]||e[y]}})}function S(n,t){a().cmd.push(function(){var e;n&&g(z(740<(e=window.innerWidth)?R:600<e?P:y,t)),a().events.subscribe({name:x,scope:"all",callback:D(t)})})}function j(e,n,t){(function(){var e,t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"apstag",o=1<arguments.length&&void 0!==arguments[1]?arguments[1]:window;return o[t]||(e=function(e,n){return o[t]._Q.push([e,n])},o[t]={_Q:[],init:function(){e("i",arguments)},fetchBids:function(){e("f",arguments)},setDisplayBids:function(){},targetingKeys:function(){return[]}}),o[t]})("apstag",window).init({pubID:"3030",adServer:"googletag",params:{si_section:n}}),S(e,t)}function T(e,n){var t;switch(n.includes(H)?H:n){case q:t=e.top;break;case H:t=e.mid;break;case Q:t=e.bottom;break;default:t=e.default}return t}function M(e){var n;switch(e){case"livebl":n="hp";break;case"int":n="art";break;case"coll":n="sf";break;default:n=e}return n in B||(n="default"),n}var E=[{id:"dfp-ad-top",sizes:(O(ce={},R,[[728,90],[970,90],[970,250]]),O(ce,P,[[728,90],[300,250]]),O(ce,y,[[300,250],[300,420]]),ce)},{id:"top",sizes:(O(de={},R,[[728,90],[970,90],[970,250]]),O(de,P,[[728,90],[300,250]]),O(de,y,[[300,250],[300,420]]),de)}],B={art:{id:["top","story-ad-1","story-ad-2","story-ad-3","story-ad-4","story-ad-5","story-ad-6","bottom"],pos:["top","mid1","mid2","mid3","mid4","mid5","mid6","bottom"]},hp:{id:["dfp-ad-top","dfp-ad-mid1","dfp-ad-mid2","dfp-ad-mid3","dfp-ad-bottom"],pos:["top","mid1","mid2","mid3","bottom"]},ss:{id:["right-0","right-1","right-2","right-3"],pos:["mid1","mid1","mid1","mid1"],size:{small:[[300,250]],medium:[[300,250]],large:[[300,250]]}},sf:{id:["top","mid1","mid2"],pos:["top","mid1","mid2"],size:{small:[[300,250],[300,420]],medium:[[300,250],[300,420]],large:[[300,250],[300,420]]}},games:{id:["TopAd","TopAd1"],pos:["top","bottom"]},default:{id:["top","mid1","mid2"],pos:["top","mid1","mid2"],size:{small:[[300,250],[300,420]],medium:[[728,90]],large:[[728,90],[970,90],[970,250]]}}},N={top:2088370,mid:2088372,bottom:2088374,default:2088376},Y={top:544112060,mid:544112063,bottom:544112062,default:544112065},V={top:684296214,mid:190706820,bottom:932254072,default:153468583},F={top:"NYTimes_728x90_970_top_PB",mid:"NYTimes_728x90_970_mid_PB",botom:"NYTimes_728x90_970_bot_PB",default:"NYTimes_728x90_970_mid_PB"},G={buckets:[{max:10,increment:.05},{max:20,increment:.1},{max:50,increment:.5},{max:101,increment:1}]},q="top",H="mid",Q="bottom";function W(o,e,i){var a=M(e),r=B[a].size?a:"default";return B[a].pos.reduce(function(e,n,t){t=B[a].id[t],t={code:t,mediaTypes:{banner:{sizeConfig:[{minViewPort:[970,0],sizes:(i&&i[t]?i[t]:B[r]).size.large},{minViewPort:[728,0],sizes:(i&&i[t]?i[t]:B[r]).size.medium},{minViewPort:[0,0],sizes:B[r].size.small}]}},bids:(t=n,[{bidder:"appnexus",params:{member:3661,invCode:"nyt_".concat(n=o,"_").concat(t)}},{bidder:"medianet",params:{cid:"8CU4WQK98",crid:T(V,t)}},{bidder:"rubicon",params:{accountId:12330,siteId:378266,inventory:{invCode:["nyt_".concat(n,"_").concat(t)]},zoneId:T(N,t)}},{bidder:"openx",params:{unit:T(Y,t),delDomain:"nytimes-d.openx.net",customParams:{invCode:"nyt_".concat(n,"_").concat(t)}}},{bidder:"triplelift",params:{inventoryCode:T(F,t)}}])};return e.push(t),e},[])}function Z(t){window.pbjs=window.pbjs||{},window.pbjs.initAdserverSet||(window.pbjs.initAdserverSet=!0,a().cmd.push(function(){a().events.subscribe({name:x,scope:"all",callback:function(n){w().cmd.push(function(){var e;(e=M(e=t),B[e].id).includes(n.id)&&window.pbjs.setTargetingForGPTAsync([n.id])})}})}))}function K(t,e,n,o){function i(e,n){window.pbjs.initAdserverSet=!1,t.requestBids({bidsBackHandler:function(){Z(e)},timeout:n})}a().cmd.push(function(){t.que.push(function(){t.addAdUnits(W(e,n,o)),i(n,1e4),a().events.subscribe({name:I,scope:"all",callback:function(){i(n,800)}})})})}function L(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},o=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:window;return e.pbjs=e.pbjs||{},e.pbjs.que=e.pbjs.que||[],e.pbjs}(),i=t.priceGranularity,t=t.sizeConfig;o.setConfig({priceGranularity:i||G}),K(o,e,n,t)}function J(){a().cmd.push(function(){var e="".concat("PreBid"," failed to load");a().events.publish({name:U,value:{type:"PreBid",message:e}})})}function X(e,n,t){return!window.pbjs&&(l("https://www.nytimes.com/ads/prebid6.8.0.js",(o=e,i=n,a=t,function(){window.pbjs||console.log("prebid did not load"),L(o,i,a)}),J),!0);var o,i,a}function $(){try{var e=((n=document.createElement("div")).innerHTML=" ",n.className="ad adsbox pub_300x250 pub_300x250m pub_728x90 text-ad textAd text_ad ad-server",n.style="width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;",document.body.prepend(n),document.getElementsByClassName("ad adsbox")[0]),n=!(!(n=e)||0!==n.offsetHeight&&0!==n.clientHeight)||function(e){if(void 0!==window.getComputedStyle){e=window.getComputedStyle(e,null);if(e&&("none"===e.getPropertyValue("display")||"hidden"===e.getPropertyValue("visibility")))return!0}return!1}(e);return e=e,document.body.removeChild(e),n}catch(e){console.error("ad class check failed",e)}var n;return!1}function ee(){return!(window&&window.AdSlot&&window.AdSlot.AdSlotReady)||(!(window&&window.googletag&&window.googletag.apiReady)||$())}function ne(){var e=window&&window.nyt_et&&window.nyt_et.get_host&&window.nyt_et.get_host();return e?fetch("".concat(e,"/.status"),{credentials:"include",headers:{accept:"*/*","content-type":"text/plain;charset=UTF-8"},mode:"no-cors"}).then(function(){return{success:!0}}).catch(function(e){return console.error("et track blocked",e),{success:!1}}):Promise.resolve({success:!1})}function te(e,n,t){var o=(i="nyt-a",(document&&document.cookie&&document.cookie.match&&(i=document.cookie.match(new RegExp("".concat(i,"=([^;]+)"))))?i[1]:"")||null),i=!!(window&&window.matchMedia&&window.matchMedia("(max-width: 739px)").matches);return"".concat("https://a-reporting.nytimes.com/report.jpg","?mobile=").concat(i,"&block=").concat(t,"&aid=").concat(o,"&pvid=").concat(e,"&et=").concat(n)}function oe(e,n,t){return!!(window&&window.NYTD&&window.NYTD.Abra&&"1_network_detection"===window.NYTD.Abra("DFP_blockDetect_0221"))&&((new Image).src=te(e,n,t),!0)}function ie(e,n){n&&a().cmd.push(function(){var e=a();e.events&&e.events.publish({name:A,value:{type:k}})});var t=!1;return ne().then(function(){t=(0<arguments.length&&void 0!==arguments[0]?arguments[0]:{success:!1}).success}).catch(function(){}).finally(function(){oe(e,t,n)})}function ae(e){var n;window.addEventListener("load",(n=e,function(){ie(n,ee())}))}var re,de,ce=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(re)return!1;var n=e.loadAmazon,t=void 0===n||n,o=e.loadPrebid,i=void 0===o||o,a=e.setFastFetch,r=void 0!==a&&a,d=e.loadGeoEdge,c=void 0===d||d,s=e.section,n=void 0===s?"none":s,o=e.pageViewId,a=void 0===o?"":o,d=e.pageType,s=void 0===d?"":d,o=e.prebidOverrides,d=void 0===o?{}:o;return e=document.referrer||"",!(o=/([a-zA-Z0-9_\-.]+)(@|%40)([a-zA-Z0-9_\-.]+).([a-zA-Z]{2,5})/).test(e)&&!o.test(window.location.href)&&(u()&&(s=new RegExp(/art/).test(s)?"art":s,c&&p(),t&&(c=r,t=n,r=s,window.apstag||(l("//c.amazon-adsystem.com/aax2/apstag.js",m,f),j(c,t,r))),i&&X(n,s,d)),ae(a),re=!0)};return(de=a()).loadScripts=de.loadScripts||ce,window.AdSlot4=de}(); + (function () { var _f=function(e={}){const i=window&&window.AdSlot4;try{const{adToggleMap:n,pageType:t,prebidOverrides:o,section:d,isSectionHbEligible:r,setFastFetch:w}=e,a=Object.keys(n).reduce((e,i)=>{const t=n[i]||"";return e[i]=function(e){return!!(window&&window.adClientUtils&&window.adClientUtils.hasActiveToggle)&&window.adClientUtils.hasActiveToggle(e)}(t),e},{}),{amazon:c,geoedge:s}=a,l=c&&r,g={buckets:[{max:3,increment:.05},{max:10,increment:.01},{max:20,increment:.1},{max:50,increment:.5},{max:101,increment:1}]},p=function(){if(window&&window.adClientUtils&&window.adClientUtils.getAbraVar){const e="DFP_Prebid_Price_0722";return"1_Dense"===window.adClientUtils.getAbraVar(e)}return!1}()?{...o,priceGranularity:g}:o;window&&window.adClientUtils&&window.adClientUtils.reportExposure&&window.adClientUtils.reportExposure("DFP_Prebid_Price_0722"),"function"==typeof i.loadScripts&&i.loadScripts({loadAmazon:l,loadPrebid:r,setFastFetch:w,section:d,prebidOverrides:p,pageType:t,pageViewId:window&&window.NYTD&&window.NYTD.PageViewId&&window.NYTD.PageViewId.current?window.NYTD.PageViewId.current:"",loadGeoEdge:s})}catch(e){console.error(e)}};;_f.apply(null, [{"adToggleMap":{"amazon":"amazon_story_toggle","medianet":"medianet_story_toggle","dfp":"dfp_story_toggle","geoedge":"geoedge_toggle"},"pageType":"art","section":"us","forcePrebidSize":{"top":{"size":{"large":[[728,90],[970,90],[970,250]],"medium":[[728,90]]}}},"isSectionHbEligible":true,"setFastFetch":true,"prebidOverrides":{"sizeConfig":{"top":{"size":{"large":[[728,90],[970,90],[970,250]],"medium":[[728,90]]}}}}}]); })(); + (function () { var _f=function(t={}){window.AdSlot4=window.AdSlot4||{},window.AdSlot4.cmd=window.AdSlot4.cmd||[],window.AdSlot4.clientRequirements={mergeObjects:function(t,...e){return e.reduce(function(t,e){return Object.entries(e).reduce(function(t,[e,n]){return t[e]&&null==n?t:Object.assign({},t,{[e]:n})},t)},t)},isFunction:function(t){return"[object Function]"===Object.prototype.toString.call(t)},getAbraVariant:function(t){if(!(window.NYTD&&window.NYTD.Abra&&window.NYTD.Abra.getAbraSync&&this.isFunction(window.NYTD.Abra.getAbraSync)))return void console.warn("Abra does not exist or is not a function");const e=window.NYTD.Abra.getAbraSync(t);return e&&e.variant},shouldHaltDFP:function(t){return"1_block"===this.getAbraVariant(t)},isAdsDisabled:function({section:t}={section:""}){return"learning"===t},getSov:function(t={}){return t.sov=t.sov||(Math.floor(4*Math.random())+1).toString(),{sov:t.sov}},getPageViewId:function(t){return{page_view_id:t&&t.current}},getUserData:function(t="{}"){try{const e=JSON.parse(t).data;return e&&e.user}catch(t){console.warn("userinfo data unavailable")}},getEm:function(t){return t&&t.length?{em:t.toString().toLowerCase()}:{}},getWat:function(t){return t?{wat:t.toLowerCase()}:{}},getDemographics:function(t){return this.mergeObjects(this.getEm(t&&t.emailSubscriptions),this.getWat(t&&t.wat))},isValidDfpVariant:function(t){return t.toLowerCase().indexOf("dfp")>-1||t.indexOf("redbird")>-1},joinArgumentsForVariant:function(){if(arguments.length)return[].slice.call(arguments).join("_").toLowerCase()},reduceAbraConfigKeysToDfpVariants:function(t=[],e=""){const n=this.getAbraVariant(e),i=this.joinArgumentsForVariant(e,n);return n&&i?t.concat(i):t},getDFPTestNames:function(t={}){if(!t)return[];const e=this.isValidDfpVariant;return Object.keys(t).filter(function(t){return e(t)})},getAbraDfpVariants:function(t={}){this.isValidDfpVariant;let e="";if(t.config){e=this.getDFPTestNames(t.config).reduce(this.reduceAbraConfigKeysToDfpVariants,[])}return{abra_dfp:e}},isMobile:function(t){const e=t.matchMedia("(max-width: 739px)");return e&&e.matches},isManualRefresh:function(t={}){return!(!t.navigation||1!==t.navigation.type)},getAltLangFromPathname:function(t=""){return 0===t.indexOf("/es/")?"es":""},getAdTargetingProperty:function(t=!1,e=""){let n=t?"m":"";return{prop:(n+=e)+"nyt"}},getAdTargetingPlatform:function(t=!1){return{plat:(t?"m":"")+"web"}},getAdTargetingEdition:function(t=""){return t.length?{edn:t}:{}},getAdTargetingVersion:function(t=!1){return{ver:(t?"m":"")+"vi"}},getAdTargetingHome:function(t,e,n){let i={},o={};return"hp"===t&&(i=e?{topRef:e}:{},o=n?{refresh:"manual"}:{}),this.mergeObjects(i,o)},getAdTargeting:function(t={},e={}){const n=this.isMobile(window),i=this.getAltLangFromPathname(window.location.pathname),o=this.isManualRefresh(performance);return this.mergeObjects(t,this.getDemographics(e),this.getAdTargetingProperty(n,i),this.getAdTargetingPlatform(n),this.getAdTargetingEdition(i),this.getAdTargetingVersion(n),this.getAdTargetingHome(t.typ,document.referrer,o),this.getAbraDfpVariants(window.NYTD.Abra),this.getSov(window),this.getPageViewId(window.NYTD.PageViewId))},init:function(t){window.AdSlot4.init&&this.isFunction(window.AdSlot4.init)?window.AdSlot4.init&&window.AdSlot4.init(t):console.warn("AdSlot4.init does not exist or is not a function")},reportExposure:function(t){window.NYTD.Abra&&this.isFunction(window.NYTD.Abra.reportExposure)?window.NYTD.Abra.reportExposure(t):console.warn("Abra.reportExposure does not exist or is not a function")},generateConfig:function(t={},e={},n={}){const i=n&&n.userInfo&&n.userInfo.demographics;return this.mergeObjects(t,e,{adTargeting:this.getAdTargeting(e.adTargeting,i),haltDFP:this.shouldHaltDFP(e.dfpToggleName||t.dfpToggleName),adsDisabled:this.isAdsDisabled(e.adTargeting)})}};for(let t in window.AdSlot4.clientRequirements)window.AdSlot4.clientRequirements[t]=window.AdSlot4.clientRequirements[t].bind(window.AdSlot4.clientRequirements);const e={adUnitPath:"/29390238/nyt/homepage",offset:400,hideTopAd:AdSlot4.clientRequirements.isMobile(window),lockdownAds:!1,sizeMapping:{top:[[970,["fluid",[728,90],[970,90],[970,250],[1605,300]]],[728,["fluid",[728,90],[1605,300]]],[0,[]]],fp1:[[0,[[195,250],[215,270]]]],fp2:[[0,[[195,250],[215,270]]]],fp3:[[0,[[195,250],[215,270]]]],feat1:[[0,["fluid"]]],feat2:[[0,["fluid"]]],feat3:[[0,["fluid"]]],feat4:[[0,["fluid"]]],mktg:[[1020,[300,250]],[0,[]]],pencil:[[728,[[336,46]],[0,[]]]],pp_edpick:[[0,["fluid"]]],pp_morein:[[0,["fluid"],[210,218]]],ribbon:[[0,["fluid"]]],sponsor:[[765,[150,50]],[0,[320,25]]],supplemental:[[1020,[[300,250],[300,600]]],[0,[]]],chat:[[0,[[300,250],[300,420]]]],column:[[0,[[300,250],[300,420]]]],default:[[970,["fluid",[728,90],[970,90],[970,250],[1605,300]]],[728,["fluid",[728,90],[300,250],[1605,300]]],[0,["fluid",[300,250],[300,420]]]]},adTargeting:{},haltDFP:!1,dfpToggleName:t.dfpToggleName||"dfp_home_toggle",lazyApi:t.lazyApi||{}};window.AdSlot4.cmd.push(function(){const n=window.AdSlot4.clientRequirements,i=n.getUserData(window&&window.userXhrObject&&window.userXhrObject.responseText),o=n.generateConfig(e,t,i);n.init(o),n.reportExposure("dfp_adslot4v2")})};;_f.apply(null, [{"adTargeting":{"edn":"us","test":"projectvi","ver":"vi","template":"article","hasVideo":"false","vp":"small","als_test":"1662790801713","prop":"mnyt","plat":"mweb","brandsensitive":"false","des":"absenteevoting,fraudsandswindling,voterregistrationandrequiremen,presidentialelectionof2012,series","auth":"adamliptak","coll":"usnews,uspolitics","artlen":"long","ledemedsz":"none","typ":"art","section":"us","si_section":"us","id":"100000001830255","pt":"nt1,nt10,nt12,nt13,nt14,nt15,nt16,nt18,nt2,nt21,nt3,nt6,nt8,nt9,pt11","gscat":"neg_elec,neg_citi_aa,neg_chanel,neg_bofa,neg_debeer,neg_google,neg_ibmtest,neg_gg1,gs_politics,neg_mttl,neg_mtb,neg_ts,neg_capitalone,gs_politics_misc,neg_mastercard,neg_ms_safe,neg_ibm,neg_rms,neg_rolex,gs_politics_american,gs_law_misc,gs_law,gv_safe,gs_t","mt":"MT10,MT8"},"adUnitPath":"/29390238/nyt/us/politics","dfpToggleName":"dfp_story_toggle"}]); })(); + })(); + </script> + + + + </head> + <body> + <div id="app"><div><div class=""><div><div class="NYTAppHideMasthead css-1q2w90k e1m0pzr40"><header class="css-1bymuyk e1m0pzr41"><section class="css-ui9rw0 e1m0pzr42"><div class="css-1f7ibof ea180rp0"><div class="css-6n7j50"><button aria-haspopup="true" aria-expanded="false" aria-label="Sections Navigation & Search" class="ea180rp1 css-fzvsed" data-testid="nav-button" type="button"><svg class="css-1fe7a5q" viewBox="0 0 16 16"><rect x="1" y="3" fill="#333" width="14" height="2"></rect><rect x="1" y="7" fill="#333" width="14" height="2"></rect><rect x="1" y="11" fill="#333" width="14" height="2"></rect></svg></button></div><button id="desktop-sections-button" data-testid="desktop-section-button" aria-label="Sections Navigation" class="css-123u7tk ea180rp2"><span class="css-1dv1kvn">Sections</span><svg class="css-1fe7a5q" viewBox="0 0 16 16"><rect x="1" y="3" fill="#333" width="14" height="2"></rect><rect x="1" y="7" fill="#333" width="14" height="2"></rect><rect x="1" y="11" fill="#333" width="14" height="2"></rect></svg></button><div class="css-10488qs"><button class="css-tkwi90 e1iflr850" data-test-id="search-button"><span class="css-1dv1kvn">SEARCH</span><svg class="css-1fe7a5q" viewBox="0 0 16 16"><path fill="#333" d="M11.3,9.2C11.7,8.4,12,7.5,12,6.5C12,3.5,9.5,1,6.5,1S1,3.5,1,6.5S3.5,12,6.5,12c1,0,1.9-0.3,2.7-0.7l3.3,3.3c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4c0.6-0.6,0.6-1.5,0-2.1L11.3,9.2zM6.5,10.3c-2.1,0-3.8-1.7-3.8-3.8c0-2.1,1.7-3.8,3.8-3.8c2.1,0,3.8,1.7,3.8,3.8C10.3,8.6,8.6,10.3,6.5,10.3z"></path></svg></button></div><a class="css-1f8er69" href="#site-content">Skip to content</a><a class="css-1f8er69" href="#site-index">Skip to site index</a></div><div id="masthead-section-label" class="css-1wr3we4 ek6sfxi0"><a href="https://www.nytimes.com/section/politics" class="css-nuvmzp">Politics</a></div><div class="css-10698na ell52qj0"><a data-testid="masthead-mobile-logo" aria-label="New York Times Logo. Click to visit the homepage" class="css-nhjhh0 ell52qj1" href="/"><svg viewBox="0 0 184 25" fill="#000"><path d="M13.8 2.9c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8C6.2 1.4 5 1 4 1 2 1 .6 2.5.6 4.2c0 1.5 1.1 2 1.5 2.2l.1-.2c-.2-.2-.5-.4-.5-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8v3.1L9 10.2v.1l1.5 1.3v4.3c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2V6l-5 2.2C3.6 6.9 4.7 6 5.8 5.4l-.1-.3c-3 .8-5.7 3.6-5.7 7 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1l-1.6-1.3V5.8c1.5 0 3-1 3-2.9zm-8.7 11l-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7 0-1.5.2-2.1l2.1-.9v6.2zm10.6 2.3l-1.3 1 .2.2.6-.5 2.2 2 3-2-.1-.2-.8.5-1-1V9.4l.8-.6 1.7 1.4v6.1c0 3.8-.8 4.4-2.5 5v.3c2.8.1 5.4-.8 5.4-5.7V9.3l.9-.7-.2-.2-.8.6-2.5-2.1L18.5 9V.8h-.2l-3.5 2.4v.2c.4.2 1 .4 1 1.5l-.1 11.3zM34 15.1L31.5 17 29 15v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6-.1-.4zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zM53.1 2c0-.3-.1-.6-.2-.9h-.2c-.3.8-.7 1.2-1.7 1.2-.9 0-1.5-.5-1.9-.9l-2.9 3.3.2.2 1-.9c.6.5 1.1.9 2.5 1v8.3L44 3.2c-.5-.8-1.2-1.9-2.6-1.9-1.6 0-3 1.4-2.8 3.6h.3c.1-.6.4-1.3 1.1-1.3.5 0 1 .5 1.3 1v3.3c-1.8 0-3 .8-3 2.3 0 .8.4 2 1.6 2.3v-.2c-.2-.2-.3-.4-.3-.7 0-.5.4-.9 1.1-.9h.5v4.2c-2.1 0-3.8 1.2-3.8 3.2 0 1.9 1.6 2.8 3.4 2.7v-.2c-1.1-.1-1.6-.6-1.6-1.3 0-.9.6-1.3 1.4-1.3.8 0 1.5.5 2 1.1l2.9-3.2-.2-.2-.7.8c-1.1-1-1.7-1.3-3-1.5V5l8 14h.6V5c1.5-.1 2.9-1.3 2.9-3zm7.3 13.1L57.9 17l-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6-.1-.4zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zM76.7 8l-.7.5-1.9-1.6-2.2 2 .9.9v7.5l-2.4-1.5V9.6l.8-.5-2.3-2.2-2.2 2 .9.9V17l-.3.2-2.1-1.5v-6c0-1.4-.7-1.8-1.5-2.3-.7-.5-1.1-.8-1.1-1.5 0-.6.6-.9.9-1.1v-.2c-.8 0-2.9.8-2.9 2.7 0 1 .5 1.4 1 1.9s1 .9 1 1.8v5.8l-1.1.8.2.2 1-.8 2.3 2 2.5-1.7 2.8 1.7 5.3-3.1V9.2l1.3-1-.2-.2zm18.6-5.5l-1 .9-2.2-2-3.3 2.4V1.6h-.3l.1 16.2c-.3 0-1.2-.2-1.9-.4l-.2-13.5c0-1-.7-2.4-2.5-2.4s-3 1.4-3 2.8h.3c.1-.6.4-1.1 1-1.1s1.1.4 1.1 1.7v3.9c-1.8.1-2.9 1.1-2.9 2.4 0 .8.4 2 1.6 2V13c-.4-.2-.5-.5-.5-.7 0-.6.5-.8 1.3-.8h.4v6.2c-1.5.5-2.1 1.6-2.1 2.8 0 1.7 1.3 2.9 3.3 2.9 1.4 0 2.6-.2 3.8-.5 1-.2 2.3-.5 2.9-.5.8 0 1.1.4 1.1.9 0 .7-.3 1-.7 1.1v.2c1.6-.3 2.6-1.3 2.6-2.8s-1.5-2.4-3.1-2.4c-.8 0-2.5.3-3.7.5-1.4.3-2.8.5-3.2.5-.7 0-1.5-.3-1.5-1.3 0-.8.7-1.5 2.4-1.5.9 0 2 .1 3.1.4 1.2.3 2.3.6 3.3.6 1.5 0 2.8-.5 2.8-2.6V3.7l1.2-1-.2-.2zm-4.1 6.1c-.3.3-.7.6-1.2.6s-1-.3-1.2-.6V4.2l1-.7 1.4 1.3v3.8zm0 3c-.2-.2-.7-.5-1.2-.5s-1 .3-1.2.5V9c.2.2.7.5 1.2.5s1-.3 1.2-.5v2.6zm0 4.7c0 .8-.5 1.6-1.6 1.6h-.8V12c.2-.2.7-.5 1.2-.5s.9.3 1.2.5v4.3zm13.7-7.1l-3.2-2.3-4.9 2.8v6.5l-1 .8.1.2.8-.6 3.2 2.4 5-3V9.2zm-5.4 6.3V8.3l2.5 1.8v7.1l-2.5-1.7zm14.9-8.4h-.2c-.3.2-.6.4-.9.4-.4 0-.9-.2-1.1-.5h-.2l-1.7 1.9-1.7-1.9-3 2 .1.2.8-.5 1 1.1v6.3l-1.3 1 .2.2.6-.5 2.4 2 3.1-2.1-.1-.2-.9.5-1.2-1V9c.5.5 1.1 1 1.8 1 1.4.1 2.2-1.3 2.3-2.9zm12 9.6L123 19l-4.6-7 3.3-5.1h.2c.4.4 1 .8 1.7.8s1.2-.4 1.5-.8h.2c-.1 2-1.5 3.2-2.5 3.2s-1.5-.5-2.1-.8l-.3.5 5 7.4 1-.6v.1zm-11-.5l-1.3 1 .2.2.6-.5 2.2 2 3-2-.2-.2-.8.5-1-1V.8h-.1l-3.6 2.4v.2c.4.2 1 .3 1 1.5v11.3zM143 2.9c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8-1.3-.4-2.5-.8-3.5-.8-2 0-3.4 1.5-3.4 3.2 0 1.5 1.1 2 1.5 2.2l.1-.2c-.3-.2-.6-.4-.6-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8V9l-1.5 1.3v.1l1.5 1.3V16c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2V6l-5 2.2c.5-1.3 1.6-2.2 2.6-2.9l-.1-.2c-3 .8-5.7 3.5-5.7 6.9 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1L140 8.8v-3c1.5 0 3-1 3-2.9zm-8.7 11l-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7.1-1.5.3-2.1l2.1-.9-.1 6.2zm12.2-12h-.1l-2 1.7v.1l1.7 1.9h.2l2-1.7v-.1l-1.8-1.9zm3 14.8l-.8.5-1-1V9.3l1-.7-.2-.2-.7.6-1.8-2.1-2.9 2 .2.3.7-.5.9 1.1v6.5l-1.3 1 .1.2.7-.5 2.2 2 3-2-.1-.3zm16.7-.1l-.7.5-1.1-1V9.3l1-.8-.2-.2-.8.7-2.3-2.1-3 2.1-2.3-2.1L154 9l-1.8-2.1-2.9 2 .1.3.7-.5 1 1.1v6.5l-.8.8 2.3 1.9 2.2-2-.9-.9V9.3l.9-.6 1.5 1.4v6l-.8.8 2.3 1.9 2.2-2-.9-.9V9.3l.8-.5 1.6 1.4v6l-.7.7 2.3 2.1 3.1-2.1v-.3zm8.7-1.5l-2.5 1.9-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.8l3.5 2.5 4.5-3.6-.1-.3zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zm14.1-.9l-1.9-1.5c1.3-1.1 1.8-2.6 1.8-3.6v-.6h-.2c-.2.5-.6 1-1.4 1-.8 0-1.3-.4-1.8-1L176 9.3v3.6l1.7 1.3c-1.7 1.5-2 2.5-2 3.3 0 1 .5 1.7 1.3 2l.1-.2c-.2-.2-.4-.3-.4-.8 0-.3.4-.8 1.2-.8 1 0 1.6.7 1.9 1l4.3-2.6v-3.6h-.1zm-1.1-3c-.7 1.2-2.2 2.4-3.1 3l-1.1-.9V8.1c.4 1 1.5 1.8 2.6 1.8.7 0 1.1-.1 1.6-.4zm-1.7 8c-.5-1.1-1.7-1.9-2.9-1.9-.3 0-1.1 0-1.9.5.5-.8 1.8-2.2 3.5-3.2l1.2 1 .1 3.6z"></path></svg></a></div><div class="css-y3sf94 e1j3jvdr1"><a href="https://myaccount.nytimes.com/auth/login?response_type=cookie&client_id=vi&redirect_uri=https%3A%2F%2Fwww.nytimes.com%2Fsubscription%2Fonboarding-offer%3FcampaignId%3D7JFJX&asset=masthead" class="css-1kj7lfb"><span class="css-ni9it0 e1j3jvdr0">Log in</span></a><a href="https://myaccount.nytimes.com/auth/login?response_type=cookie&client_id=vi&redirect_uri=https%3A%2F%2Fwww.nytimes.com%2Fsubscription%2Fonboarding-offer%3FcampaignId%3D7JFJX&asset=masthead" class="css-129gw94" aria-label="Log in"><span class="css-e1ifge e1j3jvdr5"><svg class="css-1p66nw2" viewBox="0 0 20 20" fill="#333" xmlns="http://www.w3.org/2000/svg"><path d="M14.2379 6C14.2379 8.20914 12.4471 10 10.2379 10C8.02878 10 6.23792 8.20914 6.23792 6C6.23792 3.79086 8.02878 2 10.2379 2C12.4471 2 14.2379 3.79086 14.2379 6Z" fill="#333"></path><path d="M16.2355 14.5714C16.2371 14.5477 16.2379 14.5239 16.2379 14.5C16.2379 13.1193 13.5516 12 10.2379 12C6.92421 12 4.23792 13.1193 4.23792 14.5C4.23792 14.5239 4.23872 14.5477 4.24032 14.5714H4.23792V18H16.2379V14.5714H16.2355Z" fill="#333"></path></svg></span></a></div></section><section id="masthead-bar-one" class="hasLinks css-1r0gz1j e1pjtsj63"><div><div class="css-1o0kkht e1pjtsj60"></div><div class="css-1bvtpon e1pjtsj62"><a href="https://www.nytimes.com/section/todayspaper" class="css-hnzl8o">Today’s Paper</a></div></div><div class="css-9e9ivx"></div></section></header></div></div><div aria-hidden="false"><main id="site-content"><div><div class="css-1aor85t" style="opacity:0.000000001;z-index:-1;visibility:hidden" id="in-story-masthead"><div class="css-1hqnpie"><div class="css-epjblv"><span class="css-1u4hfeb"><a href="/section/politics">Politics</a></span><span class="css-x15j1o">|</span><span class="css-fwqvlz">Error and Fraud at Issue as Absentee Voting Rises</span></div><div class="css-k008qs"><div class="css-1iwv8en"><a href="/"><svg class="css-1tel06d" viewBox="0 0 16 22"><path d="M15.863 13.08c-.687 1.818-1.923 3.147-3.64 3.916v-3.917l2.129-1.958-2.129-1.889V6.505c1.923-.14 3.228-1.609 3.228-3.358C15.45.84 13.32 0 12.086 0c-.275 0-.55 0-.962.14v.14h.481c.824 0 1.51.42 1.51 1.189 0 .63-.48 1.189-1.304 1.189-2.129 0-4.6-1.749-7.279-1.749C2.13.91.481 2.728.481 4.546c0 1.819 1.03 2.448 2.128 2.798v-.14c-.343-.21-.618-.63-.618-1.189 0-.84.756-1.469 1.648-1.469 2.267 0 5.906 1.959 8.172 1.959h.206v2.727l-2.129 1.889 2.13 1.958v3.987c-.894.35-1.786.49-2.748.49-3.502 0-5.768-2.169-5.768-5.806 0-.839.137-1.678.344-2.518l1.785-.769v7.973l3.57-1.608V6.575L3.984 8.953c.55-1.61 1.648-2.728 2.953-3.358v-.07C3.433 6.295 0 9.023 0 13.08c0 4.686 3.914 7.974 8.446 7.974 4.807 0 7.485-3.288 7.554-7.974h-.137z" fill="#000"></path></svg></a><span class="css-18z7m18"><a href="/" data-testid="masthead-logo" aria-label="New York Times Logo. Click to visit the homepage"><svg class="css-12fr9lp" viewBox="0 0 184 25" fill="#000"><path d="M13.8 2.9c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8C6.2 1.4 5 1 4 1 2 1 .6 2.5.6 4.2c0 1.5 1.1 2 1.5 2.2l.1-.2c-.2-.2-.5-.4-.5-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8v3.1L9 10.2v.1l1.5 1.3v4.3c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2V6l-5 2.2C3.6 6.9 4.7 6 5.8 5.4l-.1-.3c-3 .8-5.7 3.6-5.7 7 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1l-1.6-1.3V5.8c1.5 0 3-1 3-2.9zm-8.7 11l-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7 0-1.5.2-2.1l2.1-.9v6.2zm10.6 2.3l-1.3 1 .2.2.6-.5 2.2 2 3-2-.1-.2-.8.5-1-1V9.4l.8-.6 1.7 1.4v6.1c0 3.8-.8 4.4-2.5 5v.3c2.8.1 5.4-.8 5.4-5.7V9.3l.9-.7-.2-.2-.8.6-2.5-2.1L18.5 9V.8h-.2l-3.5 2.4v.2c.4.2 1 .4 1 1.5l-.1 11.3zM34 15.1L31.5 17 29 15v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6-.1-.4zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zM53.1 2c0-.3-.1-.6-.2-.9h-.2c-.3.8-.7 1.2-1.7 1.2-.9 0-1.5-.5-1.9-.9l-2.9 3.3.2.2 1-.9c.6.5 1.1.9 2.5 1v8.3L44 3.2c-.5-.8-1.2-1.9-2.6-1.9-1.6 0-3 1.4-2.8 3.6h.3c.1-.6.4-1.3 1.1-1.3.5 0 1 .5 1.3 1v3.3c-1.8 0-3 .8-3 2.3 0 .8.4 2 1.6 2.3v-.2c-.2-.2-.3-.4-.3-.7 0-.5.4-.9 1.1-.9h.5v4.2c-2.1 0-3.8 1.2-3.8 3.2 0 1.9 1.6 2.8 3.4 2.7v-.2c-1.1-.1-1.6-.6-1.6-1.3 0-.9.6-1.3 1.4-1.3.8 0 1.5.5 2 1.1l2.9-3.2-.2-.2-.7.8c-1.1-1-1.7-1.3-3-1.5V5l8 14h.6V5c1.5-.1 2.9-1.3 2.9-3zm7.3 13.1L57.9 17l-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.6l-1 .8.2.2.9-.7 3.4 2.5 4.5-3.6-.1-.4zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zM76.7 8l-.7.5-1.9-1.6-2.2 2 .9.9v7.5l-2.4-1.5V9.6l.8-.5-2.3-2.2-2.2 2 .9.9V17l-.3.2-2.1-1.5v-6c0-1.4-.7-1.8-1.5-2.3-.7-.5-1.1-.8-1.1-1.5 0-.6.6-.9.9-1.1v-.2c-.8 0-2.9.8-2.9 2.7 0 1 .5 1.4 1 1.9s1 .9 1 1.8v5.8l-1.1.8.2.2 1-.8 2.3 2 2.5-1.7 2.8 1.7 5.3-3.1V9.2l1.3-1-.2-.2zm18.6-5.5l-1 .9-2.2-2-3.3 2.4V1.6h-.3l.1 16.2c-.3 0-1.2-.2-1.9-.4l-.2-13.5c0-1-.7-2.4-2.5-2.4s-3 1.4-3 2.8h.3c.1-.6.4-1.1 1-1.1s1.1.4 1.1 1.7v3.9c-1.8.1-2.9 1.1-2.9 2.4 0 .8.4 2 1.6 2V13c-.4-.2-.5-.5-.5-.7 0-.6.5-.8 1.3-.8h.4v6.2c-1.5.5-2.1 1.6-2.1 2.8 0 1.7 1.3 2.9 3.3 2.9 1.4 0 2.6-.2 3.8-.5 1-.2 2.3-.5 2.9-.5.8 0 1.1.4 1.1.9 0 .7-.3 1-.7 1.1v.2c1.6-.3 2.6-1.3 2.6-2.8s-1.5-2.4-3.1-2.4c-.8 0-2.5.3-3.7.5-1.4.3-2.8.5-3.2.5-.7 0-1.5-.3-1.5-1.3 0-.8.7-1.5 2.4-1.5.9 0 2 .1 3.1.4 1.2.3 2.3.6 3.3.6 1.5 0 2.8-.5 2.8-2.6V3.7l1.2-1-.2-.2zm-4.1 6.1c-.3.3-.7.6-1.2.6s-1-.3-1.2-.6V4.2l1-.7 1.4 1.3v3.8zm0 3c-.2-.2-.7-.5-1.2-.5s-1 .3-1.2.5V9c.2.2.7.5 1.2.5s1-.3 1.2-.5v2.6zm0 4.7c0 .8-.5 1.6-1.6 1.6h-.8V12c.2-.2.7-.5 1.2-.5s.9.3 1.2.5v4.3zm13.7-7.1l-3.2-2.3-4.9 2.8v6.5l-1 .8.1.2.8-.6 3.2 2.4 5-3V9.2zm-5.4 6.3V8.3l2.5 1.8v7.1l-2.5-1.7zm14.9-8.4h-.2c-.3.2-.6.4-.9.4-.4 0-.9-.2-1.1-.5h-.2l-1.7 1.9-1.7-1.9-3 2 .1.2.8-.5 1 1.1v6.3l-1.3 1 .2.2.6-.5 2.4 2 3.1-2.1-.1-.2-.9.5-1.2-1V9c.5.5 1.1 1 1.8 1 1.4.1 2.2-1.3 2.3-2.9zm12 9.6L123 19l-4.6-7 3.3-5.1h.2c.4.4 1 .8 1.7.8s1.2-.4 1.5-.8h.2c-.1 2-1.5 3.2-2.5 3.2s-1.5-.5-2.1-.8l-.3.5 5 7.4 1-.6v.1zm-11-.5l-1.3 1 .2.2.6-.5 2.2 2 3-2-.2-.2-.8.5-1-1V.8h-.1l-3.6 2.4v.2c.4.2 1 .3 1 1.5v11.3zM143 2.9c0-2-1.9-2.5-3.4-2.5v.3c.9 0 1.6.3 1.6 1 0 .4-.3 1-1.2 1-.7 0-2.2-.4-3.3-.8-1.3-.4-2.5-.8-3.5-.8-2 0-3.4 1.5-3.4 3.2 0 1.5 1.1 2 1.5 2.2l.1-.2c-.3-.2-.6-.4-.6-1 0-.4.4-1.1 1.4-1.1.9 0 2.1.4 3.7.9 1.4.4 2.9.7 3.7.8V9l-1.5 1.3v.1l1.5 1.3V16c-.8.5-1.7.6-2.5.6-1.5 0-2.8-.4-3.9-1.6l4.1-2V6l-5 2.2c.5-1.3 1.6-2.2 2.6-2.9l-.1-.2c-3 .8-5.7 3.5-5.7 6.9 0 4 3.3 7 7 7 4 0 6.6-3.2 6.6-6.5h-.2c-.6 1.3-1.5 2.5-2.6 3.1v-4.1l1.6-1.3v-.1L140 8.8v-3c1.5 0 3-1 3-2.9zm-8.7 11l-1.2.6c-.7-.9-1.1-2.1-1.1-3.8 0-.7.1-1.5.3-2.1l2.1-.9-.1 6.2zm12.2-12h-.1l-2 1.7v.1l1.7 1.9h.2l2-1.7v-.1l-1.8-1.9zm3 14.8l-.8.5-1-1V9.3l1-.7-.2-.2-.7.6-1.8-2.1-2.9 2 .2.3.7-.5.9 1.1v6.5l-1.3 1 .1.2.7-.5 2.2 2 3-2-.1-.3zm16.7-.1l-.7.5-1.1-1V9.3l1-.8-.2-.2-.8.7-2.3-2.1-3 2.1-2.3-2.1L154 9l-1.8-2.1-2.9 2 .1.3.7-.5 1 1.1v6.5l-.8.8 2.3 1.9 2.2-2-.9-.9V9.3l.9-.6 1.5 1.4v6l-.8.8 2.3 1.9 2.2-2-.9-.9V9.3l.8-.5 1.6 1.4v6l-.7.7 2.3 2.1 3.1-2.1v-.3zm8.7-1.5l-2.5 1.9-2.5-2v-1.2l4.7-3.2v-.1l-2.4-3.6-5.2 2.8v6.8l3.5 2.5 4.5-3.6-.1-.3zm-5-1.7V8.5l.2-.1 2.2 3.5-2.4 1.5zm14.1-.9l-1.9-1.5c1.3-1.1 1.8-2.6 1.8-3.6v-.6h-.2c-.2.5-.6 1-1.4 1-.8 0-1.3-.4-1.8-1L176 9.3v3.6l1.7 1.3c-1.7 1.5-2 2.5-2 3.3 0 1 .5 1.7 1.3 2l.1-.2c-.2-.2-.4-.3-.4-.8 0-.3.4-.8 1.2-.8 1 0 1.6.7 1.9 1l4.3-2.6v-3.6h-.1zm-1.1-3c-.7 1.2-2.2 2.4-3.1 3l-1.1-.9V8.1c.4 1 1.5 1.8 2.6 1.8.7 0 1.1-.1 1.6-.4zm-1.7 8c-.5-1.1-1.7-1.9-2.9-1.9-.3 0-1.1 0-1.9.5.5-.8 1.8-2.2 3.5-3.2l1.2 1 .1 3.6z"></path></svg></a></span></div><span class="css-1n6z4y">https://www.nytimes.com/2012/10/07/us/politics/as-more-vote-by-mail-faulty-ballots-could-impact-elections.html</span><div class="css-tvohiw"><div role="toolbar" data-testid="share-tools" aria-label="Social Media Share buttons, Save button, and Comments Panel with current comment count"><div class="css-4skfbu"><ul class="css-1sirvy4"><li class="css-9eyi4s"><div class="css-vxcmzt"><div class="css-113xjf1"><button type="button" aria-haspopup="true" aria-label="" aria-describedby="ap-gift-article-tooltip" aria-expanded="false" class="css-q1aqo6"><span class="gift-article-button css-1ui00vj"><svg width="19" height="19" viewBox="0 0 19 19"><path d="M18.04 5.293h-2.725c.286-.34.493-.74.606-1.17a2.875 2.875 0 0 0-.333-2.322A2.906 2.906 0 0 0 13.64.48a3.31 3.31 0 0 0-2.372.464 3.775 3.775 0 0 0-1.534 2.483l-.141.797-.142-.847A3.745 3.745 0 0 0 7.927.923 3.31 3.31 0 0 0 5.555.459 2.907 2.907 0 0 0 3.607 1.78a2.877 2.877 0 0 0-.333 2.321c.117.429.324.828.606 1.171H1.155a.767.767 0 0 0-.757.757v3.674a.767.767 0 0 0 .757.757h.424v7.53A1.01 1.01 0 0 0 2.588 19h14.13a1.01 1.01 0 0 0 1.01-.959v-7.56h.424a.758.758 0 0 0 .757-.757V6.05a.759.759 0 0 0-.868-.757Zm-7.196-1.625a2.665 2.665 0 0 1 1.01-1.736 2.24 2.24 0 0 1 1.574-.313 1.817 1.817 0 0 1 1.211.818 1.857 1.857 0 0 1 .202 1.453 2.2 2.2 0 0 1-.838 1.191h-3.431l.272-1.413ZM4.576 2.386a1.837 1.837 0 0 1 1.221-.817 2.23 2.23 0 0 1 1.565.313 2.624 2.624 0 0 1 1.01 1.736l.242 1.453H5.182a2.2 2.2 0 0 1-.838-1.19 1.857 1.857 0 0 1 .202-1.495h.03ZM1.548 6.424h7.54V9.39h-7.58l.04-2.967Zm1.181 4.128h6.359v7.287H2.729v-7.287Zm13.777 7.287h-6.348v-7.307h6.348v7.307Zm1.181-8.468h-7.53V6.404h7.53V9.37Z" fill="#121212" fill-rule="nonzero"></path></svg>Give this article</span></button></div></div></li><li class="css-1xlo06v"><div class="css-vxcmzt"><div class="css-113xjf1"><button type="button" aria-haspopup="true" aria-label="More sharing options ..." aria-describedby="" aria-expanded="false" class="css-1uhsiac"><svg width="23" height="18" viewBox="0 0 23 18" class="css-1wb2lb"><path d="M1.357 17.192a.663.663 0 0 1-.642-.81c1.82-7.955 6.197-12.068 12.331-11.68V1.127a.779.779 0 0 1 .42-.653.726.726 0 0 1 .78.106l8.195 6.986a.81.81 0 0 1 .253.557.82.82 0 0 1-.263.547l-8.196 6.955a.83.83 0 0 1-.779.105.747.747 0 0 1-.42-.663V11.29c-8.418-.905-10.974 5.177-11.08 5.45a.662.662 0 0 1-.6.453Zm10.048-7.26a16.37 16.37 0 0 1 2.314.158.81.81 0 0 1 .642.726v3.02l6.702-5.682-6.702-5.692v2.883a.767.767 0 0 1-.242.536.747.747 0 0 1-.547.18c-4.808-.537-8.364 1.85-10.448 6.922a11.679 11.679 0 0 1 8.28-3.093v.042Z" fill="#000" fill-rule="nonzero"></path></svg></button></div></div></li><li class="css-1xlo06v save-button"><button type="button" role="switch" class="css-1yccqtv" aria-label="Save article for reading later..." aria-checked="false" disabled=""><svg width="12" height="18" viewBox="0 0 12 18" class="css-swbuts"><g fill-rule="nonzero" stroke="#666" fill="none"><path fill="none" d="M1.157 1.268v14.288l4.96-3.813 4.753 3.843V1.268z"></path><path d="m12 18-5.9-4.756L0 17.98V1.014C0 .745.095.487.265.297.435.107.664 0 .904 0h10.192c.24 0 .47.107.64.297.169.19.264.448.264.717V18ZM1.157 1.268v14.288l4.96-3.813 4.753 3.843V1.268H1.158Z" fill="#121212"></path></g></svg></button></li></ul></div></div></div></div></div></div><article id="story" class="css-1vxca1d e1lmdhsb0"><div class="css-1r2mflq"></div><div id="top-wrapper" class="css-z1t82k"><div id="top-slug" class="css-l9onyx"><p>Advertisement</p></div><a href="#after-top" class="css-1ly73wi">Continue reading the main story</a><div class="ad top-wrapper css-rfqw0c"><div id="top" class="place-ad" data-position="top" data-size-key="top"></div></div><div id="after-top"></div></div><header class="css-11kk65x e12qa4dv0"><div id="sponsor-wrapper" class="css-1hyfx7x"><div id="sponsor-slug" class="css-19vbshk"><p>Supported by</p></div><a href="#after-sponsor" class="css-1ly73wi">Continue reading the main story</a><div class="ad sponsor-wrapper css-rfqw0c" id="sponsor"></div><div id="after-sponsor"></div></div><div class="css-1vkm6nb ehdk2mb0"><h1 id="link-2ebe60a2" class="css-1icycqh e1h9rw200" data-testid="headline">Error and Fraud at Issue as Absentee Voting Rises</h1></div><div role="toolbar" data-testid="share-tools" aria-label="Social Media Share buttons, Save button, and Comments Panel with current comment count"><div class="css-1wa6gzb"><ul class="css-1sirvy4"><li class="css-9eyi4s"><div role="tooltip" class="css-1ch24e9" aria-hidden="true" aria-labelledby="dialogMessage" tabindex="0" id="ap-gift-article-tooltip"><div class="css-pga13o"><p class="css-6yj280"><strong>Send any friend a story</strong></p><p class="css-4m7ryc" id="dialogMessage">As a subscriber, you have <strong class="css-8qgvsz ebyp5n10">10 gift articles</strong> to give each month. Anyone can read what you share.</p></div><button type="button" aria-label="close sharing tooltip"><svg class="" viewBox="0 0 12 12" stroke="#000" stroke-width="1.5" stroke-linecap="round" style="opacity:0.95"><line x1="11" y1="1" x2="1" y2="11"></line><line x1="1" y1="1" x2="11" y2="11"></line></svg></button><div class="css-1n1thlk"><div class="css-1w019mi"></div></div></div><div class="css-vxcmzt"><div class="css-113xjf1"><button type="button" aria-haspopup="true" aria-label="" aria-describedby="ap-gift-article-tooltip" aria-expanded="false" class="css-q1aqo6"><span class="gift-article-button css-1ui00vj"><svg width="19" height="19" viewBox="0 0 19 19"><path d="M18.04 5.293h-2.725c.286-.34.493-.74.606-1.17a2.875 2.875 0 0 0-.333-2.322A2.906 2.906 0 0 0 13.64.48a3.31 3.31 0 0 0-2.372.464 3.775 3.775 0 0 0-1.534 2.483l-.141.797-.142-.847A3.745 3.745 0 0 0 7.927.923 3.31 3.31 0 0 0 5.555.459 2.907 2.907 0 0 0 3.607 1.78a2.877 2.877 0 0 0-.333 2.321c.117.429.324.828.606 1.171H1.155a.767.767 0 0 0-.757.757v3.674a.767.767 0 0 0 .757.757h.424v7.53A1.01 1.01 0 0 0 2.588 19h14.13a1.01 1.01 0 0 0 1.01-.959v-7.56h.424a.758.758 0 0 0 .757-.757V6.05a.759.759 0 0 0-.868-.757Zm-7.196-1.625a2.665 2.665 0 0 1 1.01-1.736 2.24 2.24 0 0 1 1.574-.313 1.817 1.817 0 0 1 1.211.818 1.857 1.857 0 0 1 .202 1.453 2.2 2.2 0 0 1-.838 1.191h-3.431l.272-1.413ZM4.576 2.386a1.837 1.837 0 0 1 1.221-.817 2.23 2.23 0 0 1 1.565.313 2.624 2.624 0 0 1 1.01 1.736l.242 1.453H5.182a2.2 2.2 0 0 1-.838-1.19 1.857 1.857 0 0 1 .202-1.495h.03ZM1.548 6.424h7.54V9.39h-7.58l.04-2.967Zm1.181 4.128h6.359v7.287H2.729v-7.287Zm13.777 7.287h-6.348v-7.307h6.348v7.307Zm1.181-8.468h-7.53V6.404h7.53V9.37Z" fill="#121212" fill-rule="nonzero"></path></svg>Give this article</span></button></div></div></li><li class="css-1xlo06v"><div class="css-vxcmzt"><div class="css-113xjf1"><button type="button" aria-haspopup="true" aria-label="More sharing options ..." aria-describedby="" aria-expanded="false" class="css-1uhsiac"><svg width="23" height="18" viewBox="0 0 23 18" class="css-1wb2lb"><path d="M1.357 17.192a.663.663 0 0 1-.642-.81c1.82-7.955 6.197-12.068 12.331-11.68V1.127a.779.779 0 0 1 .42-.653.726.726 0 0 1 .78.106l8.195 6.986a.81.81 0 0 1 .253.557.82.82 0 0 1-.263.547l-8.196 6.955a.83.83 0 0 1-.779.105.747.747 0 0 1-.42-.663V11.29c-8.418-.905-10.974 5.177-11.08 5.45a.662.662 0 0 1-.6.453Zm10.048-7.26a16.37 16.37 0 0 1 2.314.158.81.81 0 0 1 .642.726v3.02l6.702-5.682-6.702-5.692v2.883a.767.767 0 0 1-.242.536.747.747 0 0 1-.547.18c-4.808-.537-8.364 1.85-10.448 6.922a11.679 11.679 0 0 1 8.28-3.093v.042Z" fill="#000" fill-rule="nonzero"></path></svg></button></div></div></li><li class="css-1xlo06v save-button"><button type="button" role="switch" class="css-1yccqtv" aria-label="Save article for reading later..." aria-checked="false" disabled=""><svg width="12" height="18" viewBox="0 0 12 18" class="css-swbuts"><g fill-rule="nonzero" stroke="#666" fill="none"><path fill="none" d="M1.157 1.268v14.288l4.96-3.813 4.753 3.843V1.268z"></path><path d="m12 18-5.9-4.756L0 17.98V1.014C0 .745.095.487.265.297.435.107.664 0 .904 0h10.192c.24 0 .47.107.64.297.169.19.264.448.264.717V18ZM1.157 1.268v14.288l4.96-3.813 4.753 3.843V1.268H1.158Z" fill="#121212"></path></g></svg></button></li></ul></div></div><div class="css-79elbk" data-testid="photoviewer-wrapper"><div class="css-z3e15g" data-testid="photoviewer-wrapper-hidden"></div><div data-testid="photoviewer-children" class="css-1a48zt4 e11si9ry5"><figure class="sizeMedium layoutHorizontal css-1a1lp8y" aria-label="media" role="group"><div class="css-bsn42l"><img alt="An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting." class="css-rq4mmj" src="https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-articleLarge.jpg?quality=75&auto=webp&disable=upscale" srcSet="https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-articleLarge.jpg?quality=75&auto=webp 600w,https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-jumbo.jpg?quality=75&auto=webp 1024w,https://static01.nyt.com/images/2012/10/07/us/BALLOT_span/BALLOT-superJumbo.jpg?quality=75&auto=webp 1464w" sizes="((min-width: 600px) and (max-width: 1004px)) 84vw, (min-width: 1005px) 60vw, 100vw" decoding="async" width="600" height="350"/></div><figcaption class="css-y5g5d7 e1maroi60"><span aria-hidden="true" class="css-jevhma e13ogyst0">An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.</span><span class="css-1u46b97 e1z0qqy90"><span class="css-1ly73wi e1tej78p0">Credit...</span><span><span aria-hidden="false">Sarah Beth Glicksteen for The New York Times</span></span></span></figcaption></figure></div></div><div data-testid="byline-timestamp" class="css-xt80pu eakwutd0"><div class="css-sklrp3"><div class="css-1e2jphy epjyd6m1"><div class="css-233int epjyd6m0"><p class="css-4anu6l e1jsehar1"><span class="byline-prefix">By </span><span class="css-1baulvz last-byline" itemProp="name"><a href="https://www.nytimes.com/by/adam-liptak" class="css-n8ff4n e1jsehar0">Adam Liptak</a></span></p></div></div><ul class="css-1u1psjv epjyd6m3"><li class="css-ccw2r3 epjyd6m2"><time class="css-1z1nqv e16638kd0" dateTime="2012-10-06T23:10:09-04:00">Oct. 6, 2012</time></li></ul></div></div></header><section name="articleBody" class="meteredContent css-1r7ky0e"><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">TALLAHASSEE, Fla. — On the morning of the primary here in August, the local elections board met to decide which absentee ballots to count. It was not an easy job.</p><p class="css-at9mc1 evys1bk0">The board tossed out some ballots because they arrived without the signature required on the outside of the return envelope. It rejected one that said “see inside” where the signature should have been. And it debated what to do with ballots in which the signature on the envelope did not quite match the one in the county’s files.</p><p class="css-at9mc1 evys1bk0">“This ‘r’ is not like that ‘r,’ ” Judge Augustus D. Aikens Jr. said, suggesting that a <a class="css-yywogo" href="https://www.nytimes.com/2021/10/11/us/fulton-county-election-workers-fired.html" title="">ballot</a> should be rejected.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">Ion Sancho, the elections supervisor here, disagreed. “This ‘k’ is like that ‘k,’ ” he replied, and he persuaded his colleagues to count the vote.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">Scenes like this will play out in many elections next month, because Florida and other states are swiftly moving from voting at a polling place toward <a class="css-yywogo" href="https://www.nytimes.com/2020/12/10/us/mail-voting-absentee.html" title="">voting by mail</a>. In the last general election in Florida, in 2010, 23 percent of voters cast absentee ballots, up from 15 percent in the midterm election four years before. Nationwide, the use of absentee ballots and other forms of voting by mail has more than tripled since 1980 and now accounts for almost 20 percent of all votes.</p><p class="css-at9mc1 evys1bk0">Yet votes cast by mail are less likely to be counted, more likely to be compromised and more likely to be contested than those cast in a voting booth, statistics show. Election officials reject almost 2 percent of ballots cast by mail, double the rate for in-person voting.</p><p class="css-at9mc1 evys1bk0">“The more people you force to vote by mail,” Mr. Sancho said, “the more invalid ballots you will generate.”</p><p class="css-at9mc1 evys1bk0">Election experts say the challenges created by mailed ballots could well affect outcomes this fall and beyond. If the contests next month are close enough to be within what election lawyers call the margin of litigation, the grounds on which they will be fought will not be hanging chads but ballots cast away from the voting booth.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">In 2008, 18 percent of the votes in the nine states likely to decide this year’s presidential election were cast by mail. That number will almost certainly rise this year, and <a class="css-yywogo" href="http://reed.edu/earlyvoting/calendar/" title="data from Early Voting Information Center" rel="noopener noreferrer" target="_blank">voters in two-thirds of the states</a> have already begun casting absentee ballots. In four Western states, voting by mail is the exclusive or dominant way to cast a ballot.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">The trend will probably result in more uncounted votes, and it increases the potential for fraud. While fraud in voting by mail is far less common than innocent errors, it is vastly more prevalent than the in-person voting fraud that has attracted far more attention, election administrators say.</p><p class="css-at9mc1 evys1bk0">In Florida, absentee-ballot scandals seem to arrive like clockwork around election time. Before this year’s primary, for example, a woman in Hialeah <a class="css-yywogo" href="http://media.miamiherald.com/smedia/2012/08/02/13/29/DC6id.So.56.pdf" title="arrest affidavit" rel="noopener noreferrer" target="_blank">was charged with</a> forging an elderly voter’s signature, a felony, and possessing 31 completed absentee ballots, 29 more than allowed under <a class="css-yywogo" href="http://www.miamidade.gov/govaction/matter.asp?matter=112169&file=true&yearFolder=Y2011" title="Miami-Dade ballots ordinance." rel="noopener noreferrer" target="_blank">a local law</a>.</p><p class="css-at9mc1 evys1bk0">The flaws of absentee voting raise questions about the most elementary promises of democracy. “The right to have one’s vote counted is as important as the act of voting itself,” Justice Paul H. Anderson of the Minnesota Supreme Court <a class="css-yywogo" href="http://moritzlaw.osu.edu/electionlaw/litigation/documents/Order.12.18.08.pdf" title="Coleman v. Ritchie" rel="noopener noreferrer" target="_blank">wrote while considering disputed absentee ballots</a> in the <a class="css-yywogo" href="http://www.nytimes.com/2009/07/01/us/politics/01minnesota.html?_r=1&hp" title="Times article.">close 2008 Senate election</a> between Al Franken and Norm Coleman.</p><p class="css-at9mc1 evys1bk0">Voting by mail is now common enough and problematic enough that election experts say there have been multiple elections in which no one can say with confidence which candidate was the deserved winner. The list includes the 2000 presidential election, in which problems with absentee ballots in Florida were a little-noticed footnote to other issues.</p><p class="css-at9mc1 evys1bk0">In the last presidential election, 35.5 million voters requested absentee ballots, but only 27.9 million absentee votes were counted, according to <a class="css-yywogo" href="http://www.law.nyu.edu/journals/legislation/issues/volume13number3/ECM_PRO_068045" title="The study." rel="noopener noreferrer" target="_blank">a study</a> by Charles Stewart III, a political scientist at the Massachusetts Institute of Technology. He calculated that 3.9 million ballots requested by voters never reached them; that another 2.9 million ballots received by voters did not make it back to election officials; and that election officials rejected 800,000 ballots. That suggests an overall failure rate of as much as 21 percent.</p><p class="css-at9mc1 evys1bk0">Some voters presumably decided not to vote after receiving ballots, but Mr. Stewart said many others most likely tried to vote and were thwarted. “If 20 percent, or even 10 percent, of voters who stood in line on Election Day were turned away,” he wrote in the study, published in The Journal of Legislation and Public Policy, “there would be national outrage.”</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">The list of very close elections includes the 2008 Senate race in Minnesota, in which Mr. Franken’s victory over Mr. Coleman, the Republican incumbent, helped give Democrats the 60 votes in the Senate needed to pass President Obama’s health care bill. Mr. Franken won by 312 votes, while state officials rejected 12,000 absentee ballots. Recent primary elections in New York involving Republican state senators who had voted to allow same-sex marriage also hinged on absentee ballots.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">There are, of course, significant advantages to voting by mail. It makes life easier for the harried, the disabled and the elderly. It is cheaper to administer, makes for shorter lines on election days and allows voters more time to think about ballots that list many races. By mailing ballots, those away from home can vote. Its availability may also increase turnout in local elections, though it does not seem to have had much impact on turnout in federal ones.</p><p class="css-at9mc1 evys1bk0">Still, voting in person is more reliable, particularly since election administrators made improvements to voting equipment after the 2000 presidential election.</p><p class="css-at9mc1 evys1bk0">There have been other and more controversial changes since then, also in the name of reliability and efficiency. Lawmakers have cut back on early voting in person, cracked down on voter registration drives, imposed identification requirements, made it harder for students to cast ballots and proposed purging voter rolls in a way that critics have said would eliminate people who are eligible to vote.</p><p class="css-at9mc1 evys1bk0">But almost nothing has been done about the distinctive challenges posed by absentee ballots. To the contrary, Ohio’s Republican secretary of state recently sent absentee ballot applications to every registered voter in the state. And Republican lawmakers in Florida recently revised state law to allow ballots to be mailed wherever voters want, rather than typically to only their registered addresses.</p><p class="css-at9mc1 evys1bk0">“This is the only area in Florida where we’ve made it easier to cast a ballot,” Daniel A. Smith, a political scientist at the University of Florida, said of absentee voting.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">He posited a reason that Republican officials in particular have pushed to expand absentee voting. “The conventional wisdom is that Republicans use absentee ballots and Democrats vote early,” he said.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div><div class="sizeMedium layoutHorizontal css-1f3mpp5 ewenx681"><a href="https://www.nytimes.com/slideshow/2012/10/07/us/BALLOT.html"><div class="css-5nx6oe"><h2 class="css-1bgal8l">In Florida, a Look at the Challenges of Mailed Ballots</h2><div class="css-1xhl2m"><p class="css-8k1w72"></p><p class="css-8k1w72">10 Photos</p><p class="css-8k1w72">View Slide Show <span class="css-t4350i">›</span></p></div></div><div class="css-79elbk"><div class="css-1izowsy"></div><figure class="sizeMedium layoutHorizontal ewenx680 css-1pv2nfg" aria-label="media" role="group"><div class="css-bsn42l"><div class="css-1whphny" data-testid="lazy-image"><div data-testid="lazyimage-container" style="height:257.1484375px"></div></div></div><figcaption class="css-y5g5d7 e1maroi60"></figcaption></figure></div></a><div class="css-y5g5d7 efyb8hk0"><span class="css-jevhma e13ogyst0">Sarah Beth Glicksteen for The New York Times</span></div></div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">Republicans are in fact more likely than Democrats to vote absentee. In the 2008 general election in Florida, 47 percent of absentee voters were Republicans and 36 percent were Democrats.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">There is a bipartisan consensus that voting by mail, whatever its impact, is more easily abused than other forms. In a 2005 report signed by President Jimmy Carter and James A. Baker III, who served as secretary of state under the first President George Bush, <a class="css-yywogo" href="http://www1.american.edu/ia/cfer/report/report.html" title="report" rel="noopener noreferrer" target="_blank">the Commission on Federal Election Reform concluded</a>, “Absentee ballots remain the largest source of potential voter fraud.”</p><p class="css-at9mc1 evys1bk0">On the most basic level, absentee voting replaces the oversight that exists at polling places with something akin to an honor system.</p><p class="css-at9mc1 evys1bk0">“Absentee voting is to voting in person,” Judge Richard A. Posner of the United States Court of Appeals for the Seventh Circuit <a class="css-yywogo" href="http://bulk.resource.org/courts.gov/c/F3/385/385.F3d.1128.03-3770.html" title="Griffin v. Roupas" rel="noopener noreferrer" target="_blank">has written</a>, “as a take-home exam is to a proctored one.”</p><p class="css-at9mc1 evys1bk0"><strong class="css-8qgvsz ebyp5n10">Fraud Easier Via Mail</strong></p><p class="css-at9mc1 evys1bk0">Election administrators have a shorthand name for a central weakness of voting by mail. They call it granny farming.</p><p class="css-at9mc1 evys1bk0">“The problem,” said Murray A. Greenberg, a former county attorney in Miami, “is really with the collection of absentee ballots at the senior citizen centers.” In Florida, people affiliated with political campaigns “help people vote absentee,” he said. “And help is in quotation marks.”</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">Voters in nursing homes can be subjected to subtle pressure, outright intimidation or fraud. The secrecy of their voting is easily compromised. And their ballots can be intercepted both coming and going.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">The problem is not limited to the elderly, of course. Absentee ballots also make it much easier to buy and sell votes. In recent years, courts have <a class="css-yywogo" href="http://www.state.il.us/court/opinions/appellatecourt/2005/1stdistrict/march/html/1032528.htm" title="Qualkinbush v. Skubisz" rel="noopener noreferrer" target="_blank">invalidated mayoral elections in Illinois</a> and <a class="css-yywogo" href="http://scholar.google.com/scholar_case?case=12855003844415311095&hl=en&as_sdt=2&as_vis=1&oi=scholarr" title="Pabey v. Pastrick" rel="noopener noreferrer" target="_blank">Indiana</a> because of fraudulent absentee ballots.</p><p class="css-at9mc1 evys1bk0">Voting by mail also played a crucial role in the 2000 presidential election in Florida, when the margin between George W. Bush and Al Gore was razor thin and <a class="css-yywogo" href="http://www.nytimes.com/2001/07/15/us/examining-the-vote-how-bush-took-florida-mining-the-overseas-absentee-vote.html?pagewanted=all&src=pm" title="Times article.">hundreds of absentee ballots were counted in apparent violation of state law</a>. The flawed ballots, from Americans living abroad, included some without postmarks, some postmarked after the election, some without witness signatures, some mailed from within the United States and some sent by people who voted twice. All would have been disqualified had the state’s election laws been strictly enforced.</p><p class="css-at9mc1 evys1bk0">In the recent primary here, almost 40 percent of ballots were not cast in the voting booth on the day of the election. They were split between early votes cast at polling places, which Mr. Sancho, the Leon County elections supervisor, favors, and absentee ballots, which make him nervous.</p><div id="NYT_MAIN_CONTENT_3_REGION" class="css-9tf9ac" data-testid="region"></div><p class="css-at9mc1 evys1bk0">“There has been not one case of fraud in early voting,” Mr. Sancho said. “The only cases of election fraud have been in absentee ballots.”</p><p class="css-at9mc1 evys1bk0">Efforts to prevent fraud at polling places have an ironic consequence, Justin Levitt, a professor at Loyola Law School, <a class="css-yywogo" href="http://www.judiciary.senate.gov/pdf/11-9-8LevittTestimony.pdf" title="The testimony." rel="noopener noreferrer" target="_blank">told the Senate Judiciary Committee</a> September last year. They will, he said, “drive more voters into the absentee system, where fraud and coercion have been documented to be real and legitimate concerns.”</p><p class="css-at9mc1 evys1bk0">“That is,” he said, “a law ostensibly designed to reduce the incidence of fraud is likely to increase the rate at which voters utilize a system known to succumb to fraud more frequently.”</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0"><strong class="css-8qgvsz ebyp5n10">Clarity Brings Better Results</strong></p><p class="css-at9mc1 evys1bk0">In 2008, Minnesota officials rejected 12,000 absentee ballots, about 4 percent of all such votes, for the myriad reasons that make voting by mail far less reliable than voting in person.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">The absentee ballot itself could be blamed for some of the problems. It had to be enclosed in envelopes containing various information and signatures, including one from a witness who had to attest to handling the logistics of seeing that “the voter marked the ballots in that individual’s presence without showing how they were marked.” Such witnesses must themselves be registered voters, with a few exceptions.</p><p class="css-at9mc1 evys1bk0">Absentee ballots have been rejected in Minnesota and elsewhere for countless reasons. Signatures from older people, sloppy writers or stroke victims may not match those on file. The envelopes and forms may not have been configured in the right sequence. People may have moved, and addresses may not match. Witnesses may not be registered to vote. The mail may be late.</p><p class="css-at9mc1 evys1bk0">But it is certainly possible to improve the process and reduce the error rate.</p><p class="css-at9mc1 evys1bk0">Here in Leon County, the rejection rate for absentee ballots is less than 1 percent. The instructions it provides to voters are clear, and the outer envelope is a model of graphic design, with a large signature box at its center.</p><p class="css-at9mc1 evys1bk0">The envelope requires only standard postage, and Mr. Sancho has made arrangements with the post office to pay for ballots that arrive without stamps.</p><p class="css-at9mc1 evys1bk0">Still, he would prefer that voters visit a polling place on Election Day or beforehand so that errors and misunderstandings can be corrected and the potential for fraud minimized.</p><p class="css-at9mc1 evys1bk0">“If you vote by mail, where is that coming from?” he asked. “Is there intimidation going on?”</p><p class="css-at9mc1 evys1bk0">Last November, Gov. Rick Scott, a Republican, <a class="css-yywogo" href="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CEQQFjAG&url=http%3A%2F%2Fwww.flgov.com%2Fwp-content%2Fuploads%2Forders%2F2011%2F11-215-johnson.pdf&ei=lLdsUOulOM630AHa54D4DQ&usg=AFQjCNGpZuSjlvClUw-nR74UdU0mVF_jig&sig2=ES0oyjWh4TH3RZ5CyOKQVg&cad=rja" title="Executive order and arrest affidavit." rel="noopener noreferrer" target="_blank">suspended a school board member</a> in Madison County, not far from here, after she was arrested on charges including absentee ballot fraud.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">The board member, Abra Hill Johnson, won the school board race “by what appeared to be a disproportionate amount of absentee votes,” <a class="css-yywogo" href="http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CEQQFjAG&url=http%3A%2F%2Fwww.flgov.com%2Fwp-content%2Fuploads%2Forders%2F2011%2F11-215-johnson.pdf&ei=lLdsUOulOM630AHa54D4DQ&usg=AFQjCNGpZuSjlvClUw-nR74UdU0mVF_jig&sig2=ES0oyjWh4TH3RZ5CyOKQVg&cad=rja" title="Executive order and arrest affidavit." rel="noopener noreferrer" target="_blank">the arrest affidavit</a> said. The vote was 675 to 647, but Ms. Johnson had 217 absentee votes to her opponent’s 86. Officials said that 80 absentee ballots had been requested at just nine addresses. Law enforcement agents interviewed 64 of the voters whose ballots were sent; only two recognized the address.</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div><div></div><div class="css-s99gbd StoryBodyCompanionColumn"><div class="css-53u6y8"><p class="css-at9mc1 evys1bk0">Ms. Johnson has pleaded not guilty.</p><p class="css-at9mc1 evys1bk0">Election law experts say that pulling off in-person voter fraud on a scale large enough to swing an election, with scores if not hundreds of people committing a felony in public by pretending to be someone else, is hard to imagine, to say nothing of exceptionally risky.</p><p class="css-at9mc1 evys1bk0">There are much simpler and more effective alternatives to commit fraud on such a scale, said Heather Gerken, a law professor at Yale.</p><p class="css-at9mc1 evys1bk0">“You could steal some absentee ballots or stuff a ballot box or bribe an election administrator or fiddle with an electronic voting machine,” she said. That explains, she said, “why all the evidence of stolen elections involves absentee ballots and the like.”</p></div><aside class="css-ew4tgv" aria-label="companion column"></aside></div></section><div></div><div></div><div></div><div></div><div><div id="bottom-wrapper" class="css-2fttua"><div id="bottom-slug" class="css-l9onyx"><p>Advertisement</p></div><a href="#after-bottom" class="css-1ly73wi">Continue reading the main story</a><div class="ad bottom-wrapper css-rfqw0c" id="bottom" style="min-height:90px"></div><div id="after-bottom"></div></div></div></article></div></main><div></div><footer class="css-1e1s8k7" role="contentinfo"><nav data-testid="footer" class="css-15uy5yv"><h2 class="css-1dv1kvn">Site Information Navigation</h2><ul class="css-1ho5u4o edvi3so0"><li data-testid="copyright"><a class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice">© <span>2022</span> <span>The New York Times Company</span></a></li></ul><ul class="css-13o0c9t edvi3so1"><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytco.com/">NYTCo</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us">Contact Us</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility">Accessibility</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytco.com/careers/">Work with us</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://nytmediakit.com/">Advertise</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.tbrandstudio.com/">T Brand Studio</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers">Your Ad Choices</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytimes.com/privacy/privacy-policy">Privacy Policy</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service">Terms of Service</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale">Terms of Sale</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="/sitemap/">Site Map</a></li><li class="mobileOnly css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytimes.com/ca/?action=click&region=Footer&pgtype=Homepage">Canada</a></li><li class="mobileOnly css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytimes.com/international/?action=click&region=Footer&pgtype=Homepage">International</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://help.nytimes.com/hc/en-us">Help</a></li><li class="css-a7htku edvi3so2"><a data-testid="footer-link" class="css-jq1cx6" href="https://www.nytimes.com/subscription?campaignId=37WXW">Subscriptions</a></li></ul></nav></footer></div></div></div></div> + <script>window.__preloadedData = {"initialData":{"data":{"article":{"__typename":"Article","id":"QXJ0aWNsZTpueXQ6Ly9hcnRpY2xlLzg1ZjBjZTlkLWM1MGEtNTgzMy04ZjQzLWVhYTRmZDA5ZjEyOQ==","compatibility":{"isOak":false,"__typename":"CompatibilityFeatures","hasVideo":false,"hasOakConversionError":false,"isArtReview":false,"isBookReview":false,"isDiningReview":false,"isMovieReview":false,"isTheaterReview":false},"archiveProperties":{"timesMachineUrl":"","lede":"","thumbnails":[],"__typename":"ArticleArchiveProperties"},"collections":[{"id":"TGVnYWN5Q29sbGVjdGlvbjpueXQ6Ly9sZWdhY3ljb2xsZWN0aW9uLzExZjcyYWI0LTdjZDAtNTQwYS05M2NjLWYzNWIzMmNkMDEzZA==","url":"https:\u002F\u002Fwww.nytimes.com\u002Fsection\u002Fus","slug":"us","__typename":"LegacyCollection","name":"U.S. News","collectionType":"SECTION","uri":"nyt:\u002F\u002Flegacycollection\u002F11f72ab4-7cd0-540a-93cc-f35b32cd013d","active":true,"header":"","tagline":"","mobileHeader":"","type":"legacycollection"},{"id":"TGVnYWN5Q29sbGVjdGlvbjpueXQ6Ly9sZWdhY3ljb2xsZWN0aW9uL2RiNjYxNjRiLWVhNWYtNTUyMS1hZGE0LTI4NGFjYmI1OWMyOQ==","url":"https:\u002F\u002Fwww.nytimes.com\u002Fsection\u002Fpolitics","slug":"politics","__typename":"LegacyCollection","name":"U.S. Politics","collectionType":"SECTION","uri":"nyt:\u002F\u002Flegacycollection\u002Fdb66164b-ea5f-5521-ada4-284acbb59c29","active":true,"header":"","tagline":"","mobileHeader":"","type":"legacycollection"}],"tone":"NEWS","section":{"id":"U2VjdGlvbjpueXQ6Ly9zZWN0aW9uL2EzNGQzZDZjLWM3N2YtNTkzMS1iOTUxLTI0MWI0ZTI4NjgxYw==","name":"us","displayName":"U.S.","url":"https:\u002F\u002Fwww.nytimes.com\u002Fsection\u002Fus","uri":"nyt:\u002F\u002Fsection\u002Fa34d3d6c-c77f-5931-b951-241b4e28681c","__typename":"Section"},"subsection":{"id":"U2VjdGlvbjpueXQ6Ly9zZWN0aW9uLzUzMzU4NzM5LTk3MzMtNWRmYi1iNmNmLTZmZGRjNDJjZjgzOQ==","name":"politics","displayName":"Politics","url":"\u002Fsection\u002Fpolitics","uri":"nyt:\u002F\u002Fsection\u002F53358739-9733-5dfb-b6cf-6fddc42cf839","__typename":"Section"},"sprinkledBody":{"content":[{"__typename":"HeaderLegacyBlock","subhead":null,"label":null,"headline":{"textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Error and Fraud at Issue as Absentee Voting Rises","formats":[]}],"__typename":"Heading1Block"},"ledeMedia":{"__typename":"ImageBlock","size":"MEDIUM","media":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMWVjMGI3OWItN2IxZC01ZWU4LTgyMzQtZDdiZTMxMmVjNTNi","imageType":"","url":"https:\u002F\u002Fwww.nytimes.com\u002Fimagepages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span.html","uri":"nyt:\u002F\u002Fimage\u002F1ec0b79b-7b1d-5ee8-8234-d7be312ec53b","credit":"Sarah Beth Glicksteen for The New York Times","legacyHtmlCaption":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.","crops":[{"renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-articleLarge.jpg","name":"articleLarge","width":600,"height":350,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-jumbo.jpg","name":"jumbo","width":1024,"height":755,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-popup.jpg","name":"popup","width":650,"height":479,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-superJumbo.jpg","name":"superJumbo","width":1464,"height":1079,"__typename":"ImageRendition"}],"__typename":"ImageCrop"},{"renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-articleInline.jpg","name":"articleInline","width":190,"height":140,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"caption":{"text":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.","content":[{"__typename":"ParagraphBlock","content":[{"text":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.","__typename":"TextInline","formats":[]}]}],"__typename":"TextOnlyDocumentBlock"},"altText":"","__typename":"Image"}},"byline":{"textAlign":"DEFAULT","hideHeadshots":false,"bylines":[{"prefix":"By","creators":[{"id":"UGVyc29uOm55dDovL3BlcnNvbi9jZmFmNjM4NS0xNzQ2LTVjZTAtYmU2MC1jMjA2N2Y5ZTIzZGQ=","displayName":"Adam Liptak","bioUrl":"https:\u002F\u002Fwww.nytimes.com\u002Fby\u002Fadam-liptak","promotionalMedia":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvYWNkZjJmMmUtMDNkYS01ZDJmLWJhYzQtNTVkMTgzN2MyYzk4","crops":[{"renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2018\u002F07\u002F13\u002Fmultimedia\u002Fauthor-adam-liptak\u002Fauthor-adam-liptak-thumbLarge-v3.png","name":"thumbLarge","__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"Person"}],"renderedRepresentation":"By Adam Liptak","__typename":"Byline"}],"role":[],"__typename":"BylineBlock"},"timestampBlock":{"timestamp":"2012-10-07T03:10:09.000Z","align":"DEFAULT","showUpdatedTimestamp":null,"__typename":"TimestampBlock"}},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"TALLAHASSEE, Fla. — On the morning of the primary here in August, the local elections board met to decide which absentee ballots to count. It was not an easy job.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":0,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The board tossed out some ballots because they arrived without the signature required on the outside of the return envelope. It rejected one that said “see inside” where the signature should have been. And it debated what to do with ballots in which the signature on the envelope did not quite match the one in the county’s files.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":1,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“This ‘r’ is not like that ‘r,’ ” Judge Augustus D. Aikens Jr. said, suggesting that a ","formats":[]},{"__typename":"TextInline","text":"ballot","formats":[{"__typename":"LinkFormat","url":"https:\u002F\u002Fwww.nytimes.com\u002F2021\u002F10\u002F11\u002Fus\u002Ffulton-county-election-workers-fired.html","title":""}]},{"__typename":"TextInline","text":" should be rejected.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":2,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Ion Sancho, the elections supervisor here, disagreed. “This ‘k’ is like that ‘k,’ ” he replied, and he persuaded his colleagues to count the vote.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":true,"index":3,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Scenes like this will play out in many elections next month, because Florida and other states are swiftly moving from voting at a polling place toward ","formats":[]},{"__typename":"TextInline","text":"voting by mail","formats":[{"__typename":"LinkFormat","url":"https:\u002F\u002Fwww.nytimes.com\u002F2020\u002F12\u002F10\u002Fus\u002Fmail-voting-absentee.html","title":""}]},{"__typename":"TextInline","text":". In the last general election in Florida, in 2010, 23 percent of voters cast absentee ballots, up from 15 percent in the midterm election four years before. Nationwide, the use of absentee ballots and other forms of voting by mail has more than tripled since 1980 and now accounts for almost 20 percent of all votes.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":4,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Yet votes cast by mail are less likely to be counted, more likely to be compromised and more likely to be contested than those cast in a voting booth, statistics show. Election officials reject almost 2 percent of ballots cast by mail, double the rate for in-person voting.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":5,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“The more people you force to vote by mail,” Mr. Sancho said, “the more invalid ballots you will generate.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":6,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Election experts say the challenges created by mailed ballots could well affect outcomes this fall and beyond. If the contests next month are close enough to be within what election lawyers call the margin of litigation, the grounds on which they will be fought will not be hanging chads but ballots cast away from the voting booth.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":7,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"In 2008, 18 percent of the votes in the nine states likely to decide this year’s presidential election were cast by mail. That number will almost certainly rise this year, and ","formats":[]},{"__typename":"TextInline","text":"voters in two-thirds of the states","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Freed.edu\u002Fearlyvoting\u002Fcalendar\u002F","title":"data from Early Voting Information Center"}]},{"__typename":"TextInline","text":" have already begun casting absentee ballots. In four Western states, voting by mail is the exclusive or dominant way to cast a ballot.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":true,"index":8,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The trend will probably result in more uncounted votes, and it increases the potential for fraud. While fraud in voting by mail is far less common than innocent errors, it is vastly more prevalent than the in-person voting fraud that has attracted far more attention, election administrators say.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":9,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"In Florida, absentee-ballot scandals seem to arrive like clockwork around election time. Before this year’s primary, for example, a woman in Hialeah ","formats":[]},{"__typename":"TextInline","text":"was charged with","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fmedia.miamiherald.com\u002Fsmedia\u002F2012\u002F08\u002F02\u002F13\u002F29\u002FDC6id.So.56.pdf","title":"arrest affidavit"}]},{"__typename":"TextInline","text":" forging an elderly voter’s signature, a felony, and possessing 31 completed absentee ballots, 29 more than allowed under ","formats":[]},{"__typename":"TextInline","text":"a local law","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.miamidade.gov\u002Fgovaction\u002Fmatter.asp?matter=112169&file=true&yearFolder=Y2011","title":"Miami-Dade ballots ordinance."}]},{"__typename":"TextInline","text":".","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":10,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The flaws of absentee voting raise questions about the most elementary promises of democracy. “The right to have one’s vote counted is as important as the act of voting itself,” Justice Paul H. Anderson of the Minnesota Supreme Court ","formats":[]},{"__typename":"TextInline","text":"wrote while considering disputed absentee ballots","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fmoritzlaw.osu.edu\u002Felectionlaw\u002Flitigation\u002Fdocuments\u002FOrder.12.18.08.pdf","title":"Coleman v. Ritchie"}]},{"__typename":"TextInline","text":" in the ","formats":[]},{"__typename":"TextInline","text":"close 2008 Senate election","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.nytimes.com\u002F2009\u002F07\u002F01\u002Fus\u002Fpolitics\u002F01minnesota.html?_r=1&hp","title":"Times article."}]},{"__typename":"TextInline","text":" between Al Franken and Norm Coleman.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":11,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Voting by mail is now common enough and problematic enough that election experts say there have been multiple elections in which no one can say with confidence which candidate was the deserved winner. The list includes the 2000 presidential election, in which problems with absentee ballots in Florida were a little-noticed footnote to other issues.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":12,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"In the last presidential election, 35.5 million voters requested absentee ballots, but only 27.9 million absentee votes were counted, according to ","formats":[]},{"__typename":"TextInline","text":"a study","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.law.nyu.edu\u002Fjournals\u002Flegislation\u002Fissues\u002Fvolume13number3\u002FECM_PRO_068045","title":"The study."}]},{"__typename":"TextInline","text":" by Charles Stewart III, a political scientist at the Massachusetts Institute of Technology. He calculated that 3.9 million ballots requested by voters never reached them; that another 2.9 million ballots received by voters did not make it back to election officials; and that election officials rejected 800,000 ballots. That suggests an overall failure rate of as much as 21 percent.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":13,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Some voters presumably decided not to vote after receiving ballots, but Mr. Stewart said many others most likely tried to vote and were thwarted. “If 20 percent, or even 10 percent, of voters who stood in line on Election Day were turned away,” he wrote in the study, published in The Journal of Legislation and Public Policy, “there would be national outrage.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":14,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The list of very close elections includes the 2008 Senate race in Minnesota, in which Mr. Franken’s victory over Mr. Coleman, the Republican incumbent, helped give Democrats the 60 votes in the Senate needed to pass President Obama’s health care bill. Mr. Franken won by 312 votes, while state officials rejected 12,000 absentee ballots. Recent primary elections in New York involving Republican state senators who had voted to allow same-sex marriage also hinged on absentee ballots.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":true,"index":15,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"There are, of course, significant advantages to voting by mail. It makes life easier for the harried, the disabled and the elderly. It is cheaper to administer, makes for shorter lines on election days and allows voters more time to think about ballots that list many races. By mailing ballots, those away from home can vote. Its availability may also increase turnout in local elections, though it does not seem to have had much impact on turnout in federal ones.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":16,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Still, voting in person is more reliable, particularly since election administrators made improvements to voting equipment after the 2000 presidential election.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":17,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"There have been other and more controversial changes since then, also in the name of reliability and efficiency. Lawmakers have cut back on early voting in person, cracked down on voter registration drives, imposed identification requirements, made it harder for students to cast ballots and proposed purging voter rolls in a way that critics have said would eliminate people who are eligible to vote.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":18,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"But almost nothing has been done about the distinctive challenges posed by absentee ballots. To the contrary, Ohio’s Republican secretary of state recently sent absentee ballot applications to every registered voter in the state. And Republican lawmakers in Florida recently revised state law to allow ballots to be mailed wherever voters want, rather than typically to only their registered addresses.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":19,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“This is the only area in Florida where we’ve made it easier to cast a ballot,” Daniel A. Smith, a political scientist at the University of Florida, said of absentee voting.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":20,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"He posited a reason that Republican officials in particular have pushed to expand absentee voting. “The conventional wisdom is that Republicans use absentee ballots and Democrats vote early,” he said.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":21,"bad":true,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"SlideshowBlock","size":"MEDIUM","media":{"id":"U2xpZGVzaG93Om55dDovL3NsaWRlc2hvdy9hNzk4YmZiMi1jZTFhLTU2MzAtYWFlMi01NTQzN2FjZmZjOWY=","displayProperties":{"template":"600px Slideshow","__typename":"CreativeWorkDisplayProperties"},"promotionalMedia":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMTNjNzk2ZGEtYTBhYy01MzlhLWI5ZmEtYTdkMzM3NmUzMmJh","credit":"Sarah Beth Glicksteen for The New York Times","url":"https:\u002F\u002Fwww.nytimes.com\u002Fimagepages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81.html","slideshowCrops":[{"renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-jumbo.jpg","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-superJumbo.jpg","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"url":"https:\u002F\u002Fwww.nytimes.com\u002Fslideshow\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT.html","headline":{"default":"In Florida, a Look at the Challenges of Mailed Ballots","__typename":"CreativeWorkHeadline"},"summary":"Votes cast by mail are less likely to be counted, more likely to be compromised and more likely to be contested than those cast in a voting booth, statistics show.","slides":[{"legacyHtmlCaption":"\u003Cp\u003EAn absentee ballot for the August primary was rejected at a Leon County elections board meeting in Florida. Nationwide, the use of absentee ballots and other forms of voting by mail has more than tripled since 1980 and now accounts for almost 20 percent of all votes.\u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvNTNlMDU4MTItNjk4ZS01NzU1LTkwNzktN2FlYTE2OWZlZTAy","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002F53e05812-698e-5755-9079-7aea169fee02","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6FEO\u002FBALLOT-slide-6FEO-jumbo.jpg","name":"jumbo","width":1024,"height":683,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6FEO\u002FBALLOT-slide-6FEO-slide.jpg","name":"slide","width":600,"height":400,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6FEO\u002FBALLOT-slide-6FEO-superJumbo.jpg","name":"superJumbo","width":2048,"height":1367,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EA poll worker waited outside Indian Springs Church, at a Leon County polling location, on Florida’s primary day in August. Votes cast by mail are less likely to be counted, more likely to be compromised and more likely to be contested than those cast in a voting booth, statistics show.\u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMjJkY2FmY2YtZDBlMC01Y2VkLWIyNjgtZTFjNzY5MDk4MTM5","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002F22dcafcf-d0e0-5ced-b268-e1c769098139","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-FZ18\u002FBALLOT-slide-FZ18-jumbo.jpg","name":"jumbo","width":1024,"height":683,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-FZ18\u002FBALLOT-slide-FZ18-slide.jpg","name":"slide","width":600,"height":400,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-FZ18\u002FBALLOT-slide-FZ18-superJumbo.jpg","name":"superJumbo","width":2048,"height":1367,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003E “The only cases of election fraud have been in absentee ballots,” said Ion Sancho, the Leon County elections supervisor, who favors early voting.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvZmFkODI4OGMtN2U0My01YThkLThjMGYtMzkxOTk5NzFjYmRj","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002Ffad8288c-7e43-5a8d-8c0f-39199971cbdc","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-PV2Q\u002FBALLOT-slide-PV2Q-jumbo.jpg","name":"jumbo","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-PV2Q\u002FBALLOT-slide-PV2Q-slide.jpg","name":"slide","width":600,"height":399,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-PV2Q\u002FBALLOT-slide-PV2Q-superJumbo.jpg","name":"superJumbo","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EAt the office of the elections supervisor in Tallahassee, Karen Williams, an election records specialist, fed absentee ballots into a machine that verifies signatures and counts votes. In Leon County, the instructions on absentee ballots are clear and the rejection rate is less than 1 percent.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMTNjNzk2ZGEtYTBhYy01MzlhLWI5ZmEtYTdkMzM3NmUzMmJh","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002F13c796da-a0ac-539a-b9fa-a7d3376e32ba","crops":[{"name":"THREE_BY_TWO","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-thumbWide.jpg","name":"thumbWide","width":190,"height":126,"__typename":"ImageRendition"}],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-jumbo.jpg","name":"jumbo","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-slide.jpg","name":"slide","width":600,"height":399,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-1P81\u002FBALLOT-slide-1P81-superJumbo.jpg","name":"superJumbo","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EThe Leon County elections board reviewed absentee ballots that were rejected by the machines. A missing signature on an envelope is a common reason a ballot is rejected.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvYjY0MjMyZDctMzE3YS01NDhkLWFmZGYtMjMzMGFjMmFkNWI3","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002Fb64232d7-317a-548d-afdf-2330ac2ad5b7","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-XY8X\u002FBALLOT-slide-XY8X-jumbo.jpg","name":"jumbo","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-XY8X\u002FBALLOT-slide-XY8X-slide.jpg","name":"slide","width":600,"height":399,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-XY8X\u002FBALLOT-slide-XY8X-superJumbo.jpg","name":"superJumbo","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EA machine verifying ballot signatures. The elections board tossed out some ballots because they arrived without the signature required on the outside of the return envelope. And it debated what to do with ballots in which the signature on the envelope did not quite match the one in the county’s files.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvNDAxN2I3MzgtOTIyMC01NGEzLTkxYzEtODZlZjM5ZWY2ODVi","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002F4017b738-9220-54a3-91c1-86ef39ef685b","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-N3RQ\u002FBALLOT-slide-N3RQ-jumbo.jpg","name":"jumbo","width":1024,"height":683,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-N3RQ\u002FBALLOT-slide-N3RQ-slide.jpg","name":"slide","width":600,"height":400,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-N3RQ\u002FBALLOT-slide-N3RQ-superJumbo.jpg","name":"superJumbo","width":2048,"height":1367,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EIn the recent primary, by the time Mr. Sancho rose for his duties at 4 a.m., almost 40 percent of ballots had already been cast. They were split between early votes at polling places and absentee ballots.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvZWI3OTAyYzYtNTRjYS01OWExLTk2MmYtMGQzNzBlNDk1M2Y3","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002Feb7902c6-54ca-59a1-962f-0d370e4953f7","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-VW16\u002FBALLOT-slide-VW16-jumbo.jpg","name":"jumbo","width":1024,"height":683,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-VW16\u002FBALLOT-slide-VW16-slide.jpg","name":"slide","width":600,"height":400,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-VW16\u002FBALLOT-slide-VW16-superJumbo.jpg","name":"superJumbo","width":2048,"height":1367,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EPoll workers ran a polling place where voters could cast absentee ballots in person on Election Day. The flaws of absentee voting raise questions about the most elementary promises of democracy. “The right to have one’s vote counted is as important as the act of voting itself,” said Justice Paul H. Anderson of the Minnesota Supreme Court when considering disputed absentee ballots in the close 2008 Senate election.\u003C\u002Fp\u003E\r\n\u003Cp\u003E \u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvZmFlYTUyYTktNTI3Zi01NjE0LTk4ZTMtZmE0NTBiM2EzYjdm","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002Ffaea52a9-527f-5614-98e3-fa450b3a3b7f","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6VA0\u002FBALLOT-slide-6VA0-jumbo.jpg","name":"jumbo","width":1024,"height":683,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6VA0\u002FBALLOT-slide-6VA0-slide.jpg","name":"slide","width":600,"height":400,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-6VA0\u002FBALLOT-slide-6VA0-superJumbo.jpg","name":"superJumbo","width":2048,"height":1367,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EMr. Sancho signed in to vote at his polling location at Indian Springs Church. He said that his state should be especially attentive to flaws in the way it runs elections in light of the legacy of the 2000 presidential contest. Voting by mail played a crucial role that year in Florida, when the margin between George W. Bush and Al Gore was razor thin and hundreds of absentee ballots were counted in apparent violation of state law.\u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvZTlhNDU1NTAtOGM2OC01MzhiLWJiMmEtMTU2OGM1NmVlMTY0","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002Fe9a45550-8c68-538b-bb2a-1568c56ee164","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-I8AM\u002FBALLOT-slide-I8AM-jumbo.jpg","name":"jumbo","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-I8AM\u002FBALLOT-slide-I8AM-slide.jpg","name":"slide","width":600,"height":399,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-I8AM\u002FBALLOT-slide-I8AM-superJumbo.jpg","name":"superJumbo","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"},{"legacyHtmlCaption":"\u003Cp\u003EElection experts say the challenges created by mailed ballots could well affect outcomes this fall and beyond. If the contests next month are close enough to be within what election lawyers call the margin of litigation, the grounds on which they will be fought will not be hanging chads but ballots cast away from the voting booth.\u003C\u002Fp\u003E","image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvOGEzYjYzOWQtNDEzNC01OGFmLWI3NjQtMWMyZDI3ODk5ODQ4","credit":"Sarah Beth Glicksteen for The New York Times","summary":"","uri":"nyt:\u002F\u002Fimage\u002F8a3b639d-4134-58af-b764-1c2d27899848","crops":[{"name":"THREE_BY_TWO","renditions":[],"__typename":"ImageCrop"},{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-HD07\u002FBALLOT-slide-HD07-jumbo.jpg","name":"jumbo","width":1024,"height":681,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-HD07\u002FBALLOT-slide-HD07-slide.jpg","name":"slide","width":600,"height":399,"__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT-slide-HD07\u002FBALLOT-slide-HD07-superJumbo.jpg","name":"superJumbo","width":2048,"height":1363,"__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"__typename":"Image"},"__typename":"SlideshowSlide"}],"__typename":"Slideshow"}},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":22,"bad":true,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Republicans are in fact more likely than Democrats to vote absentee. In the 2008 general election in Florida, 47 percent of absentee voters were Republicans and 36 percent were Democrats.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":true,"index":23,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"There is a bipartisan consensus that voting by mail, whatever its impact, is more easily abused than other forms. In a 2005 report signed by President Jimmy Carter and James A. Baker III, who served as secretary of state under the first President George Bush, ","formats":[]},{"__typename":"TextInline","text":"the Commission on Federal Election Reform concluded","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww1.american.edu\u002Fia\u002Fcfer\u002Freport\u002Freport.html","title":"report"}]},{"__typename":"TextInline","text":", “Absentee ballots remain the largest source of potential voter fraud.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":24,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"On the most basic level, absentee voting replaces the oversight that exists at polling places with something akin to an honor system.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":25,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“Absentee voting is to voting in person,” Judge Richard A. Posner of the United States Court of Appeals for the Seventh Circuit ","formats":[]},{"__typename":"TextInline","text":"has written","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fbulk.resource.org\u002Fcourts.gov\u002Fc\u002FF3\u002F385\u002F385.F3d.1128.03-3770.html","title":"Griffin v. Roupas"}]},{"__typename":"TextInline","text":", “as a take-home exam is to a proctored one.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":26,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Fraud Easier Via Mail","formats":[{"__typename":"BoldFormat","type":null}]}]},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Election administrators have a shorthand name for a central weakness of voting by mail. They call it granny farming.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":27,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“The problem,” said Murray A. Greenberg, a former county attorney in Miami, “is really with the collection of absentee ballots at the senior citizen centers.” In Florida, people affiliated with political campaigns “help people vote absentee,” he said. “And help is in quotation marks.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":28,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Voters in nursing homes can be subjected to subtle pressure, outright intimidation or fraud. The secrecy of their voting is easily compromised. And their ballots can be intercepted both coming and going.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":true,"index":29,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The problem is not limited to the elderly, of course. Absentee ballots also make it much easier to buy and sell votes. In recent years, courts have ","formats":[]},{"__typename":"TextInline","text":"invalidated mayoral elections in Illinois","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.state.il.us\u002Fcourt\u002Fopinions\u002Fappellatecourt\u002F2005\u002F1stdistrict\u002Fmarch\u002Fhtml\u002F1032528.htm","title":"Qualkinbush v. Skubisz"}]},{"__typename":"TextInline","text":" and ","formats":[]},{"__typename":"TextInline","text":"Indiana","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fscholar.google.com\u002Fscholar_case?case=12855003844415311095&hl=en&as_sdt=2&as_vis=1&oi=scholarr","title":"Pabey v. Pastrick"}]},{"__typename":"TextInline","text":" because of fraudulent absentee ballots.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":30,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Voting by mail also played a crucial role in the 2000 presidential election in Florida, when the margin between George W. Bush and Al Gore was razor thin and ","formats":[]},{"__typename":"TextInline","text":"hundreds of absentee ballots were counted in apparent violation of state law","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.nytimes.com\u002F2001\u002F07\u002F15\u002Fus\u002Fexamining-the-vote-how-bush-took-florida-mining-the-overseas-absentee-vote.html?pagewanted=all&src=pm","title":"Times article."}]},{"__typename":"TextInline","text":". The flawed ballots, from Americans living abroad, included some without postmarks, some postmarked after the election, some without witness signatures, some mailed from within the United States and some sent by people who voted twice. All would have been disqualified had the state’s election laws been strictly enforced.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":31,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"In the recent primary here, almost 40 percent of ballots were not cast in the voting booth on the day of the election. They were split between early votes cast at polling places, which Mr. Sancho, the Leon County elections supervisor, favors, and absentee ballots, which make him nervous.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":32,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“There has been not one case of fraud in early voting,” Mr. Sancho said. “The only cases of election fraud have been in absentee ballots.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":33,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Efforts to prevent fraud at polling places have an ironic consequence, Justin Levitt, a professor at Loyola Law School, ","formats":[]},{"__typename":"TextInline","text":"told the Senate Judiciary Committee","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.judiciary.senate.gov\u002Fpdf\u002F11-9-8LevittTestimony.pdf","title":"The testimony."}]},{"__typename":"TextInline","text":" September last year. They will, he said, “drive more voters into the absentee system, where fraud and coercion have been documented to be real and legitimate concerns.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":34,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“That is,” he said, “a law ostensibly designed to reduce the incidence of fraud is likely to increase the rate at which voters utilize a system known to succumb to fraud more frequently.”","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":35,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Clarity Brings Better Results","formats":[{"__typename":"BoldFormat","type":null}]}]},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"In 2008, Minnesota officials rejected 12,000 absentee ballots, about 4 percent of all such votes, for the myriad reasons that make voting by mail far less reliable than voting in person.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":true,"index":36,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The absentee ballot itself could be blamed for some of the problems. It had to be enclosed in envelopes containing various information and signatures, including one from a witness who had to attest to handling the logistics of seeing that “the voter marked the ballots in that individual’s presence without showing how they were marked.” Such witnesses must themselves be registered voters, with a few exceptions.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":37,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Absentee ballots have been rejected in Minnesota and elsewhere for countless reasons. Signatures from older people, sloppy writers or stroke victims may not match those on file. The envelopes and forms may not have been configured in the right sequence. People may have moved, and addresses may not match. Witnesses may not be registered to vote. The mail may be late.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":38,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"But it is certainly possible to improve the process and reduce the error rate.","formats":[]}]},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Here in Leon County, the rejection rate for absentee ballots is less than 1 percent. The instructions it provides to voters are clear, and the outer envelope is a model of graphic design, with a large signature box at its center.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":false,"index":39,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The envelope requires only standard postage, and Mr. Sancho has made arrangements with the post office to pay for ballots that arrive without stamps.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":40,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Still, he would prefer that voters visit a polling place on Election Day or beforehand so that errors and misunderstandings can be corrected and the potential for fraud minimized.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":41,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“If you vote by mail, where is that coming from?” he asked. “Is there intimidation going on?”","formats":[]}]},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Last November, Gov. Rick Scott, a Republican, ","formats":[]},{"__typename":"TextInline","text":"suspended a school board member","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.google.com\u002Furl?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CEQQFjAG&url=http%3A%2F%2Fwww.flgov.com%2Fwp-content%2Fuploads%2Forders%2F2011%2F11-215-johnson.pdf&ei=lLdsUOulOM630AHa54D4DQ&usg=AFQjCNGpZuSjlvClUw-nR74UdU0mVF_jig&sig2=ES0oyjWh4TH3RZ5CyOKQVg&cad=rja","title":"Executive order and arrest affidavit."}]},{"__typename":"TextInline","text":" in Madison County, not far from here, after she was arrested on charges including absentee ballot fraud.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":42,"bad":false,"adsMobileHoldout":true,"adsDesktopHoldout":true},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"The board member, Abra Hill Johnson, won the school board race “by what appeared to be a disproportionate amount of absentee votes,” ","formats":[]},{"__typename":"TextInline","text":"the arrest affidavit","formats":[{"__typename":"LinkFormat","url":"http:\u002F\u002Fwww.google.com\u002Furl?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CEQQFjAG&url=http%3A%2F%2Fwww.flgov.com%2Fwp-content%2Fuploads%2Forders%2F2011%2F11-215-johnson.pdf&ei=lLdsUOulOM630AHa54D4DQ&usg=AFQjCNGpZuSjlvClUw-nR74UdU0mVF_jig&sig2=ES0oyjWh4TH3RZ5CyOKQVg&cad=rja","title":"Executive order and arrest affidavit."}]},{"__typename":"TextInline","text":" said. The vote was 675 to 647, but Ms. Johnson had 217 absentee votes to her opponent’s 86. Officials said that 80 absentee ballots had been requested at just nine addresses. Law enforcement agents interviewed 64 of the voters whose ballots were sent; only two recognized the address.","formats":[]}]},{"__typename":"Dropzone","adsMobile":true,"adsDesktop":true,"index":43,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Ms. Johnson has pleaded not guilty.","formats":[]}]},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"Election law experts say that pulling off in-person voter fraud on a scale large enough to swing an election, with scores if not hundreds of people committing a felony in public by pretending to be someone else, is hard to imagine, to say nothing of exceptionally risky.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":44,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"There are much simpler and more effective alternatives to commit fraud on such a scale, said Heather Gerken, a law professor at Yale.","formats":[]}]},{"__typename":"Dropzone","adsMobile":false,"adsDesktop":false,"index":45,"bad":false,"adsMobileHoldout":false,"adsDesktopHoldout":false},{"__typename":"ParagraphBlock","textAlign":"DEFAULT","content":[{"__typename":"TextInline","text":"“You could steal some absentee ballots or stuff a ballot box or bribe an election administrator or fiddle with an electronic voting machine,” she said. That explains, she said, “why all the evidence of stolen elections involves absentee ballots and the like.”","formats":[]}]}],"__typename":"DocumentBlock"},"url":"https:\u002F\u002Fwww.nytimes.com\u002F2012\u002F10\u002F07\u002Fus\u002Fpolitics\u002Fas-more-vote-by-mail-faulty-ballots-could-impact-elections.html","adTargetingParams":[{"key":"als_test","value":"1662790801713","__typename":"AdTargetingParam"},{"key":"prop","value":"nyt","__typename":"AdTargetingParam"},{"key":"plat","value":"web","__typename":"AdTargetingParam"},{"key":"edn","value":"us","__typename":"AdTargetingParam"},{"key":"brandsensitive","value":"false","__typename":"AdTargetingParam"},{"key":"per","value":"","__typename":"AdTargetingParam"},{"key":"org","value":"","__typename":"AdTargetingParam"},{"key":"geo","value":"","__typename":"AdTargetingParam"},{"key":"des","value":"absenteevoting,fraudsandswindling,voterregistrationandrequiremen,presidentialelectionof2012,series","__typename":"AdTargetingParam"},{"key":"spon","value":"","__typename":"AdTargetingParam"},{"key":"auth","value":"adamliptak","__typename":"AdTargetingParam"},{"key":"col","value":"","__typename":"AdTargetingParam"},{"key":"coll","value":"usnews,uspolitics","__typename":"AdTargetingParam"},{"key":"artlen","value":"long","__typename":"AdTargetingParam"},{"key":"ledemedsz","value":"none","__typename":"AdTargetingParam"},{"key":"gui","value":"","__typename":"AdTargetingParam"},{"key":"template","value":"article","__typename":"AdTargetingParam"},{"key":"typ","value":"art","__typename":"AdTargetingParam"},{"key":"section","value":"us","__typename":"AdTargetingParam"},{"key":"si_section","value":"us","__typename":"AdTargetingParam"},{"key":"id","value":"100000001830255","__typename":"AdTargetingParam"},{"key":"trend","value":"","__typename":"AdTargetingParam"},{"key":"pt","value":"nt1,nt10,nt12,nt13,nt14,nt15,nt16,nt18,nt2,nt21,nt3,nt6,nt8,nt9,pt11","__typename":"AdTargetingParam"},{"key":"gscat","value":"neg_elec,neg_citi_aa,neg_chanel,neg_bofa,neg_debeer,neg_google,neg_ibmtest,neg_gg1,gs_politics,neg_mttl,neg_mtb,neg_ts,neg_capitalone,gs_politics_misc,neg_mastercard,neg_ms_safe,neg_ibm,neg_rms,neg_rolex,gs_politics_american,gs_law_misc,gs_law,gv_safe,gs_t","__typename":"AdTargetingParam"},{"key":"tt","value":"","__typename":"AdTargetingParam"},{"key":"mt","value":"MT10,MT8","__typename":"AdTargetingParam"}],"sourceId":"100000001830255","type":"article","wordCount":2155,"bylines":[{"creators":[{"id":"UGVyc29uOm55dDovL3BlcnNvbi9jZmFmNjM4NS0xNzQ2LTVjZTAtYmU2MC1jMjA2N2Y5ZTIzZGQ=","displayName":"Adam Liptak","__typename":"Person","url":"","bioUrl":"https:\u002F\u002Fwww.nytimes.com\u002Fby\u002Fadam-liptak"}],"__typename":"Byline","renderedRepresentation":"By Adam Liptak"}],"displayProperties":{"fullBleedDisplayStyle":"","__typename":"CreativeWorkDisplayProperties","serveAsNyt4":false},"typeOfMaterials":["News"],"timesTags":[{"__typename":"Subject","vernacular":"Absentee voting;Vote-by-mail;Early Voting","isAdvertisingBrandSensitive":false,"displayName":"Absentee Voting"},{"__typename":"Subject","vernacular":"Fraud","isAdvertisingBrandSensitive":false,"displayName":"Frauds and Swindling"},{"__typename":"Subject","vernacular":"Voter registration","isAdvertisingBrandSensitive":false,"displayName":"Voter Registration and Requirements"},{"__typename":"Subject","vernacular":"2012 Presidential Election","isAdvertisingBrandSensitive":false,"displayName":"Presidential Election of 2012"},{"__typename":"Subject","vernacular":"None","isAdvertisingBrandSensitive":false,"displayName":"Series"}],"language":null,"desk":"National","kicker":"","headline":{"default":"Error and Fraud at Issue as Absentee Voting Rises","__typename":"CreativeWorkHeadline","seo":"As More Vote by Mail, Faulty Ballots Could Impact Elections"},"commentProperties":{"status":"NO_COMMENTS","__typename":"CreativeWorkCommentProperties","prompt":"","approvedCommentsCount":null},"firstPublished":"2012-10-07T03:10:09.000Z","lastModified":"2021-10-12T00:26:45.335Z","originalDesk":"","source":{"id":"T3JnYW5pemF0aW9uOm55dDovL29yZ2FuaXphdGlvbi9jMjc5MTM4OC02YjE2LTVmZmQtYTExOS05NmVhY2IxOTg5YzE=","displayName":"New York Times","__typename":"Organization"},"printInformation":{"page":"1","section":"A","publicationDate":"2012-10-07T04:00:00.000Z","__typename":"PrintInformation"},"sprinkled":{"configs":[{"name":"mobile","stride":4,"threshold":3,"__typename":"SprinkledConfig"},{"name":"desktop","stride":7,"threshold":3,"__typename":"SprinkledConfig"},{"name":"mobileHoldout","stride":4,"threshold":2,"__typename":"SprinkledConfig"},{"name":"desktopHoldout","stride":7,"threshold":2,"__typename":"SprinkledConfig"},{"name":"hybrid","stride":4,"threshold":3,"__typename":"SprinkledConfig"}],"__typename":"SprinkledContent"},"column":null,"dfpTaxonomyException":null,"associatedNewsletter":null,"advertisingProperties":{"sensitivity":"SHOW_ADS","__typename":"CreativeWorkAdvertisingProperties"},"translations":[],"summary":"Nationwide, mailed ballots now account for nearly 20 percent of votes, yet such ballots are more likely to be compromised, and contested, than those cast in person, statistics show.","lastMajorModification":"2021-10-12T00:26:45.335Z","uri":"nyt:\u002F\u002Farticle\u002F85f0ce9d-c50a-5833-8f43-eaa4fd09f129","eventId":"pubp:\u002F\u002Fevent\u002Ffb2fd2461fb84214a4f7977e977f12d5","promotionalMedia":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMWVjMGI3OWItN2IxZC01ZWU4LTgyMzQtZDdiZTMxMmVjNTNi","assetCrops":[{"name":"MASTER","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-articleLarge.jpg","height":350,"width":600,"name":"articleLarge","__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-superJumbo.jpg","height":1079,"width":1464,"name":"superJumbo","__typename":"ImageRendition"}],"__typename":"ImageCrop"},{"name":"SMALL_SQUARE","renditions":[{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-thumbStandard.jpg","height":75,"width":75,"name":"thumbStandard","__typename":"ImageRendition"},{"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-thumbLarge.jpg","height":150,"width":150,"name":"thumbLarge","__typename":"ImageRendition"}],"__typename":"ImageCrop"}],"caption":{"text":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.","__typename":"TextOnlyDocumentBlock"},"__typename":"Image"},"promotionalImage":{"socialMediaRendition":{"parentPublishDate":"2012-10-07T03:10:09.000Z","parentPublishYear":2012,"signature":{"value":"ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2","keyId":"ZQJBKqZ0VN","__typename":"ImageSignature"},"rendition":{"name":"articleLarge","height":350,"width":600,"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-articleLarge.jpg?year=2012&h=350&w=600&s=ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2&k=ZQJBKqZ0VN","__typename":"ImageRendition"},"__typename":"SignableImageRendition"},"twitterRendition":{"parentPublishDate":"2012-10-07T03:10:09.000Z","parentPublishYear":2012,"signature":{"value":"ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2","keyId":"ZQJBKqZ0VN","__typename":"ImageSignature"},"rendition":{"name":"articleLarge","height":350,"width":600,"url":"https:\u002F\u002Fstatic01.nyt.com\u002Fimages\u002F2012\u002F10\u002F07\u002Fus\u002FBALLOT_span\u002FBALLOT-articleLarge.jpg?year=2012&h=350&w=600&s=ec2b24b90a93b49d5774e8f371ac3b86bf9d84e32ff030e9cdffa675f148f3f2&k=ZQJBKqZ0VN&tw=1","__typename":"ImageRendition"},"__typename":"SignableImageRendition"},"image":{"id":"SW1hZ2U6bnl0Oi8vaW1hZ2UvMWVjMGI3OWItN2IxZC01ZWU4LTgyMzQtZDdiZTMxMmVjNTNi","caption":{"text":"An absentee ballot in Florida. Almost 2 percent of mailed ballots are rejected, double the rate for in-person voting.","__typename":"TextOnlyDocumentBlock"},"__typename":"Image"},"__typename":"PromotionalImage"},"slug":"07ballots","newsStatus":"DEFAULT","sourcePublisher":"scoop","episodeProperties":null,"reviewSummary":"","reviewItems":[],"storylines":[],"associatedAssets":[{"region":"MAIN_CONTENT_3","assetName":"styln-promo","ruleName":"styln-liptak","testName":"","parentTest":"","asset":{"__typename":"Capsule","uri":"nyt:\u002F\u002Fcapsule\u002Ff549b788-2498-5ba9-9ca6-1989384d67e7"},"__typename":"AssociatedArticleAssetBlock"},{"region":"ABOVE_MAIN_CONTENT","assetName":"email-signup-on-politics","ruleName":"maps-on-politics-email-signup","testName":"","parentTest":"","asset":{"__typename":"Capsule","uri":"nyt:\u002F\u002Fcapsule\u002F6776a1b1-d1a2-5dc4-8d55-8ad7e143b594"},"__typename":"AssociatedArticleAssetBlock"}]}}},"initialState":{},"config":{"gqlUrlClient":"https:\u002F\u002Fsamizdat-graphql.nytimes.com\u002Fgraphql\u002Fv2","gqlRequestHeaders":{"nyt-app-type":"project-vi","nyt-app-version":"0.0.5","nyt-token":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs+\u002FoUCTBmD\u002FcLdmcecrnBMHiU\u002FpxQCn2DDyaPKUOXxi4p0uUSZQzsuq1pJ1m5z1i0YGPd1U1OeGHAChWtqoxC7bFMCXcwnE1oyui9G1uobgpm1GdhtwkR7ta7akVTcsF8zxiXx7DNXIPd2nIJFH83rmkZueKrC4JVaNzjvD+Z03piLn5bHWU6+w+rA+kyJtGgZNTXKyPh6EC6o5N+rknNMG5+CdTq35p8f99WjFawSvYgP9V64kgckbTbtdJ6YhVP58TnuYgr12urtwnIqWP9KSJ1e5vmgf3tunMqWNm6+AnsqNj8mCLdCuc5cEB74CwUeQcP2HQQmbCddBy2y0mEwIDAQAB"},"gqlFetchTimeout":1500,"disablePersistedQueries":false,"fastlyHeaders":{},"initialDeviceType":"smartphone","fastlyAbraConfig":{".ver":"9625.000","HOME_chartbeat":"0_Control","INT_cwv_v2_control_split":"","INT_cwv_dfp_deferAds_0322":"","Wirecutter_Growth_DEMO":"1_grow_variant"},"internalPreviewConfig":{"meter":undefined,"swg":undefined},"webviewEnvironment":{"isInWebview":false},"serviceWorkerFile":"service-worker-test-1662742927491.js"},"ssrQuery":{},"initialLocation":{"pathname":"\u002F2012\u002F10\u002F07\u002Fus\u002Fpolitics\u002Fas-more-vote-by-mail-faulty-ballots-could-impact-elections.html","search":""}};</script> + + + + + <script>!function(e){function a(a){for(var d,t,n=a[0],b=a[1],s=a[2],i=0,l=[];i<n.length;i++)t=n[i],Object.prototype.hasOwnProperty.call(c,t)&&c[t]&&l.push(c[t][0]),c[t]=0;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(e[d]=b[d]);for(f&&f(a);l.length;)l.shift()();return o.push.apply(o,s||[]),r()}function r(){for(var e,a=0;a<o.length;a++){for(var r=o[a],d=!0,n=1;n<r.length;n++){var b=r[n];0!==c[b]&&(d=!1)}d&&(o.splice(a--,1),e=t(t.s=r[0]))}return e}var d={},c={90:0},o=[];function t(a){if(d[a])return d[a].exports;var r=d[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var a=[],r=c[e];if(0!==r)if(r)a.push(r[2]);else{var d=new Promise((function(a,d){r=c[e]=[a,d]}));a.push(r[2]=d);var o,n=document.createElement("script");n.charset="utf-8",n.timeout=120,t.nc&&n.setAttribute("nonce",t.nc),n.src=function(e){return t.p+""+({1:"vendors~answerpage~audio~bestsellers~byline~capsule~collections~explainer~home~hubpage~liveblog~mark~58f33aa8",2:"vendors~audio~byline~capsule~clientSideCapsule~collections~explainer~liveblog~paidpost~slideshow~sto~a2187976",3:"vendors~audio~capsule~card~clientSideCapsule~collections~explainer~home~liveblog~paidpost~story~tren~0ac42215",4:"answerpage~bestsellers~card~hubpage~markets~privacy~reviews~search~timeswire~trending~weddings",5:"answerpage~bestsellers~hubpage~markets~reviews~your-list",6:"freeaccess~getstarted~newsletter~welcomesubscriber",7:"vendors~emailsignup~newsletter~newsletters~newsletterssubscriberonly",8:"freeaccess~getstarted~welcomesubscriber",9:"getstarted~postLoginInterrupter~welcomesubscriber",10:"vendors~byline~timeswire~your-list",11:"coderedeem~freeaccess",12:"explainerRecirculation~liveRecirculation",13:"recirculation~well",14:"vendors~clientSideCapsule~home",15:"vendors~commentsForm~weddings",16:"vendors~newsletter~newsletters",17:"ChineseHanLogo",18:"DealbookLogo",19:"InsiderLogo",20:"Rio2016",21:"TMagazineLogo",22:"UpshotLogo",23:"WorldCupLogo2018",24:"additionalPlaylists",26:"answerpage",27:"ask",28:"audio",29:"audioblock",30:"bestsellers",31:"blank",32:"bonusredemption",33:"byline",34:"canadaHamburgerNavData",35:"canadaSiteIndexData",36:"capsule",37:"card",38:"clientSideCapsule",39:"coderedeem",40:"collections",41:"comments",42:"commentsForm",43:"datasubjectrequest",44:"datasubjectrequestverification",45:"dealbook",46:"defaultHamburgerNavData",47:"defaultSiteIndexData",48:"desktopNav",49:"emailsignup",50:"episodefooter",51:"explainer",52:"explainerPostHeader",53:"explainerRecirculation",54:"foo",55:"footerBlock",56:"freeaccess",57:"getstarted",58:"headerfullbleedhorizontal",59:"headerfullbleedvertical",60:"headerlivebriefingvi",61:"home",62:"hubpage",65:"internationalHamburgerNavData",66:"internationalSiteIndexData",67:"lens",68:"livePostHeader",69:"liveRecirculation",70:"liveblog",72:"markets",73:"mortgagecalculator",74:"newsletter",75:"newsletters",76:"newsletterssubscriberonly",77:"opinion",78:"paidpost",79:"phone-number-input",80:"postLoginInterrupter",81:"privacy",82:"producernotes",83:"recirculation",84:"related-coverage-chunk",85:"reviewheader",86:"reviews",91:"search",92:"siteIndexContent",93:"sitemap",94:"slideshow",95:"slideshowinline",96:"stickyfilljs",97:"story",98:"surveywithdrawconsent",99:"timeswire",100:"trending",101:"upshot",104:"vendors~ask",105:"vendors~audioblock",106:"vendors~card",107:"vendors~datasubjectrequest",108:"vendors~episodefooter",109:"vendors~footerBlock",110:"vendors~headerfullbleedhorizontal",111:"vendors~headerlivebriefingvi",112:"vendors~mortgagecalculator",113:"vendors~newsletterssubscriberonly",114:"vendors~phone-number-input",115:"vendors~producernotes",116:"vendors~reviewheader",117:"vendors~search",118:"vendors~slideshow",119:"vendors~slideshowinline",120:"vendors~videoblock",121:"vendors~weddings",122:"vendors~well",123:"video",124:"videoblock",125:"weddings",126:"welcomeBannerRecirculationBlock",127:"welcomesubscriber",128:"well",129:"world-cup-2019",130:"your-list"}[e]||e)+"-"+{1:"b4e41c2602d23ccbc189",2:"3875bb050aa80282125f",3:"0dd61fdcb167951d5099",4:"fd0bb5dafc4149f699c4",5:"27c6eed5698714608233",6:"268647ca89afa38697eb",7:"e13dad7b443782229e2e",8:"983dffeaf941eb25b6f3",9:"97411653a28e0e1a10f8",10:"97a14116bc9ebbdbfe7d",11:"66e70f8a6d2f6793c490",12:"8de5ddf15c15fdaa8561",13:"b578d1315327f051f18b",14:"5c79e0dc3dd297ba8e16",15:"0be84de3d7f797ec8100",16:"3d5705679764a1d87090",17:"6f864702224110c28511",18:"23fc490f60c62fff1d32",19:"8599d343e62ba4287c62",20:"fc74775b154be6506e53",21:"78e9e620f6dbaf483de3",22:"00ab36c2439b95e61288",23:"30204cbc80a7595a1815",24:"b11ce2dfbe71bb369814",26:"bfdfe9cce439bf8801e2",27:"3e5fa13fc6f5659f26d4",28:"8639ff5e714850c51428",29:"390353eb37332f4e6c02",30:"5b1232b38f121f199f46",31:"58ff250a32f94baf5fd9",32:"0263b1a088eb3a79942e",33:"300ce11127eac5f66dd6",34:"812d9e6cf094bacc7e97",35:"6b43c16234148b148120",36:"6fa3e16c298d32d155b0",37:"036384ac4e2fdf728c69",38:"5351ec3574929651ef6b",39:"dacc5e9863e6ab459ba8",40:"7bf5078580ea956dda9f",41:"aa84983a7f37052f04fb",42:"970b3b700f9831dee357",43:"f1b2893409f93aca35ab",44:"1aedd958f1fe7fa17148",45:"d80733a3687722401bca",46:"5796926d5937ae17a9b2",47:"9c227d6ed2e11af3d742",48:"201413deefb574a14651",49:"8a1597eeaef0b6717730",50:"0ca7d72aa9afc66a3a81",51:"98eb1d820648af5c6d86",52:"d8c447f0fa04f8aa0d71",53:"1546e3e95e1be1b8da70",54:"367685b3f04ab09225f8",55:"ebe920b315ae540f23bd",56:"8209353f91fb9aaceacc",57:"bb7c354e5dbc8196050e",58:"f8dea5d79c77c2f11e5f",59:"29a05604c5baa5dab51c",60:"fa4029a0c7ccd7c81980",61:"c501b90e709c4c6a6007",62:"b95b0020abecb6c0029d",65:"5aa53e3c4cf517ac7b53",66:"6cf14e5c0c4c30a5f0d2",67:"579461663f910d6ef645",68:"7a56e956c428af4a88af",69:"38504e5543a3f90e39f5",70:"a8b0f2805d59469ae7b0",72:"ac68eb16ca2d76205b3c",73:"1e8a822e0014d96c0b87",74:"b59c8206aab20eb0d63b",75:"ee1524fb5dc153d93499",76:"c588c88b8f1424a7cd9d",77:"e14b5965a7bc7ee56820",78:"31a06a4d2ea229785a55",79:"a260f04a5a87830a16f2",80:"c0cd903612f9ebeb344d",81:"4deda44190eca2fc833c",82:"e6b46c9407a82c0250b0",83:"eb31bbcebeaa998e7a64",84:"4275e27175d23315b199",85:"a8343d3711d716e03eda",86:"dd2490bddc619be9b93d",91:"8ab53e0cd6dad03c5c5d",92:"0a4488967069cbc063df",93:"73c5e520e6ea78c1b552",94:"3ec360c68f9539ee782a",95:"4f361ee6a0433f120a11",96:"6dad0d2c33f07af0677f",97:"4d9a083aaaac49e1af88",98:"8891148c40da6857ff05",99:"066407c84e9fa8df787b",100:"7c95ce8a806779b5f855",101:"5bc6bb6878b4249c7de3",104:"e4e8bb4b6774884ad5bb",105:"6830b85fdf539c9d6b41",106:"a1e14b311b54c39417e6",107:"c10d840b1e7b735c03b4",108:"ad7bd7f609de5b8e5cf1",109:"25f47160ba1137492dea",110:"6dec9114e6c2bb32b5da",111:"9aed14c24f502555a086",112:"ff84b723650dbdc90111",113:"ad2039a321c48207ee9d",114:"0bfceb8be9dd82340541",115:"3046779a0cd9f9e19b5d",116:"9b42dd16045574b2644f",117:"0feafbad9caf3214a70a",118:"021b101e6f06377e7719",119:"8f1bec0becb826f3075c",120:"652599e9aff8bff13d0f",121:"b76b4d0165cde4503614",122:"b7769948f49d9e167baa",123:"8459b2d5528dddd27059",124:"6b01800e071f6ea36610",125:"bf0bff80a59971ef7f05",126:"3ea0fc2bd394a06c896b",127:"a8840ff9244188f354b1",128:"d78663428017b93e20fa",129:"872ed19928847029de1d",130:"fb5d277b35e06b371516"}[e]+".js"}(e);var b=new Error;o=function(a){n.onerror=n.onload=null,clearTimeout(s);var r=c[e];if(0!==r){if(r){var d=a&&("load"===a.type?"missing":a.type),o=a&&a.target&&a.target.src;b.message="Loading chunk "+e+" failed.\n("+d+": "+o+")",b.name="ChunkLoadError",b.type=d,b.request=o,r[1](b)}c[e]=void 0}};var s=setTimeout((function(){o({type:"timeout",target:n})}),12e4);n.onerror=n.onload=o,document.head.appendChild(n)}return Promise.all(a)},t.m=e,t.c=d,t.d=function(e,a,r){t.o(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,a){if(1&a&&(e=t(e)),8&a)return e;if(4&a&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&a&&"string"!=typeof e)for(var d in e)t.d(r,d,function(a){return e[a]}.bind(null,d));return r},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/vi-assets/static-assets/",t.oe=function(e){throw console.error(e),e};var n=window.webpackJsonp=window.webpackJsonp||[],b=n.push.bind(n);n.push=a,n=n.slice();for(var s=0;s<n.length;s++)a(n[s]);var f=b;r()}([]); +//# sourceMappingURL=runtime~main-2385ee00b225f2f6ca42.js.map</script> + <script defer src="/vi-assets/static-assets/vendor-6590b33d4cb850db967c.js"></script> + <script defer src="/vi-assets/static-assets/story-4d9a083aaaac49e1af88.js"></script> + <script defer src="/vi-assets/static-assets/main-67bf2ee159c1b7c6dbcf.js"></script> + <script>(function () { var _f=function(){try{var e=["first-paint","first-contentful-paint","userBtnRender","appRenderTime"];new window.PerformanceObserver(function(r){for(var n=r.getEntries(),a=0;a<n.length;a+=1){var t=n[a];if(e.indexOf(t.name)>-1){var i={};i[t.name]=Math.round(t.duration||t.startTime),(window.dataLayer=window.dataLayer||[]).push({event:"performance",pageview:{performance:i}})}}}).observe({entryTypes:["mark","measure","paint"]})}catch(e){}};;_f.apply(null, []); })();(function () { var _f=function(){!function(){if(1===Math.floor(20*Math.random())&&(!window.BOOMR||!window.BOOMR.version&&!window.BOOMR.snippetExecuted)){window.BOOMR=window.BOOMR||{},window.BOOMR.snippetStart=(new Date).getTime(),window.BOOMR.snippetExecuted=!0,window.BOOMR.snippetVersion=14,window.BOOMR.url="https://s.go-mpulse.net/boomerang/ATH8A-MAMN8-XPXCH-N5KAX-8D239";var e=(document.currentScript||document.getElementsByTagName("script")[0]).parentNode,n=!1,t=document.createElement("link");t.relList&&"function"==typeof t.relList.supports&&t.relList.supports("preload")&&"as"in t?(window.BOOMR.snippetMethod="p",t.href=window.BOOMR.url,t.rel="preload",t.as="script",t.addEventListener("load",function(){if(!n){var t=document.createElement("script");t.id="boomr-scr-as",t.src=window.BOOMR.url,t.async=!0,e.appendChild(t),n=!0}}),t.addEventListener("error",function(){o(!0)}),setTimeout(function(){n||o(!0)},3e3),BOOMR_lstart=(new Date).getTime(),e.appendChild(t)):o(!1),window.addEventListener?window.addEventListener("load",i,!1):window.attachEvent&&window.attachEvent("onload",i)}function o(t){n=!0;var o,i,d,a,r=document,s=window;if(window.BOOMR.snippetMethod=t?"if":"i",i=function(e,n){var t=r.createElement("script");t.id=n||"boomr-if-as",t.src=window.BOOMR.url,BOOMR_lstart=(new Date).getTime(),(e=e||r.body).appendChild(t)},!window.addEventListener&&window.attachEvent&&navigator.userAgent.match(/MSIE [67]./))return window.BOOMR.snippetMethod="s",void i(e,"boomr-async");(d=document.createElement("IFRAME")).src="about:blank",d.title="",d.role="presentation",d.loading="eager",(a=(d.frameElement||d).style).width=0,a.height=0,a.border=0,a.display="none",e.appendChild(d);try{s=d.contentWindow,r=s.document.open()}catch(e){o=document.domain,d.src="javascript:var d=document.open();d.domain='"+o+"';void 0;",s=d.contentWindow,r=s.document.open()}o?(r._boomrl=function(){this.domain=o,i()},r.write("<body onload='document._boomrl();'>")):(s._boomrl=function(){i()},s.addEventListener?s.addEventListener("load",s._boomrl,!1):s.attachEvent&&s.attachEvent("onload",s._boomrl)),r.close()}function i(e){window.BOOMR_onload=e&&e.timeStamp||(new Date).getTime()}}()};;_f.apply(null, []); })();</script> + + <script> + (function(){ + if (document.cookie.indexOf('NYT-S') === -1) { + var iframe = document.createElement('iframe'); + iframe.height = 0; + iframe.width = 0; + iframe.style.display = 'none'; + iframe.style.visibility = 'hidden'; + iframe.src = 'https://myaccount.nytimes.com/auth/prefetch-assets'; + document.body.appendChild(iframe); + } + })(); + </script> + + <script> +(function(w, l) { + w[l] = w[l] || []; + w[l].push({ + 'gtm.start': new Date().getTime(), + event: 'gtm.js' + }); +})(window, 'dataLayer'); +</script> +<script defer src="https://www.googletagmanager.com/gtm.js?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x"></script> +<noscript> +<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x" height="0" width="0" style="display:none;visibility:hidden"></iframe> +</noscript> + + + <!-- RELEASE b7473876f987234cda2bd0ff7906c796093cecdc --> + </body> +</html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pom.xml Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <artifactId>PassMan</artifactId> + <groupId>name.blackcap</groupId> + <version>1.0-SNAPSHOT</version> + <packaging>jar</packaging> + + <name>consoleApp</name> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <kotlin.code.style>official</kotlin.code.style> + <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget> + </properties> + + <repositories> + <repository> + <id>mavenCentral</id> + <url>https://repo1.maven.org/maven2/</url> + </repository> + <repository> + <id>mvnRepository</id> + <url>https://mvnrepository.com/artifact/</url> + </repository> + </repositories> + + <build> + <sourceDirectory>src/main/kotlin</sourceDirectory> + <testSourceDirectory>src/test/kotlin</testSourceDirectory> + <resources> + <resource> + <directory>src/main/resources</directory> + </resource> + </resources> + <plugins> + <plugin> + <groupId>org.jetbrains.kotlin</groupId> + <artifactId>kotlin-maven-plugin</artifactId> + <version>1.7.10</version> + <executions> + <execution> + <id>compile</id> + <phase>compile</phase> + <goals> + <goal>compile</goal> + </goals> + </execution> + <execution> + <id>test-compile</id> + <phase>test-compile</phase> + <goals> + <goal>test-compile</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.22.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <version>2.22.2</version> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>11</source> + <target>11</target> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + <configuration> + <archive> + <manifest> + <mainClass> + name.blackcap.passman.MainKt + </mainClass> + </manifest> + </archive> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.jetbrains.kotlin</groupId> + <artifactId>kotlin-test-junit5</artifactId> + <version>1.7.10</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>5.8.2</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.jetbrains.kotlin</groupId> + <artifactId>kotlin-stdlib-jdk8</artifactId> + <version>1.7.10</version> + </dependency> + <dependency> + <groupId>org.jetbrains.kotlin</groupId> + <artifactId>kotlin-reflect</artifactId> + <version>1.7.10</version> + </dependency> + <dependency> + <groupId>org.xerial</groupId> + <artifactId>sqlite-jdbc</artifactId> + <version>3.36.0.3</version> + </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.5.0</version> + </dependency> + </dependencies> + +</project> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Clipboard.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,41 @@ +package name.blackcap.passman + +import java.awt.Toolkit +import java.awt.datatransfer.Clipboard +import java.awt.datatransfer.DataFlavor +import java.awt.datatransfer.Transferable +import java.awt.datatransfer.UnsupportedFlavorException + +private val CLIPBOARD = Toolkit.getDefaultToolkit().systemClipboard + +private class ClipboardData(val item: String): Transferable { + private val FLAVORS = arrayOf<DataFlavor>(DataFlavor.stringFlavor) + + override fun getTransferDataFlavors(): Array<DataFlavor> = FLAVORS + + override fun isDataFlavorSupported(flavor: DataFlavor?): Boolean = + FLAVORS.contains(flavor) + + override fun getTransferData(flavor: DataFlavor?): Any { + if (!isDataFlavorSupported(flavor)) { + throw UnsupportedFlavorException(flavor) + } + return item + } + +} + +private class ClipboardOwner(): java.awt.datatransfer.ClipboardOwner { + override fun lostOwnership(clipboard: Clipboard?, contents: Transferable?) { + /* we don't care */ + } +} + +/* xxx: this often makes a string out of a password */ +fun writeToClipboard(charArray: CharArray) { + CLIPBOARD.setContents(ClipboardData(String(charArray)), ClipboardOwner()) +} + +fun writeToClipboard(string: String) { + CLIPBOARD.setContents(ClipboardData(string), ClipboardOwner()) +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Console.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,50 @@ +package name.blackcap.passman + +fun readLine(prompt: String): String = + doConsoleIo({ System.console()?.readLine(prompt) }, "unable to read line") + +fun getPassword(prompt: String, verify: Boolean = false): CharArray { + while (true) { + val pw1 = _getPassword(prompt) + if (!verify) { + return pw1 + } + val pw2 = _getPassword("Verification: ") + if (pw1 contentEquals pw2) { + return pw1 + } + error("mismatch, try again") + } +} + +fun mustReadLine(prompt: String): String = must({ readLine(prompt) }, { it.isNotEmpty() }) + +fun mustGetPassword(prompt: String, verify: Boolean = false): CharArray = + must({ getPassword(prompt, verify) }, { it.isNotEmpty() }) + +fun printPassword(password: CharArray) { + print("Password: ") + password.forEach { print(it) } + println() +} + +private fun _getPassword(prompt: String): CharArray = + doConsoleIo({ System.console()?.readPassword(prompt) }, "unable to read password") + +private fun <T> must(getter: () -> T, checker: (T) -> Boolean): T { + while (true) { + var got = getter() + if (checker(got)) { + return got + } + error("entry must not be empty, try again") + } +} + +private fun <T> doConsoleIo(getter: () -> T?, message: String): T { + val ret = getter() + if (ret == null) { + die(message) + } + return ret!! +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/CreateSubcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,98 @@ +package name.blackcap.passman + +import org.apache.commons.cli.CommandLine +import org.apache.commons.cli.DefaultParser +import org.apache.commons.cli.Options +import org.apache.commons.cli.ParseException +import kotlin.system.exitProcess + +class CreateSubcommand(): Subcommand() { + private lateinit var commandLine: CommandLine + + override fun run(args: Array<String>) { + val options = Options().apply { + addOption("g", "generate", false, "Use password generator.") + addOption("l", "length", true, "Length of generated password.") + addOption("s", "symbols", false, "Use symbol characters in generated password.") + addOption("v", "verbose", false, "Print the generated password.") + } + try { + commandLine = DefaultParser().parse(options, args) + } catch (e: ParseException) { + die(e.message ?: "syntax error", 2) + } + checkArguments() + val db = Database.open() + + val entry = if (commandLine.hasOption("generate")) { + val rawLength = commandLine.getOptionValue("length") + val length = try { + rawLength?.toInt() ?: DEFAULT_GENERATED_LENGTH + } catch (e: NumberFormatException) { + die("$rawLength - invalid length") + -1 /* will never happen */ + } + val symbols = commandLine.hasOption("symbols") + val verbose = commandLine.hasOption("verbose") + Entry.withGeneratedPassword(length, symbols, verbose) + } else { + Entry.withPromptedPassword() + } + val id = db.makeKey(entry.name) + + db.connection.prepareStatement("select count(*) from passwords where id = ?").use { + it.setLong(1, id) + val result = it.executeQuery() + result.next() + val count = result.getInt(1) + if (count > 0) { + die("record matching ${entry.name} already exists") + } + } + + try { + if (entry.notes.isBlank()) { + db.connection.prepareStatement("insert into passwords (id, name, username, password, created) values (?, ?, ?, ?, ?)") + .use { + it.setLong(1, id) + it.setEncryptedString(2, entry.name, db.encryption) + it.setEncryptedString(3, entry.username, db.encryption) + it.setEncrypted(4, entry.password, db.encryption) + it.setLong(5, System.currentTimeMillis()) + it.execute() + } + } else { + db.connection.prepareStatement("insert into passwords (id, name, username, password, notes, created) values (?, ?, ?, ?, ?, ?)") + .use { + it.setLong(1, db.makeKey(entry.name)) + it.setEncryptedString(2, entry.name, db.encryption) + it.setEncryptedString(3, entry.username, db.encryption) + it.setEncrypted(4, entry.password, db.encryption) + it.setEncryptedString(5, entry.notes, db.encryption) + it.setLong(6, System.currentTimeMillis()) + it.execute() + } + } + } finally { + entry.password.clear() + } + } + + private fun checkArguments(): Unit { + var bad = false + if (!commandLine.hasOption("generate")) { + for (option in listOf<String>("length", "symbols", "verbose")) { + if (commandLine.hasOption(option)) { + error("--$option requires --generate") + bad = true + } + } + } + if (commandLine.args.isNotEmpty()) { + error("unexpected trailing arguments") + } + if (bad) { + exitProcess(2); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Database.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,134 @@ +package name.blackcap.passman + +import java.nio.file.Files +import java.nio.file.Path +import java.security.GeneralSecurityException +import java.security.SecureRandom +import java.sql.* + +class Database private constructor(val connection: Connection, val encryption: Encryption){ + + companion object { + private const val PLAINTEXT = "This is a test." + private const val SALT_LENGTH = 16 + private const val DEFAULT_PROMPT = "Decryption key: " + + fun open(passwordPrompt: String = DEFAULT_PROMPT, fileName: String = DB_FILE, + create: Boolean = true): Database { + val exists = Files.exists(Path.of(fileName)) + if (!exists) { + if (create) { + error("initializing database $fileName") + } else { + die("$fileName not found") + } + } + val masterPassword = getPassword(passwordPrompt, !exists) + val conn = DriverManager.getConnection("jdbc:sqlite:$fileName") + val enc = if (exists) { reuse(conn, masterPassword) } else { init(conn, masterPassword) } + val ret = Database(conn, enc) + verifyPassword(ret) + return ret + } + + private fun reuse(connection: Connection, masterPassword: CharArray): Encryption { + try { + connection.prepareStatement("select value from blobs where name = ?").use { + it.setString(1, "salt") + val result = it.executeQuery() + if (!result.next()) { + die("corrupt database, missing salt parameter") + } + val salt = result.getBytes(1) + return Encryption(masterPassword, salt) + } + } catch (e: SQLException) { + e.printStackTrace() + die("unable to reopen database") + throw RuntimeException("this will never happen") + } + } + + private fun init(connection: Connection, masterPassword: CharArray): Encryption { + try { + connection.createStatement().use { stmt -> + stmt.executeUpdate("create table integers ( name string not null, value integer )") + stmt.executeUpdate("create table reals ( name string not null, value integer )") + stmt.executeUpdate("create table strings ( name string not null, value real )") + stmt.executeUpdate("create table blobs ( name string not null, value blob )") + stmt.executeUpdate( + "create table passwords (" + + "id integer not null primary key, " + + "name blob not null, " + + "username blob not null, " + + "password blob not null, " + + "notes blob, " + + "created integer, " + + "modified integer, " + + "accessed integer )" + ) + } + val salt = ByteArray(SALT_LENGTH).also { SecureRandom().nextBytes(it) } + val encryption = Encryption(masterPassword, salt) + connection.prepareStatement("insert into blobs (name, value) values (?, ?)").use { + it.setString(1, "salt") + it.setBytes(2, salt) + it.execute() + } + connection.prepareStatement("insert into blobs (name, value) values (?, ?)").use { stmt -> + stmt.setString(1, "test") + stmt.setEncryptedString(2, PLAINTEXT, encryption) + stmt.execute() + } + return encryption + } catch (e: SQLException) { + e.printStackTrace() + die("unable to initialize database") + throw RuntimeException("this will never happen") + } + } + + private fun verifyPassword(database: Database) { + try { + database.connection.prepareStatement("select value from blobs where name = ?").use { stmt -> + stmt.setString(1, "test") + val result = stmt.executeQuery() + if (!result.next()) { + die("corrupt database, missing test parameter") + } + val readFromDb = result.getDecryptedString(1, database.encryption) + if (readFromDb != PLAINTEXT) { + /* might also get thrown by getDecryptedString if bad */ + println(" got: " + dump(readFromDb)) + println("expected: " + dump(PLAINTEXT)) + throw GeneralSecurityException("bad key!") + } + } + } catch (e: SQLException) { + e.printStackTrace() + die("unable to verify decryption key") + } catch (e: GeneralSecurityException) { + die("invalid decryption key") + } + } + } + + fun makeKey(name: String): Long = Hashing.hash(encryption.encryptFromString0(name.lowercase())) +} + +public fun ResultSet.getDecryptedString(columnIndex: Int, encryption: Encryption) = + encryption.decryptToString(getBytes(columnIndex)) + +public fun ResultSet.getDecrypted(columnIndex: Int, encryption: Encryption) = + encryption.decrypt(getBytes(columnIndex)) + +public fun ResultSet.getDate(columnIndex: Int): java.util.Date? { + val rawDate = getLong(columnIndex) + return if (wasNull()) { null } else { java.util.Date(rawDate) } +} + +public fun PreparedStatement.setEncryptedString(columnIndex: Int, value: String, encryption: Encryption) = + setBytes(columnIndex, encryption.encryptFromString(value)) + +public fun PreparedStatement.setEncrypted(columnIndex: Int, value: CharArray, encryption: Encryption) = + setBytes(columnIndex, encryption.encrypt(value))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/DeleteSubcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,7 @@ +package name.blackcap.passman + +class DeleteSubcommand(): Subcommand() { + override fun run(args: Array<String>) { + println("Not yet implemented") + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Encryption.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,96 @@ +package name.blackcap.passman + +import java.nio.ByteBuffer +import java.nio.CharBuffer +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets +import java.security.SecureRandom +import javax.crypto.Cipher +import javax.crypto.SecretKey +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.PBEKeySpec +import javax.crypto.spec.SecretKeySpec +import javax.security.auth.Destroyable + +class Encryption(passwordIn: CharArray, saltIn: ByteArray) : Destroyable { + private companion object { + const val ITERATIONS = 390000 + const val IV_LENGTH = 16 + const val KEY_LENGTH = 256 + const val ENCRYPTION_ALGORITHM = "AES/CBC/PKCS5Padding" + const val KEY_ALGORITHM = "AES" + const val SECRET_KEY_FACTORY = "PBKDF2WithHmacSHA256" + val CHARSET : Charset = StandardCharsets.UTF_8 + val ZERO_IV = ByteArray(IV_LENGTH).apply { clear() } + } + + private val secretKey = getSecretKey(passwordIn, saltIn) + private val secureRandom = SecureRandom() + + fun encrypt(plaintext: CharArray): ByteArray { + val iv = ByteArray(IV_LENGTH).also { secureRandom.nextBytes(it) } + return encrypt(plaintext, iv) + } + + private fun encrypt(plaintext: CharArray, iv: ByteArray): ByteArray { + val cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM) + cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivFactory(iv)) + val inBuffer = CHARSET.encode(CharBuffer.wrap(plaintext)) + val outBuffer = ByteBuffer.allocate(cipher.getOutputSize(inBuffer.limit()) + IV_LENGTH) + outBuffer.put(iv) + cipher.doFinal(inBuffer, outBuffer) + return outBuffer.array() + } + + fun encryptFromString(plaintext: String): ByteArray = encrypt(plaintext.toCharArray()) + + fun encryptFromString0(plaintext: String): ByteArray = + encrypt(plaintext.toCharArray(), ZERO_IV) + + fun decrypt(ciphertext: ByteArray): CharArray { + val cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM) + cipher.init(Cipher.DECRYPT_MODE, secretKey, ivFactory(ciphertext)) + val bytes = cipher.doFinal(ciphertext, IV_LENGTH, ciphertext.size - IV_LENGTH) + val charBuffer = CHARSET.decode(ByteBuffer.wrap(bytes)) + bytes.clear() + val ret = CharArray(charBuffer.limit()) + charBuffer.run { + rewind() + get(ret) + zero() + } + return ret + } + + fun decryptToString(ciphertext: ByteArray): String = String(decrypt(ciphertext)) + + override fun destroy() { + secretKey.destroy() + } + + override fun isDestroyed(): Boolean { + return secretKey.isDestroyed + } + + protected fun finalize() { + destroy() + } + + private fun getSecretKey(password: CharArray, salt: ByteArray): SecretKey { + val factory = SecretKeyFactory.getInstance(SECRET_KEY_FACTORY) + val spec = PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH) + return SecretKeySpec(factory.generateSecret(spec).encoded, KEY_ALGORITHM) + } + + private fun ivFactory(ciphertext: ByteArray) = IvParameterSpec(ciphertext, 0, IV_LENGTH) +} + +fun ByteArray.clear() = indices.forEach { this[it] = 0 } + +fun CharArray.clear() = indices.forEach { this[it] = '\u0000' } + +fun CharBuffer.zero() { + clear() + array().clear() +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Entry.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,68 @@ +package name.blackcap.passman + +import java.lang.StringBuilder +import java.sql.Connection +import java.sql.PreparedStatement +import java.util.Date + +class Entry(val name: String, val username: String, val password: CharArray, val notes: String, + val created: Date? = null, val modified: Date? = null, val accessed: Date? = null) { + + companion object { + fun withPromptedPassword() = Entry( + name = _getName(), + username = _getUsername(), + password = _getPassword(), + notes = _getNotes() + ) + + fun withGeneratedPassword(length: Int, allowSymbols: Boolean, verbose: Boolean): Entry { + val generated = generate(length, allowSymbols) + if (verbose) { + println("Generated password: $generated") + } + return Entry( + name = _getName(), + username = _getUsername(), + password = generated, + notes = _getNotes() + ) + } + + private fun _getName() = mustReadLine("Name of site: ") + + private fun _getUsername() = mustReadLine("Username: ") + + private fun _getPassword() = mustGetPassword("Password: ", verify = true) + + private fun _getNotes() = readLine("Notes: ") + } + + fun print(redactPassword: String? = null) { + println("Name of site: $name") + println("Username: $username") + if (redactPassword == null) { + printPassword(password) + } else { + println("Password: $redactPassword") + } + } + + fun printLong(redactPassword: String? = null) { + print(redactPassword) + println("Notes: $notes") + printDate("Created", created) + printDate("Modified", modified) + printDate("Accessed", accessed) + } + + private fun printDate(tag: String, date: Date?) { + kotlin.io.print("${tag}: ") + if (date == null) { + println("never") + } else { + println(ISO8601.format(date)) + } + } + +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Files.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,77 @@ +package name.blackcap.passman + +import java.io.BufferedReader +import java.io.File +import java.io.FileInputStream +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets +import java.util.* +import kotlin.system.exitProcess + +/* OS Type */ + +enum class OS { + MAC, UNIX, WINDOWS, OTHER; + companion object { + private val rawType = System.getProperty("os.name")?.lowercase() + val type = if (rawType == null) { + OTHER + } else if (rawType.contains("win")) { + WINDOWS + } else if (rawType.contains("mac")) { + MAC + } else if (rawType.contains("nix") || rawType.contains("nux") || rawType.contains("aix") || rawType.contains("sunos")) { + UNIX + } else { + OTHER + } + } +} + +/* joins path name components to java.io.File */ + +fun joinPath(base: String, vararg rest: String) = rest.fold(File(base), ::File) + +/* file names */ + +private const val SHORTNAME = "passman" +const val MAIN_PACKAGE = "name.blackcap." + SHORTNAME +private val HOME = System.getenv("HOME") +private val PF_DIR = when (OS.type) { + OS.MAC -> joinPath(HOME, "Library", "Application Support", MAIN_PACKAGE) + OS.WINDOWS -> joinPath(System.getenv("APPDATA"), MAIN_PACKAGE) + else -> joinPath(HOME, "." + SHORTNAME) +} + +val PROP_FILE = File(PF_DIR, SHORTNAME + ".properties") +val DB_FILE: String = File(PF_DIR, SHORTNAME + ".db").absolutePath + +/* make some needed directories */ + +private fun File.makeIfNeeded() = if (exists()) { true } else { mkdirs() } + +/* make some usable objects */ + +val DPROPERTIES = Properties().apply { + OS::class.java.getResourceAsStream("/default.properties").use { load(it) } +} + +val PROPERTIES = Properties(DPROPERTIES).apply { + PF_DIR.makeIfNeeded() + PROP_FILE.createNewFile() + BufferedReader(InputStreamReader(FileInputStream(PROP_FILE), StandardCharsets.UTF_8)).use { + load(it) + } +} + +/* error messages */ + +fun error(message: String) { + System.err.println("${SHORTNAME}: ${message}") +} + +fun die(message: String, exitStatus: Int = 1) { + error(message) + exitProcess(exitStatus) +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Generate.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,61 @@ +package name.blackcap.passman + +import java.lang.IllegalArgumentException +import java.security.SecureRandom +import java.util.Random + +/* ASCII, alphanumeric, no 0's, 1's, I's, O's or l's to avoid confusion. */ +private const val DIGITS = "23456789" +private const val UPPERS = "ABCDEFGHJKLMNPQRSTUVWXYZ" +private const val LOWERS = "abcdefghijkmnopqrstuvwxyz" +/* \ can confuse *NIX, |, ', and ` invite confusion */ +private const val SYMBOLS = "!\"#$%&()*+,-./:;<=>?@[]^_{}~" +const val MIN_GENERATED_LENGTH = 6 +const val DEFAULT_GENERATED_LENGTH = 12 + +fun generate(length: Int, allowSymbols: Boolean): CharArray { + /* insecure, and if REALLY short, causes bugs */ + if (length < MIN_GENERATED_LENGTH) { + throw IllegalArgumentException("length of $length is less than $MIN_GENERATED_LENGTH") + } + + /* determine allowed characters */ + val passchars = if (allowSymbols) { + DIGITS + UPPERS + LOWERS + SYMBOLS + } else { + DIGITS + UPPERS + LOWERS + } + + /* ensure we get one of each class of characters */ + val randomizer = SecureRandom() + val generated = CharArray(length) + generated[0] = randomized(DIGITS, randomizer) + generated[1] = randomized(UPPERS, randomizer) + generated[2] = randomized(LOWERS, randomizer) + var i = 3 + if (allowSymbols) { + generated[3] = randomized(SYMBOLS, randomizer) + i = 4 + } + + /* generate the rest of the characters */ + while (i < length) { + generated[i++] = randomized(passchars, randomizer) + } + + /* scramble them */ + for (i in 0 until length) { + val j = randomizer.nextInt(length) + if (i != j) { + val temp = generated[i] + generated[i] = generated[j] + generated[j] = temp + } + } + + /* AMF... */ + return generated +} + +private fun randomized(passchars: String, randomizer: Random): Char = + passchars[randomizer.nextInt(passchars.length)]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Hashing.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,34 @@ +package name.blackcap.passman + +import java.nio.ByteBuffer +import java.nio.ByteOrder +import java.nio.CharBuffer +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets +import java.security.MessageDigest + +object Hashing { + private const val HASHING_ALGORITHM = "MD5" + private val CHARSET: Charset = StandardCharsets.UTF_8 + + fun hash(bytes: ByteBuffer): Long { + val md = MessageDigest.getInstance(HASHING_ALGORITHM) + bytes.rewind() + md.update(bytes) + return toLong(md.digest()) + } + + fun hash(bytes: ByteArray): Long = + hash(ByteBuffer.wrap(bytes)) + + fun hash(chars: CharArray): Long = + hash(CHARSET.encode(CharBuffer.wrap(chars))) + + fun hash(string: String): Long = + hash(CHARSET.encode(string)) + + private fun toLong(hash: ByteArray): Long = ByteBuffer.wrap(hash).run { + order(ByteOrder.LITTLE_ENDIAN) + getLong(hash.size - 8) + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/HelpSubcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,15 @@ +package name.blackcap.passman + +class HelpSubcommand(): Subcommand() { + override fun run(args: Array<String>) { + println("PassMan: a password manager") + println("Available subcommands:") + println("create Create a new username/password pair.") + println("read Retrieve data from existing record.") + println("update Update existing record.") + println("delete Delete existing record.") + println("help Print this message.") + println("list List records.") + println("merge Merge passwords in from another PassMan database.") + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Main.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,45 @@ +package name.blackcap.passman + +import java.io.BufferedReader +import java.io.InputStreamReader +import java.util.* +import java.util.stream.Collectors +import kotlin.reflect.jvm.javaMethod +import kotlin.reflect.jvm.kotlinFunction +import kotlin.system.exitProcess + +fun main(args: Array<String>) { + if (args.isEmpty()) { + error("expecting subcommand") + exitProcess(2) + } + val subcommand = args[0]; + val scArgs = args.sliceArray(1 until args.size) + runSubcommand(subcommand, scArgs) +} + +fun runSubcommand(name: String, args: Array<String>): Unit { + val instance = getInstanceForClass(getClassForSubcommand(name)) + if (instance == null) { + die("$name - unknown subcommand", 2) + } else { + instance.run(args) + } +} + +fun getClassForSubcommand(name: String): Class<Subcommand>? = try { + val shortName = name.replace('-', '_') + .lowercase() + .replaceFirstChar { it.titlecase(Locale.getDefault()) } + Class.forName("$MAIN_PACKAGE.${shortName}Subcommand") as? Class<Subcommand> + /* val ret = Class.forName("$MAIN_PACKAGE.$shortName") + if (ret.isInstance(Subcommand::class.java)) { ret as Class<Subcommand> } else { null } */ +} catch (e: ClassNotFoundException) { + null +} + +fun getInstanceForClass(klass: Class<Subcommand>?) = try { + klass?.getDeclaredConstructor()?.newInstance() +} catch (e: ReflectiveOperationException) { + null +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/ReadSubcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,66 @@ +package name.blackcap.passman + +import org.apache.commons.cli.CommandLine +import org.apache.commons.cli.DefaultParser +import org.apache.commons.cli.Options +import org.apache.commons.cli.ParseException + +class ReadSubcommand(): Subcommand() { + private lateinit var commandLine: CommandLine + + override fun run(args: Array<String>) { + val options = Options().apply { + addOption("c", "clipboard", false, "Copy username and password into clipboard.") + addOption("l", "long", false, "Long format listing.") + } + try { + commandLine = DefaultParser().parse(options, args) + } catch (e: ParseException) { + die(e.message ?: "syntax error", 2) + } + val clipboard = commandLine.hasOption("clipboard") + val long = commandLine.hasOption("long") + if (commandLine.args.size != 1) { + die("expecting site name", 2) + } + val nameIn = commandLine.args[0]; + val db = Database.open() + val id = db.makeKey(nameIn) + + db.connection.prepareStatement("select name, username, password, notes, created, modified, accessed from passwords where id = ?").use { + it.setLong(1, id) + val result = it.executeQuery() + if (!result.next()) { + die("no record matches $nameIn") + } + val entry = Entry( + name = result.getDecryptedString(1, db.encryption), + username = result.getDecryptedString(2, db.encryption), + password = result.getDecrypted(3, db.encryption), + notes = result.getDecryptedString(4, db.encryption), + created = result.getDate(5), + modified = result.getDate(6), + accessed = result.getDate(7) + ) + try { + val redaction = if (clipboard) { "(in clipboard)" } else { null } + if (long) { + entry.printLong(redaction) + } else { + entry.print(redaction) + } + if (clipboard) { + writeToClipboard(entry.password) + } + } finally { + entry.password.clear() + } + } + + db.connection.prepareStatement("update passwords set accessed = ? where id = ?").use { + it.setLong(1, System.currentTimeMillis()) + it.setLong(2, id) + it.execute() + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/See.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,56 @@ +package name.blackcap.passman + +import java.util.Formatter + +private val UNPRINTABLE = setOf<Character.UnicodeBlock>( + Character.UnicodeBlock.COMBINING_DIACRITICAL_MARKS, + Character.UnicodeBlock.COMBINING_DIACRITICAL_MARKS_EXTENDED, + Character.UnicodeBlock.COMBINING_HALF_MARKS, + Character.UnicodeBlock.COMBINING_DIACRITICAL_MARKS_SUPPLEMENT, + Character.UnicodeBlock.COMBINING_MARKS_FOR_SYMBOLS, + Character.UnicodeBlock.HIGH_PRIVATE_USE_SURROGATES, + Character.UnicodeBlock.HIGH_SURROGATES, + Character.UnicodeBlock.LOW_SURROGATES, + Character.UnicodeBlock.PRIVATE_USE_AREA, + Character.UnicodeBlock.SPECIALS, + +) + +private val DELIM = '"' + +private val EXEMPT = setOf<Char>(' ') +private val PREFIXED = setOf<Char>(DELIM, '\\') + +fun see(input: String): String { + val accum = StringBuilder() + val formatter = Formatter(accum) + accum.append(DELIM) + for (ch in input) { + val block = Character.UnicodeBlock.of(ch) + if (ch in EXEMPT) { + accum.append(ch) + } else if (block == null || block in UNPRINTABLE || Character.isSpaceChar(ch) || Character.isWhitespace(ch)) { + formatter.format("\\u%04x", ch.code) + } else if (ch in PREFIXED) { + accum.append('\\') + accum.append(ch) + } else { + accum.append(ch) + } + } + accum.append(DELIM) + return accum.toString() +} + +fun dump(input: String): String { + val accum = StringBuilder() + var needSpace = false + for (ch in input) { + if (needSpace) { + accum.append(' ') + } + accum.append(ch.code) + needSpace = true + } + return accum.toString() +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Subcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,5 @@ +package name.blackcap.passman + +abstract class Subcommand() { + abstract fun run(args: Array<String>): Unit +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/Time.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,5 @@ +package name.blackcap.passman + +import java.text.SimpleDateFormat + +val ISO8601 = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/kotlin/name/blackcap/passman/UpdateSubcommand.kt Sun Sep 11 16:11:37 2022 -0700 @@ -0,0 +1,150 @@ +package name.blackcap.passman + +import org.apache.commons.cli.CommandLine +import org.apache.commons.cli.DefaultParser +import org.apache.commons.cli.Options +import org.apache.commons.cli.ParseException +import java.sql.Types +import java.util.* +import kotlin.properties.Delegates +import kotlin.system.exitProcess + +class UpdateSubcommand(): Subcommand() { + private lateinit var commandLine: CommandLine + private lateinit var db: Database + private lateinit var nameIn: String + private var id by Delegates.notNull<Long>() + private var length by Delegates.notNull<Int>() + private var generate by Delegates.notNull<Boolean>() + private var allowSymbols by Delegates.notNull<Boolean>() + private var verbose by Delegates.notNull<Boolean>() + private val fields = StringBuilder() + private val fieldValues = mutableListOf<Any?>() + + private companion object { + const val NULL_SPECIFIED = "." + val NULLABLE_FIELDS = setOf<String>("notes") + val SENSITIVE_FIELDS = setOf<String>("password") + } + + override fun run(args: Array<String>) { + parseArguments(args) + checkDatabase() + update() + } + + private fun parseArguments(args: Array<String>) { + val options = Options().apply { + addOption("g", "generate", false, "Use password generator.") + addOption("l", "length", true, "Length of generated password.") + addOption("s", "symbols", false, "Use symbol characters in generated password.") + addOption("v", "verbose", false, "Print the generated password.") + } + try { + commandLine = DefaultParser().parse(options, args) + } catch (e: ParseException) { + die(e.message ?: "syntax error", 2) + } + checkArguments() + db = Database.open() + nameIn = commandLine.args[0] + id = db.makeKey(nameIn) + length = commandLine.getOptionValue("length").let { rawLength -> + try { + rawLength?.toInt() ?: DEFAULT_GENERATED_LENGTH + } catch (e: NumberFormatException) { + die("$rawLength - invalid length") + -1 /* will never happen */ + } + } + generate = commandLine.hasOption("generate") + allowSymbols = commandLine.hasOption("symbols") + verbose = commandLine.hasOption("verbose") + } + + private fun checkArguments(): Unit { + var bad = false + if (!commandLine.hasOption("generate")) { + for (option in listOf<String>("length", "symbols", "verbose")) { + if (commandLine.hasOption(option)) { + error("--$option requires --generate") + bad = true + } + } + } + if (commandLine.args.isEmpty()) { + error("expecting site name") + } + if (commandLine.args.size > 1) { + error("unexpected trailing arguments") + } + if (bad) { + exitProcess(2); + } + } + + private fun checkDatabase(): Unit { + db.connection.prepareStatement("select count(*) from passwords where id = ?").use { + it.setLong(1, id) + val result = it.executeQuery() + result.next() + val count = result.getInt(1) + if (count < 1) { + die("no record matches $nameIn") + } + } + } + + private fun update(): Unit { + updateOne("username") + updateOne("password") + updateOne("notes") + if (fieldValues.isEmpty()) { + error("no values changed") + return + } + + db.connection.prepareStatement("update passwords set updated = ?, $fields where id = ?").use { stmt -> + stmt.setLong(1, System.currentTimeMillis()) + fieldValues.indices.forEach { fieldIndex -> + val fieldValue = fieldValues[fieldIndex] + val columnIndex = fieldIndex + 2 + when (fieldValue) { + is String -> stmt.setEncryptedString(columnIndex, fieldValue, db.encryption) + is CharArray -> stmt.setEncrypted(columnIndex, fieldValue, db.encryption) + null -> stmt.setNull(columnIndex, Types.BLOB) + else -> throw RuntimeException("this shouldn't happen") + } + } + stmt.setLong(fieldValues.size + 2, id) + stmt.execute() + } + } + + private fun updateOne(name: String): Unit { + val prompt = name.replaceFirstChar { it.titlecase(Locale.getDefault()) } + ": " + val value: Any? = if (name in SENSITIVE_FIELDS) { + getPassword(prompt, verify = true) + } else { + val rawValue = readLine(prompt) + if (name in NULLABLE_FIELDS && rawValue == NULL_SPECIFIED) { null } else { rawValue } + } + + val noChange = when (value) { + is String -> value.isEmpty() + is CharArray -> value.isEmpty() + else -> false + } + if (noChange) { + return + } + + if (fields.isNotEmpty()) { + fields.append(", ") + } + fields.append(name) + fields.append(" = ?") + fieldValues.add(value) + } + +} \ No newline at end of file