changeset 7:18b7450b6959

add presen
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Mon, 12 May 2014 03:37:44 +0900
parents 8a73ff7d41b2
children a5fc2e56aef7
files Makefile benchmark.tex bib.tex bibliography.tex book.bib cerium.bib cerium.tex cerium_gpu.tex conclusion.tex cuda.tex dummy.tex images/cpu_arch.bb images/cpu_arch.pdf images/cpu_arch.xbb images/createTask.bb images/createTask.pdf images/culculate_index.bb images/culculate_index.pdf images/culculate_index.xbb images/gpu_arch.bb images/gpu_arch.pdf images/gpu_arch.xbb images/scheduler.bb images/scheduler.graffle images/scheduler.pdf introduction.tex ipsjcommon.sty ipsjdrafts.sty ipsjpapers.cls ipsjpapers.sty ipsjsort.bst ipsjunsrt.bst opencl.tex paper/Makefile paper/benchmark.tex paper/bib.tex paper/bibliography.tex paper/book.bib paper/cerium.bib paper/cerium.tex paper/cerium_gpu.tex paper/conclusion.tex paper/cuda.tex paper/dummy.tex paper/images/cpu_arch.bb paper/images/cpu_arch.pdf paper/images/cpu_arch.xbb paper/images/createTask.bb paper/images/createTask.pdf paper/images/culculate_index.bb paper/images/culculate_index.pdf paper/images/culculate_index.xbb paper/images/gpu_arch.bb paper/images/gpu_arch.pdf paper/images/gpu_arch.xbb paper/images/scheduler.bb paper/images/scheduler.graffle paper/images/scheduler.pdf paper/introduction.tex paper/ipsjcommon.sty paper/ipsjdrafts.sty paper/ipsjpapers.cls paper/ipsjpapers.sty paper/ipsjsort.bst paper/ipsjunsrt.bst paper/opencl.tex paper/sigos.aux paper/sigos.bbl paper/sigos.bib paper/sigos.blg paper/sigos.dvi paper/sigos.log paper/sigos.pdf paper/sigos.tex paper/source/Multi.cl paper/source/multiply.cc paper/source/multiply.cu paper/source/multiply_task.cc paper/source/multiply_task_dp.cc presen/s6/images/concurrency.png presen/s6/images/createTask.png presen/s6/images/example-cat.jpg presen/s6/images/example-graph.png presen/s6/images/gpu_arch.png presen/s6/images/gpu_data_parallel.png presen/s6/images/iterate.png presen/s6/images/ndrange_arch.png presen/s6/images/parallel_exec.png presen/s6/images/scheduler.png presen/s6/index.html presen/s6/js/jquery-1.7.min.js presen/s6/js/jquery.microsoft.js presen/s6/js/jquery.slideshow.autoplay.js presen/s6/js/jquery.slideshow.controls.js presen/s6/js/jquery.slideshow.counter.js presen/s6/js/jquery.slideshow.footer.js presen/s6/js/jquery.slideshow.js presen/s6/js/jquery.slideshow.ready.js presen/s6/js/jquery.slideshow.transition.js presen/s6/js/less-1.1.4.min.js presen/s6/themes/blank/blank.css.less presen/s6/themes/blank/o/print.css presen/s6/themes/blank/o/projection.css presen/s6/themes/blank/o/screen.css presen/s6/themes/blank/print.css.less presen/s6/themes/blank/projection.css.less presen/s6/themes/blank/screen.css.less presen/s6/themes/blank5/print.css.less presen/s6/themes/blank5/projection.css.less presen/s6/themes/blank5/screen.css.less presen/s6/themes/g5/print.css.less presen/s6/themes/g5/projection.css.less presen/s6/themes/g5/screen.css.less sigos.aux sigos.bbl sigos.bib sigos.blg sigos.dvi sigos.log sigos.pdf sigos.tex source/Multi.cl source/multiply.cc source/multiply.cu source/multiply_task.cc source/multiply_task_dp.cc
diffstat 126 files changed, 10308 insertions(+), 7378 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-TARGET = sigos
-
-LATEX   = platex
-BIBTEX  = pbibtex
-#DVIPS   = dvips
-#DVIPDFM = dvipdfmx
-RM      = rm -f
-DVIPDF=dvipdfmx -p a4
-#  Option definitions
-#DVIPDFMOPT = 
-#DVIPSOPT   = -D 720 -mode esphi -O 0mm,0mm -N0 
-
-#  Suffixes definitions
-.SUFFIXES: .tex .dvi .pdf
-
-.tex.dvi:
-	$(LATEX) $<
-	$(BIBTEX) $(TARGET)
-	$(LATEX) $<
-	$(LATEX) $<
-
-.dvi.pdf:
-	$(DVIPDF) $(DVIPDF_OPT) $<
-
-
-all: $(TARGET).pdf
-	open $(TARGET).pdf
-
-dvi: $(TARGET).dvi
-
-pdf: $(TARGET).pdf
-
-
-clean:
-	rm -f *.dvi *.aux *.log *.pdf *.ps *.gz *.bbl *.blg *~ *.core
--- a/benchmark.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-\section{Benchmark}
-本章では、WordCount, FFT を例題として用い、本研究で実装した GpuScheduler および CudaScheduler の測定を行う。
-
-測定環境
-\begin{itemize}
-\item OS : MacOS 10.9.2
-\item CPU : 2*2.66GHz 6-Core Intel Xeon
-\item GPU : NVIDIA Quadro K5000 4096MB
-\item Memory : 16GB 1333MHz DDR3
-\item Compiler : Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
-\end{itemize}
-
-\section{WordCount}
-今回は 100MB のテキストファイルに対して WordCount を行なった。
-表:\ref{table:wordcount}は実行結果である。
-
-\begin{table}[!h]
-  \begin{center}
-    \small
-    \begin{tabular}[t]{c||r} \hline
-      & Run Time \\ \hline
-      1 CPU & 0.73s \\ \hline
-      2 CPU & 0.38s \\ \hline
-      4 CPU & 0.21s \\ \hline
-      8 CPU & 0.12s \\ \hline
-      OpenCL(no pipeline) & 48.32s \\ \hline
-      OpenCL(pipeline) & 46.74s \\ \hline
-      OpenCL Data Parallel & 0.38s \\ \hline
-      CUDA(no pipeline) & 55.71s \\ \hline
-      CUDA(pipeline) & 10.26s \\ \hline
-      CUDA Data Parallel & 0.71s \\ \hline
-    \end{tabular}
-    \caption{WordCount}
-    \label{table:wordcount}
-  \end{center}
-\end{table}
-
-パイプライン処理を行うことで CUDA では5.4倍の性能向上が見られた。
-しかし、OpenCL ではパイプライン処理による性能向上が見られなかった。
-OpenCL と CUDA を用いたそれぞれの Scheduler はほぼ同等な実装である。
-OpenCL でパイプライン処理を行うために実行機構を見直す必要がある。
-一方で、データ並列による実行は 1CPU に対して OpenCL では1.9倍、CUDA では1.02倍という結果になった。
-どちらもタスク並列による実行よりは優れた結果になっている。
-CUDA によるデータ並列実行の機構を見直す必要がある。
-
-\subsection{FFT}
-次に、フーリエ変換と周波数フィルタによる画像処理を行う例題を利用し測定を行う。
-使用する画像のサイズは512*512で、画像に対して High Pass Filter をかけて変換を行う。
-表:\ref{table:fft}は実行結果である。
-
-\begin{table}[!h]
-  \begin{center}
-    \small
-    \begin{tabular}[t]{c||r} \hline
-      & Run Time \\ \hline
-      1 CPU & 0.48s \\ \hline
-      2 CPU & 0.26s \\ \hline
-      4 CPU & 0.17s \\ \hline
-      8 CPU & 0.11s \\ \hline
-      OpenCL & 0.09s \\ \hline
-      CUDA & 0.21s \\ \hline
-    \end{tabular}
-    \label{table:fft}
-    \caption{FFT}
-  \end{center}
-\end{table}
-
-1CPU に対して OpenCL ではの5.3倍、CUDA では2.2倍の性能向上が見られた。
-しかし、WordCount の場合と同様に OpenCL と CUDA で差がある。
-WordCount と FFT の結果から CudaScheduler によるデータ並列実行機構を見直す必要がある。
-また、FFT の OpenCL の kernel は cl\_float2 というベクター型を用いている。
-CUDA では cl\_float2 を float に変換して演算している。
-OpenCL ではベクターの演算なので、その部分に最適化がかかっており結果が良くなっている可能性がある。
--- a/bib.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-\bibliographystyle{ipsjunsrt}
-\bibliography{sigos}
--- a/bibliography.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-
-\begin{thebibliography}{10}
-
-\bibitem{akira}
-{Akira KAMIZATO.}: Cell を用いたゲームフレームワークの提案,琉球大学工学部情報工学科平成19年度学位論文(修士) (2008).
-
-\bibitem{FFTonGPU}
-{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}:性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ,東京工業大学 (2008).
-
-\bibitem{toma:2012a}
-{Daichi TOMA and Shinji KONO}:Cerium Task Manager におけるマルチコア上での並列実行機構の実装(2012)
-
-\bibitem{gongo:2008a}
-{Wataru MIYAGUNI,Shinji KONO}:Cell 用の Fine-grain Task Manager の実装
-
-\bibitem{opencl:ref}
-{Aaftab Munshi, Khronos OpenCL Working Group}:The OpenCL Specification Version 1.0 (2007)
-
-\bibitem{cell}
-{Sony Corporation.}: {\em Cell broadband engine architecture} (2005).
-
-\bibitem{spurs}
-{Keisuke INOUE.}: Cell プロセッサ向け実行環境(SPU Centric Execution
-  Model),先進的計算基盤システムシンポジウム SACSIS (2006).
-
-\bibitem{kono}
-{Shinji KONO.}: 検証を自身で表現できるハードウェア、ソフトウェア記述言語
-  Continuation ba sed C と、その Cell
-  への応用,電子情報通信学会VLSI設計技術研究会 (2008).
-
-\bibitem{fuchita}
-{Yoshihiko, FUCHITA.}: 分散プログラミングモデル Federated Linda
-  と分散デバッグ開発,琉球大学工学部情報工学科平成19年度学位論文(修士) (2008).
-
-\end{thebibliography}
--- a/book.bib	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-@BOOK{clay200912, 
-	title={並行コンピューティング技法 - 実践マルチコア/マルチスレッドプログラミング},
-	author={Clay Breshears},
-	publisher={オライリージャパン},
-	year={2009},
-	month={12},
-	isbn={9784873114354},
-	url={http://amazon.co.jp/o/ASIN/4873114357/},
-	price={¥ 3,360},
-	totalpages={284},
-	timestamp={2011.11.17},
-}
-
-@BOOK{fix200609, 
-	title={マルチコアCPUのための並列プログラミング - 並列処理\&マルチスレッド入門},
-	author={安田 絹子 and 飯塚 博道 and 青柳 信吾 and 小林 林広 and 阿部 貴之},
-	publisher={秀和システム},
-	year={2006},
-	month={9},
-	isbn={9784798014623},
-	url={http://amazon.co.jp/o/ASIN/4798014621/},
-	price={¥ 3,360},
-	totalpages={367},
-	timestamp={2011.11.17},
-}
--- a/cerium.bib	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,315 +0,0 @@
-@manual{cell_abi,
-author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
-title ="{Cell Broadband Engine Linux Reference Implementation Application Binary Interface Specification}",
-year = 2007
-}
-
-@manual{cell_cpp,
-author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
-title = "{C/C++ Language Extensions for Cell Broadband Engine Architecture Version 2.6}",
-year = 2008
-}
-
-@misc{osmesa,
-author = "",
-title = "{The Mesa 3D Graphics Library}",
-howpublished = "{http://www.mesa3d.org/}"
-}
-
-@misc{fedora,
-author = "",
-title = "{Fedora Project}",
-howpublished = "{http://fedoraproject.org/}"
-}
-
-@misc{ydl,
-author = "",
-title = "{Yellow Dog Linux for PowerPC Computers}",
-howpublished = "{http://us.fixstars.com/products/ydl/}"
-}
-
-@book{amdahl,
-author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}",
-title = "{Java Concurrency in Prac-tice}",
-publisher = "{Addison-Wesley Professional}",
-year = "2005"
-}
-
-@misc{cerium,
-author = "",
-title = "{SourceForge.JP: Cerium Rendering Engine}",
-howpublished = "{https//sourceforge.jp/projects/cerium/}"
-}
-
-@misc{spurs,
-author = "{Keisuke Inoue}",
-title = "{SPU Centric Execution Model}",
-text = "SACSIS 2006",
-year = 2006
-}
-
-@manual{cell,
-author = "{Sony Corporation}",
-title = "{Cell BroadbandEngine \texttrademark アーキテクチャ}",
-year = 2006
-}
-
-@manual{cell_sdk,
-author = "{International Business Machines Corporation}",
-title = "{Software Development Kit for Multicore Acceleration Version 3.1}",
-year = 2008
-}
-
-@manual{libspe2,
-author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
-title = "{SPE Runtime Management Library Version 2.3}",
-year = 2008
-}
-
-
-@misc{blender,
-title = "{blender.org}",
-howpublished = "{http://blender.org/}"
-}
-
-@article{spufs,
-author = "{Toshiyuki SANUKI}",
-title = "{Cell Broadband Engine \texttrademark を用いたブレード・サーバーの設計と実装}",
-journal = "{IBM PROVISION No.48}",
-year = 2006
-}
-
-@misc{sdl,
-author = "",
-title = "{Simple DirectMedia Layer}",
-howpublished = "{http://www.libsdl.org/}"
-}
-
-@misc{sdl_image,
-author = "",
-title = "{SDL\_image}",
-howpublished = "{http://www.libsdl.org/projects/SDL\_image/}"
-}
-
-@manual{opencl,
-author = "{Aaftab Munshi, Khronos OpenCL Working Group}",
-title ="{The OpenCL Specification Version 1.0}",
-year = 2007
-}
-
-@manual{opencl:ref,
-author = "{Khronos OpenCL Working Group}",
-title ="{OpenCL 1.2 Reference Pages}",
-year = 2012
-}
-
-@misc{gallium,
-author = "",
-title = "{Gallium3D}",
-howpublished = "{http://www.tungstengraphics.com/wiki/index.php/Gallium3D}"
-}
-
-@inproceedings{cellbe-overview-conference,
-author = {Pham, D. and Asano, S. and Bolliger, M.and Day, M. N. and Hofstee, H. P. and Johns, C. and Kahle, J. and Kameyama, A. and Keaty, J. and Masubuchi, Y. and Riley, M. and Shippy, D. and Stasiak, D. and Suzuoki, M. and Wang, M. and Warnock, J. and Weitzel, S. and Wendel, D. and Yamazaki, T. and Yazawa, K. },
-booktitle = {Solid-State Circuits Conference, 2005. Digest of Technical Papers. ISSCC. 2005 IEEE International},
-pages = {184--592 Vol. 1},
-title = {The design and implementation of a first-generation CELL processor},
-year = {2005}
-}
-
-@INPROCEEDINGS{KOKKEVIS06high-performancephysics,
-author = {V KOKKEVIS and S OSMAN and E L},
-title = {High-performance physics solver design for next generation consoles},
-booktitle = {In Game Developers Conference},
-year = {2006}
-}
-
-@misc{Cellteto,
-author = "{Williams, J. Carter, L. Oliker, J. Shalf, K. Yelick}",
-title = "{3D Lattice Boltzmann Magneto-hydrodynamics (LBMHD3D)}",
-howpublished = "{UTK Summit on Software and Algorithms for the Cell Processor}",
-year = {2006}
-}
-
-@inproceedings{cellbe-spe-overview-conference,
-uthor = {Flachs, B.  and Asano, S.  and Dhong, S. H.  and Hotstee, P.  and Gervais, G.  and Kim, R.  and Le, T.  and Liu, P.  and Leenstra, J.  and Liberty, J.  and Michael, B.  and Oh, H.  and Mueller, S. M.  and Takahashi, O.  and Hatakeyama, A.  and Watanabe, Y.  and Yano, N. },
-journal = {Solid-State Circuits Conference, 2005. Digest of Technical Papers. ISSCC. 2005 IEEE International},
-pages = {134--135 Vol. 1},
-title = {A streaming processing unit for a CELL processor},
-year = {2005}
-}
-
-@article{Cellteto2,
-  author = {A. E. Eichenberger},
-  title =  {Using advanced compiler technology to exploit the performance of the Cell Broadband Engine \texttrademark architecture},
-  journal = {IBM System Journal Vol 45, No.1},
-  year =  {2006},
-}
-
-
-@INPROCEEDINGS{Benthin06raytracing,
-    author = {Carsten Benthin and Ingo Wald and Michael Scherbaum and Heiko Friedrich},
-    title = {Ray Tracing on the CELL Processor},
-    booktitle = {In Proceedings of the 2006 IEEE Symposium on Interactive Ray Tracing},
-    year = {2006},
-    pages = {15--23}
-}
-
-@inproceedings{citeulike:1905188,
-author = {Blagojevic, Filip   and Nikolopoulos, Dimitris  S.  and Stamatakis, Alexandros   and Antonopoulos, Christos  D. },
-booktitle = {PPoPP '07: Proceedings of the 12th ACM SIGPLAN symposium on Principles and practice of parallel programming},
-pages = {90--100},
-publisher = {ACM},
-title = {Dynamic multigrain parallelization on the cell broadband engine},
-year = {2007}
-}
-
-@article{DBLP:journals/cphysics/Fabritiis07,
-  author    = {G. De Fabritiis},
-  title     = {Performance of the Cell processor for biomolecular simulations},
-  journal   = {Computer Physics Communications},
-  volume    = {176},
-  number    = {11-12},
-  year      = {2007},
-  pages     = {660-664},
-  ee        = {http://dx.doi.org/10.1016/j.cpc.2007.02.107},
-  bibsource = {DBLP, http://dblp.uni-trier.de}
-}
-
-@article{1272431,
- author = {Kurzak,, Jakub and Dongarra,, Jack},
- title = {Implementation of mixed precision in solving systems of linear equations on the Cell processor: Research Articles},
- journal = {Concurr. Comput. : Pract. Exper.},
- volume = {19},
- number = {10},
- year = {2007},
- issn = {1532-0626},
- pages = {1371--1385},
- publisher = {John Wiley and Sons Ltd.},
-}
-
-@inproceedings{1128027,
- author = {Williams,, Samuel and Shalf,, John and Oliker,, Leonid and Kamil,, Shoaib and Husbands,, Parry and Yelick,, Katherine},
- title = {The potential of the cell processor for scientific computing},
- booktitle = {CF '06: Proceedings of the 3rd conference on Computing frontiers},
- year = {2006},
- isbn = {1-59593-302-6},
- pages = {9--20},
- publisher = {ACM}
-}
-@Comment LocalWords:  SACSIS BroadbandEngine sdk Multicore
-
-
-@article{kono:2008a,
-        author = "河野真治",
-        title = "検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用",
-        journal = "電子情報通信学会VLSI設計技術研究会",
-        month = "March",
-        year = 2008
-}
-
-@article{akira:2008a,
-        author = "神里 晃 and 宮國 渡 and 杉山 千秋 and 河野 真治",
-        title = "CからCellアーキテクチャを利用したCbCへの変換",
-        journal = "電子情報通信学会VLSI設計技術研究会",
-        month = "March",
-        year = 2008
-}
-
-@article{akira:2006a,
-        author = "神里 晃 and 河野 真治",
-        title = "Continuation based CによるPS3 Cell のシミュレーション",
-        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会",
-        month = "May",
-        year = 2006
-}
-
-
-@mastersthesis{akira:master,
-        author = "神里 晃",
-        title = "Cell を用いたゲームフレームワークの提案",
-        school = "琉球大学理工学研究科情報工学専攻",
-        month = "Feb",
-        year = 2008
-}
-
-
-@mastersthesis{gongo:master,
-        author = "宮國 渡",
-        title = "Cell用の Fine-Grain Task Manager の実装",
-        school = "琉球大学理工学研究科情報工学専攻",
-        month = "Feb",
-        year = 2009
-}
-
-@article{gongo:2008a,
-        author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋",
-        title = "Cell 用の Fine-grain Task Manager の実装",
-        journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会",
-        month = "April",
-        year = 2008
-}
-
-@article{chiaki:thesis,
-        author = "杉山 千秋",
-        title = "SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装",
-        journal = "琉球大学工学部情報工学科 平成19年度卒業論文",
-        year = 2008
-}
-
-@article{akamine:2010a,
-        author = "赤嶺 一樹 and 河野 真治",
-        title = "Meta Engine を用いた Federated Linda の実験",
-        journal = "日本ソフトウェア科学会第 27 会大会(2010 年度)",
-        month = "Sep",
-        year = 2010
-}
-
-@mastersthesis{kaito:master,
-        author = "多賀野 海人",
-        title = "Cell Task Manager Cerium における Task を用いたパイプラインの改良",
-        school = "琉球大学理工学研究科情報工学専攻",
-        month = "Feb",
-        year = 2011
-}
-
-
-@article{yutaka:2010a,
-        author = "金城 裕 and 河野 真治",
-        title = "Fine Grain Task Manager Cerium  のチューニング",
-        journal = "日本ソフトウェア科学会第 27 会大会(2010 年度)",
-        month = "Sep",
-        year = 2010
-}
-
-@article{yutaka:2011a,
-        author = "金城 裕 and 河野 真治",
-        title = "ゲームフレームワーク Cerium TaskManager の改良",
-        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会",
-        month = "Apr",
-        year = 2011
-}
-
-@article{yutaka:2011b,
-        author = "金城 裕 and 河野 真治",
-        title = "Cerium におけるDataSegment APIの設計",
-        journal = "日本ソフトウェア科学会第 28 会大会(2011 年度)",
-        month = "Sep",
-        year = 2011
-}
-
-@article{toma:2012a,
-        author = "當眞 大千 and 河野 真治",
-        title = "Cerium Task Manager におけるマルチコア上での並列実行機構の実装",
-        journal = " 第53回プログラミング・シンポジウム",
-        month = "Jan",
-        year = 2012
-}
-
-@article{yutaka:os,
-        author = "金城裕 and 河野真治 and 多賀野海人 and 小林佑亮(琉球大学)",
-        title = "ゲームフレームワークCerium TaskManagerの改良",
-        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)",
-        month = "April",
-        year = 2011
-}
\ No newline at end of file
--- a/cerium.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-\section{Cerium}
-Cerium は、当初 Cell 用の Fine-Grain Task Manager\cite{gongo:2008a} として当研究室で開発された。
-TaskManager, SceneGraph, Rendering Engine の3つの要素から構成されており、今では、PS3 および Linux, MacOS X 上で動作する。
-GPGPU の Data Parallel を含めて、同じ形式で並列プログラムを記述することができる。
-
-\subsection{Cerium TaskManager}
-TaskManager は、Task と呼ばれる分割されたプログラムを管理する。
-関数やサブルーチンを Task として扱い、Task 同士の依存関係を考慮しながら実行される。
-Task は TaskManager を使って生成する。
-Task を生成する際に、以下のような要素を設定することができる。
-
-\begin{itemize}
-  \item input data
-  \item output data
-  \item parameter
-  \item cpu type
-  \item dependency
-\end{itemize}
-
-input, output, parameter は関数でいうところの引数に相当する。
-cpy type は Task がどのようなの Device の組み合わせで実行されるかを示す。
-dependency は他の Task との依存関係を示している。
-
-\begin{figure}[!h]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/createTask.pdf}
-  \end{center}
-  \caption{Task Manager}
-  \label{fig:createTask}
-\end{figure}
-
-図:\ref{fig:createTask}は Cerium が Task を生成/実行する場合のクラスの構成である。
-TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。
-ActiveTaskList に移された Task は依存関係が存在しないのでどのような順序で実行されても問題ない。
-Task は Scheduler に転送しやすい TaskList に変換してから cpy type に対応する Scheduler に Synchronized Queue である mail を通して転送される。
-Scheduler ではパイプラインで task が処理される(図:\ref{fig:task_scheduler})。
-Task が終了すると Scheduler から TaskManager に mail を通して通知される。
-その通知に従って依存関係が処理され、再び TaskManager から Scheduler に Task が転送される。
-
-\begin{figure}[!h]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/scheduler.pdf}
-  \end{center}
-  \caption{Task Scheduler}
-  \label{fig:task_scheduler}
-\end{figure}
-
-以下に Task を生成する例題を示す。
-表:\ref{table:TaskManager_api}は Task を生成に用いる API を示している。
-input データを2つ用意し、input データの各要素同士を乗算し、output に格納する multiply という例題である。
-
-\lstinputlisting[caption=multiply,label=test]{./source/multiply.cc}
-
-\begin{table}[htpb]
-  \begin{center}
-    \small
-    \begin{tabular}[htpb]{|c|l|} \hline
-      create\_task & Task を生成する \\ \hline
-      set\_inData  & Task への入力データのアドレスを追加 \\ \hline
-      set\_outData & Task からのデータ出力先アドレスを追加 \\ \hline
-      set\_param   & Task のパラメータ \\ \hline
-      wait\_for    & Task の依存関係 \\ \hline
-      set\_cpu     & Task を実行する Device の設定 \\ \hline
-      spawn        & Task を登録する \\ \hline
-      iterate      & データ並列で実行する Task として登録する \\ \hline
-    \end{tabular}
-    \caption{Task 生成に用いる API}
-    \label{table:TaskManager_api}
-  \end{center}
-\end{table}
-
-CPU で実行される Task(OpenCL, CUDA でいう kernel) の記述は以下のようになる。
-表:\ref{table:taskAPI}は Task 側で使用する API である。
-
-\lstinputlisting[caption=task,label=test]{./source/multiply_task.cc}
-
-\begin{table}[ht]
-  \begin{center}
-    \small
-    \begin{tabular}[t]{|c|l|} \hline
-      get\_input  & 入力データのアドレスを取得 \\ \hline
-      get\_output & データ出力先のアドレスを取得 \\ \hline
-      get\_param  & パラメータを取得 \\ \hline
-    \end{tabular}
-    \caption{ Task 側で使用する API }
-    \label{table:taskAPI}
-  \end{center}
-\end{table}
-
-\subsection{Cerium におけるデータ並列}
-Cerium でデータ並列による実行をサポートするために、OpenCL の API に合わせた iterate という API を用意した。
-iterate は length を引数として受け取り、Scheduler で length の値と受け取った引数の個数を次元数として Task 数を計算し、データ並列で実行する Task として生成する。
-
-例として、CPU 数4、一次元で10個のデータに対してデータ並列実行を行なった場合、各 CPU が担当する index は表:\ref{table:dpi}のようになる。
-
-\begin{table}[h]
-  \begin{center}
-    \small
-    \begin{tabular}[t]{c||c|c|c|c} \hline
-      &CPU0& CPU1&CPU2&CPU3 \\ \hline
-      1&0&1&2&3 \\ \hline
-      2&4&5&6&7 \\ \hline
-      3&8&9& & \\ \hline
-    \end{tabular}
-    \caption{Data 並列実行時の index の割り当て}
-    \label{table:dpi}
-  \end{center}
-\end{table}
-
-各 CPU が担当する index は SchedTask に格納してある。
-データ並列で実行する Task の記述は以下のようになる。
-
-\lstinputlisting[caption=example,label=test]{./source/multiply_task_dp.cc}
-
-並列プログラムでは、並列化する Task が全部同一であるということは少なくない。
-iterate を実装したことで、Task を生成する部分をループで回す必要はなくなり、OpenCL と同様に1つの記述で異なる index を持つ Task を Multi Core CPU 上で実行することが可能になった。
--- a/cerium_gpu.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-\section{Cerium の GPGPU への対応}
-本章では、まずはじめに GPU プログラミングの特徴および問題について述べ、Cerium への実装でどのように対応したかについて説明する。
-
-\subsection{GPU プログラミングの特徴および問題}
-まず Multi Core CPU に対するプログラミングと同様に性能を向上させるためには、プログラム全体を対象とした並列度を高くしなければならない。
-明示的な並列化部分はループ部分である。
-GPU は数百個のコアを有しており、ループ部分に対してデータ並列で処理を行うことで CPU より高速で演算を行うことができる。
-プログラムの大部分がループであれば、データ並列による実行だけでプログラムの性能は向上する。
-しかし、多くのプログラムはその限りではない。
-GPGPU においてネックになる部分はデータ転送である。
-GPU の Memory 空間(図:\ref{fig:gpuarch})は CPU(図:\ref{fig:cpuarch}) とは異なり、Shared Memory ではないため host と device 間でデータの共有ができない。
-データにアクセスするためには Memory 空間ごとコピーするしかない。
-これが大きなオーバーヘッドになるので、データ転送をオーバーラップする必要がある。
-今回新たに、データ転送を自動でオーバーラップするように OpenCL および CUDA を用い Scheduler を実装した。
-
-\begin{figure}[htpd]
-  \begin{center}
-    \includegraphics[scale=0.35]{./images/gpu_arch.pdf}
-  \end{center}
-  \caption{Gpu Architecture}
-  \label{fig:gpuarch}
-\end{figure}
-
-\begin{figure}[htpd]
-  \begin{center}
-    \includegraphics[scale=0.7]{./images/cpu_arch.pdf}
-  \end{center}
-  \caption{Cpu Architecture}
-  \label{fig:cpuarch}
-\end{figure}
-
-\subsection{OpenCL および CUDA を用いた Scheduler の実装}
-Scheduler と CpuThreads に対応させる形で OpenCL を用いた GpuScheduler, GpuThreads、CUDA を用いた CudaScheduler, CudaThreads を実装した。
-TaskManager から転送された TaskList の情報をもとに device 上のメモリ領域を確保する。
-その後、OpenCL ならば CommandQueue、CUDA ならば Stream に Operation を発行していく。
-Operation は発行された順序で実行されるので、host から device へのデータ転送、kernel の実行、device から host へのデータ転送の順に発行する。
-非同期 API を用いることでデータ転送や kernel の実行を並列に行うことができる。
-通常、非同期 API を用いる場合は依存関係を考慮した同期が必要になるが転送されてくる Task の依存関係は TaskManager ですべて解消されているので Scheduler 側では順番を考えず Task を実行して問題ない。
-host から device へのデータ転送は、OpenCL では clEnqueueWriteBuffer、CUDA では cuMempcyHtoDAsync を用いて行われる。
-clEnqueueWriteBuffer は第三引数に CL\_FALSE を指定することで非同期なデータ転送を行う。
-転送されてきた TaskList からデータ並列またはタスク並列で実行するか決定する。
-データ並列で実行する場合は、OpenCL では clEnqueueTaskNDRangeKernel、CUDA では cuLaunchKernel を用いる。
-タスク並列で実行する場合は、OpenCL では clEnqueueTask、CUDA では cuLaunckKernel の引数を1に設定することで実行することができる。
-device から host へのデータ転送は、OpenCL では clEnqueuReadBuffer、CUDA では cuMemcpyDtoHAsync を用いて行われる。
-clEnqueueReadBuffer も clEnqueueWriteBuffer と同様に第三引数に CL\_FALSE を指定することで非同期実行となる。
-転送されてきた Task がすべて終了すると Synchronized Queue である mail を通して TaskManager に Task の終了を通知する。
-終了が通知されると TaskManager で依存関係が解消し、再び TaskList を転送する。
-GpuScheduler および CudaScheduler は複数の CommandQueue および Stream を持っており、パイプラインで実行される。
-
-kernel の記述は以下のようになる。
-\lstinputlisting[caption=multiply(OpenCL),label=test]{./source/Multi.cl}
-\lstinputlisting[caption=multiply(CUDA),label=test]{./source/Multiply.cu}
-
-修飾子など若干の違いはあるが、ほぼ同じ記述で書くことができるが CPU, OpenCL, CUDA のどれか1つの記述から残りのコードも生成できるようにすることが望ましい。
--- a/conclusion.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-\section{まとめ}
-本研究では並列プログラミングフレームワーク Cerium を OpenCL および CUDA に対応させた。
-OpenCL および CUDA に対応させたことで Cerium は単一の記述から CPU および GPU 上での実行が可能になった。
-WordCount, FFT を例題に用い、Scheduler の測定も行なった。
-OpenCL と CUDA で異なる結果が出たことからそれぞれで最適なチューニングの方法が違うことがわかる。
-どちらもチューニングを行えば同等な結果が出ると考えられるのでプロファイラなどを用いて、実装を見直すことが今後の課題となる。
-また、Cerium は CPU と GPU の同時実に対応している。
-しかし、スケジューリングを行わず Task を CPU, GPU に対し交互に割り振っているため CPU 単体、GPU 単体で実行するより結果が悪くなる。
-Task の割り当てを最適化することで性能を向上させることが予想される。
-スケジューリングの方法として、一度 Task を CPU のみ、GPU のみで実行し、プロファイルを取ることで Task の割り当てを決定するなどが考えられる。
-%% 同時実行の話も入れて
--- a/cuda.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-\section{CUDA}
-CUDA とは、半導体メーカー NVIDIA 社が提供する GPU コンピューティング向けの総合開発環境でコンパイラ、ライブラリ、デバッガなどから構成される。プログラミング言語である CUDA C は C 言語ベースに拡張を加えたものである。
-
-CUDA には CUDA Runtime API と CUDA Driver API の2種類がある。
-Driver API は Runtime API に比べてプログラマが管理すべきリソースが多い。
-しかし、Runtime API より柔軟な処理を行うことができる。
-今回は Driver API を使用して実装した。
-
-CUDA も OpenCL と同様に、制御を行う CPU 側を host、GPU 側を device と定義している。
-また、device 上で動作するプログラムも OpenCL と同様に kernel と呼ぶ。
-
-\subsection{Stream}
-CUDA には OpenCL の CommandQueue と似たような仕組みとして Stream がある。
-Stream は host 側で発行された Operation を一連の動作として device で実行する。
-Stream に発行された Operation は発行された順序で実行されることが保証されている。
-異なる Stream に発行された Operation に依存関係が存在しない場合、Operation を並列に実行することができる。
-
-Stream は cuStreamCreate という Driver API で生成される。
-引数に Stream を指定しない API はすべて host 側をブロックする同期的な処理となる。
-複数の Stream を同時に走らせ Operation を並列に実行するためには非同期な処理を行う API を利用する必要がある。
-
-\subsection{Data Parallel Execution}
-CUDA では OpenCL の WorkItem に相当する単位を thread と定義している。
-この thread をまとめたものを block と呼ぶ。
-CUDA でデータ並列による kernel 実行をする場合、cuLaunchKernel API を使用する。
-この関数は引数として各座標の block 数と各座標の block 1つ当たりの thread 数を指定することでデータ並列で実行できる。
-
-cuLaunckKernel で kernel を実行すると各 thread に対して block ID と thread ID が割り当てられる。
-CUDA には OpenCL とは異なり、ID を取得する API は存在しない。
-代わりに、kernel に組み込み変数が準備されており、それを参照し、対応するデータに対し処理を行うことでデータ並列を実現する。
-組み込み変数は以下の通りである。
-
-\begin{itemize}
-  \item uint3 blockDim
-  \item uint3 blockIdx
-  \item uint3 threadIdx
-\end{itemize}
-
-各組み込み変数はベクター型で、blockDim.x とすると x 座標の thread 数を参照することができる。
-blockIdx.x とすると x 座標の block ID が参照でき、threadIdx.x とすると x 座標の thread ID を参照することができる。
-blockDim.x * blockIdx.x + threadIdx.x で OpenCL の get\_global\_id(0) で取得できる ID に相当する ID を算出することができる。
-例として、ある kernel で get\_global\_id(0) の返り値が13の場合、CUDA では図:\ref{fig:calculate_index}のようになる。
-
-\begin{figure}[!h]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/culculate_index.pdf}
-  \end{center}
-  \caption{Calculate Index}
-  \label{fig:calculate_index}
-\end{figure}
--- a/dummy.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-%%% jdummy.def
-%
-\DeclareRelationFont{JY1}{mc}{it}{}{OT1}{cmr}{it}{}
-\DeclareRelationFont{JT1}{mc}{it}{}{OT1}{cmr}{it}{}
-\DeclareFontShape{JY1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*min
-    <10.95><12><14.4><17.28><20.74><24.88> min10
-    <-> min10}{}
-\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin
-    <10.95><12><14.4><17.28><20.74><24.88> tmin10
-    <-> tmin10}{}
-\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{}
-\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{}
-\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min
-    <10.95><12><14.4><17.28><20.74><24.88> min10
-    <-> min10}{}
-\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin
-    <10.95><12><14.4><17.28><20.74><24.88> tmin10
-    <-> tmin10}{}
-\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{}
-\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{}
-\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min
-    <10.95><12><14.4><17.28><20.74><24.88> min10
-    <-> min10}{}
-\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin
-    <10.95><12><14.4><17.28><20.74><24.88> tmin10
-    <-> tmin10}{}
-\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{}
-\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{}
-\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
-    <10.95><12><14.4><17.28><20.74><24.88> goth10
-    <-> goth10}{}
-\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
-    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
-    <-> tgoth10}{}
-\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
-\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
-\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth
-    <10.95><12><14.4><17.28><20.74><24.88> goth10
-    <-> goth10}{}
-\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth
-    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
-    <-> tgoth10}{}
-\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
-\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
-\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth
-    <10.95><12><14.4><17.28><20.74><24.88> goth10
-    <-> goth10}{}
-\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth
-    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
-    <-> tgoth10}{}
-\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{}
-\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{}
-\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
-    <10.95><12><14.4><17.28><20.74><24.88> goth10
-    <-> goth10}{}
-\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
-    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
-    <-> tgoth10}{}
-\endinput
-%%%% end of jdummy.def
--- a/images/cpu_arch.bb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-%%Title: ./cpu_arch.pdf
-%%Creator: extractbb 20120420
-%%BoundingBox: 0 0 250 207
-%%CreationDate: Fri Feb 22 14:24:38 2013
-
Binary file images/cpu_arch.pdf has changed
--- a/images/cpu_arch.xbb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-%%Title: ./images/cpu_arch.pdf
-%%Creator: extractbb 20090506
-%%BoundingBox: 0 0 273 225
-%%HiResBoundingBox: 0.000000 0.000000 273.000000 225.000000
-%%PDFVersion: 1.3
-%%Pages: 1
-%%CreationDate: Mon Feb 17 16:01:55 2014
-
--- a/images/createTask.bb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-%%Title: ./images/createTask.pdf
-%%Creator: extractbb 20090506
-%%BoundingBox: 0 0 512 391
-%%CreationDate: Tue Feb 25 09:13:13 2014
-
Binary file images/createTask.pdf has changed
--- a/images/culculate_index.bb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-%%Title: ./images/culculate_index.pdf
-%%Creator: extractbb 20090506
-%%BoundingBox: 0 0 562 226
-%%CreationDate: Tue Feb 18 19:17:52 2014
-
Binary file images/culculate_index.pdf has changed
--- a/images/culculate_index.xbb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-%%Title: ./images/culculate_index.pdf
-%%Creator: extractbb 20090506
-%%BoundingBox: 0 0 562 226
-%%HiResBoundingBox: 0.000000 0.000000 562.000000 226.000000
-%%PDFVersion: 1.3
-%%Pages: 1
-%%CreationDate: Tue Feb 18 19:17:55 2014
-
--- a/images/gpu_arch.bb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-%%Title: ./gpu_arch.pdf
-%%Creator: extractbb 20120420
-%%BoundingBox: 0 0 557 557
-%%CreationDate: Fri Feb 22 14:24:38 2013
-
Binary file images/gpu_arch.pdf has changed
--- a/images/gpu_arch.xbb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-%%Title: ./images/gpu_arch.pdf
-%%Creator: extractbb 20090506
-%%BoundingBox: 0 0 556 548
-%%HiResBoundingBox: 0.000000 0.000000 556.000000 548.000000
-%%PDFVersion: 1.4
-%%Pages: 1
-%%CreationDate: Mon Feb 17 16:02:34 2014
-
--- a/images/scheduler.bb	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-%%Title: ./images/scheduler.pdf
-%%Creator: extractbb 20100328
-%%BoundingBox: 0 0 505 345
-%%CreationDate: Tue Jan 10 13:32:02 2012
-
Binary file images/scheduler.graffle has changed
Binary file images/scheduler.pdf has changed
--- a/introduction.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-\section{はじめに}
-GPU の普及と高性能化にともない、GPU の演算資源を画像処理以外の目的にも利用する GPGPU(GPU による汎目的計算)が注目されている。\cite{FFTonGPU}
-GPU 以外にも Cell\cite{cell}, SpursEngine, Xeon Phi など様々なプロセッサが存在する。
-それぞれのプロセッサを利用するにはそれぞれ異なる API を利用する必要があり、それらの対応に多くの時間を取られてしまいプログラムの性能改善に集中することができない。
-また、GPU や Cell などメモリ空間が異なるプロセッサはデータの転送がオーバーヘッドとなるので、データ転送を効率的に行えるかどうかで処理時間が大きく変わる。
-
-当研究室で開発・改良が行われている並列プログラミングフレームワーク Cerium\cite{cerium} は様々なプロセッサを統合して扱えるフレームワークを目指している。
-様々なプロセッサを統合して扱えるフレームワークとしてフランス国立情報学自動制御研究所(INRIA)が開発している StarPU\cite{AugThiNamWac11CCPE} がある。
-StarPU は Cerium と同じタスクベースの非同期フレームワークである。
-%%  ちゃんと論文を引用する
-タスクという単位で記述することで処理とデータを分離し、より効率的に処理を行うことができる。
-StarPU にはパイプラインでの実行機構は入ってなく、パイプライン処理を行いたい場合は自分で実装するしかない。
-しかし、パイプライン処理を書くことは非常に煩雑で難しい。
-そこで、今回 Cerium に OpenCL, CUDA を用いた Scheduler を新たに実装した。
-Scheduler は自動でデータ転送をオーバーラップし、パイプラインで処理を行うように設計した。
-
-本論文では、まず OpenCL, CUDA について説明する。
-その後、既存の Cerium の実装および新たに実装した GPU 実行の機構について説明する。
-最後に WordCount, FFT を例題として測定し、評価を行う。
--- a/ipsjcommon.sty	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,995 +0,0 @@
-% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
-%                            The Editorial Board of the IPSJ Journal
-%
-% ipsjcommon.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
-% (revision history deleted)
-% ipsjcommon.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
-
-%%%%%% Sectioning Commands %%%%%%
-
-% \section:	2 rows
-% others:	1 row
-%
-% Note that \paragraph and \subparagraph act as \subsubsubsection and
-% \subsubsubsubsection resp.
-%
-% The form of sectioning header is;
-%	<1 Kanji sp> \the<sect-command> [`.' if \section] <1 Kanji sp> <title>
-% Nothe that <1 Kanji sp> is that of \normalsize.
-
-\def\section{\@startsection
-	{section}{1}{\@mojihaba}{\sec@aboveskip}{\sec@belowskip}{\fs@sec\bf}}
-\let\ipsj@section\section					% 2.04(1)
-\def\subsection{\@startsection
-	{subsection}{2}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
-\def\subsubsection{\@startsection
-	{subsubsection}{3}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
-\def\paragraph{\@startsection
-	{paragraph}{4}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
-\def\subparagraph{\@startsection
-	{subparagraph}{5}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
-
-\newcounter{section}
-\newcounter{subsection}[section]
-\newcounter{subsubsection}[subsection]
-\newcounter{paragraph}[subsubsection]
-\newcounter{subparagraph}[paragraph]
-
-\def\thesection{\arabic{section}}
-\def\sec@section@postfix{.}
-\def\thesubsection{\thesection.\arabic{subsection}}
-\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
-\def\theparagraph{\thesubsubsection.\arabic{paragraph}}
-\def\thesubparagraph{\theparagraph.\arabic{subparagraph}}
-
-\setcounter{secnumdepth}{5}
-
-\def\appendix{\let\sec@sec\section
-	\def\section{\@startsection
-		{section}{1}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}%
-	\def\thesection{\appendixprefix\arabic{section}}%
-	\def\sec@section@postfix{\appendixpostfix}%
-	\stepcounter{section}\setcounter{section}{0}%
-	\@ifnextchar[%]
-		     {\sec@oappendix}{\sec@xappendix}}
-\def\sec@xappendix{\@ifstar{\let\section\sec@sec}%
-	{\sec@sec*{\ifDS@english Appendix\else\ipsj@j@app \fi}}}% 2.12(1b)
-\def\sec@oappendix[#1]{\sec@sec*{\ifDS@english Appendix: \else
-	\ipsj@j@app\hskip\jspaceskip\fi #1}}			% 2.12(1b)
-\def\appendixprefix{A.}
-\def\appendixpostfix{}
-
-\def\acknowledgment{\par
-	{\bf \ifDS@english Acknowledgments \else\ipsj@j@ack\fi}%% 2.12(1b)
-	\hskip\@mojihaba \ignorespaces}
-\let\endacknowledgment\par
-
-\newif\ifipsj@recommendation \ipsj@recommendationfalse		% 2.04(1) >>
-\def\recommendation#1{\global\ipsj@recommendationtrue
-	\ifDS@draft\else \ra@putrcvacc\fi
-	\ipsj@section*{#1}
-}
-\def\endrecommendation{\par\vskip\baselineskip\penalty\opt@magicpenalty}
-								% 2.04(1) <<
-
-% Modified \@startsection has a trick for "2-row" of \section, which must
-% work even if \section appears the top of a page.  The BEFORESKIP must be
-% inserted with respect to the previous baseline.  So, we must go back to
-% the imaginary previous baseline at the top of a page.  That is, we do;
-%	\vskip\baselineskip \vspace*{-\baselineskip}
-% which resuls;
-% 	<a> do nothing at midpage
-%	<b> go to the first baseline by \topskip, then go back to 0th
-%	    baseline by \vspace*.
-% The trick "\vskip-\prevdepth \prevdepth\z@" will assure exact vertical
-% space even when the last line has much depth.
-%
-% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
-\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
-	\par \@tempskipa #4\relax
-	\@afterindenttrue
-	\ifdim\@tempskipa<\z@ \@tempskipa-\@tempskipa \@afterindentfalse\fi
-	\if@nobreak \everypar{}\else \addpenalty{\@secpenalty}\fi
-	\ifdim\@tempskipa>\z@
-% Here is the trick for \section.
-		\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
-		\vspace*{-\baselineskip}\vskip\@tempskipa\fi
-	\@ifstar
-	{\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
-
-% \@sect is modified to cope with `.' for \section and MOJI-DORI
-%
-% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[TITLE]{TITLE}
-\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
-	\def\@svsec{}\else 
-	\refstepcounter{#1}
-								% 2.00(1)>>
-	\let\@@protect\protect \def\protect{\noexpand\protect\noexpand}
-	\edef\@svsec{\csname the#1\endcsname \csname sec@#1@postfix\endcsname
-		\hskip\@mojihaba} \let\protect\@@protect\fi	% 2.00(1)<<
-	\@tempskipa #5\relax
-	\ifdim \@tempskipa<\z@ 
-        	\def\@svsechd{#6\hskip #3\relax\@svsec #8}	% 2.00(1)
-	\else
-        	\begingroup #6\relax
-		\@hangfrom{\hskip #3\relax\@svsec}%
-			{\interlinepenalty\@M \sec@mojidori{#8}\par}%
-		\endgroup
-	\fi \@xsect{#5}}
-
-% \@ssect is modified to cope with MOJI-DORI
-%
-% \@sect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{TITLE}
-\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
-	\ifdim \@tempskipa<\z@ \def\@svsechd{#4\hskip #1\relax #5}%
-	\else \begingroup #4%
-		\@hangfrom{\hskip #1}{\interlinepenalty\@M
-			\sec@mojidori{#5}\par}\endgroup
-	\fi \@xsect{#3}}
-
-%% Modify \@xsect to avoid (buggy) \clubpenalty=10000. (H.N.)
-\def\@xsect#1{\@tempskipa #1\relax
-	\ifdim \@tempskipa<\z@
-		\glboal\@nobreakfalse \global\@noskipsectrue
-		\everypar{\global\@noskipsecfalse \hskip-\parindent
-			\begingroup \@svsechd \endgroup \unskip
-			\hskip -#1\everypar{}}%
-	\else
-		\par \nobreak
-		\vskip \@tempskipa \global\@nobreaktrue
-		\everypar{\global\@nobreakfalse
-			\if@afterindent\else {\setbox0\lastbox}\fi \everypar{}}
-	\fi\ignorespaces}
-
-% Here is a trick for MOJI-DORI of sectioning tilte.  The rule is;
-%	2 - 4 Kanji char -> 5 Kanji char
-%	otherwise    -> natural width
-%
-\def\sec@mojidori#1{\ifDS@english #1\else			% 2.12(1b)
-	\setbox0\hbox{#1}\settowidth\@tempdimb{\ipsj@j@a}%	% 2.12(1b)
-	\ifdim\wd0>4.5\@tempdimb #1\else
-	\ifdim\wd0<1.5\@tempdimb #1\else
-	\jintercharskip\fill \jasciikanjiskip\fill \jmathkanjiskip\fill
-	\leavevmode\hbox to5\@tempdimb{#1\hfil}\fi\fi\fi}
-
-%%%%%% List-like Environments %%%%%%
-%
-%		LM	RM	LW	LS	LPI	II
-% default	2K	0	0.75K	0.25K	0	0
-% \enumerate	3K	0	3K	0	0	0
-% \Enumerate	0	0	3K	0	0	3K
-% \ENUMERATE	0	0	3K	0	0	4K
-% \enumerate*	1K	0	3K	0	0	2K
-% \itemize	2K	0	2K	0	0	0
-% \Itemize	0	0	2K	0	0	2K
-% \ITEMIZE	0	0	2K	0	0	3K
-% \itemize*	1K	0	2K	0	0	1K
-% \description	2K	0	0	1K	0	-1K
-% \Description	0	0	0	1K	0	1K
-% \DESCRIPTION	0	0	0	1K	0	2K
-% \description*	1K	0	0	1K	0	0
-% \verse	3K	2K	0.75K	0.25K	-1K	-1K
-% \quotation	2K	2K	0.75K	0.25K	1K	1K
-% \quote	2K	2K	0.75K	0.25K	0	0
-%
-% where LM is \leftmargin, RM is \rightmargin, LW is \labelwidth, LS is
-% \labelsep, \LPI is \listparindent, II is \itemindent, and K is Kanji char
-% width (\@mojihaba).
-%
-% All vertical space parameters, \topsep, \partopsep, \itemsep and \parsep,
-% are 0pt.
-
-\leftmargini2\@mojihaba
-\leftmarginii2\@mojihaba
-\leftmarginiii2\@mojihaba
-\leftmarginiv2\@mojihaba
-\leftmarginv2\@mojihaba
-\leftmarginvi2\@mojihaba
-
-\def\lst@listi{\labelsep.75\@mojihaba \labelwidth.25\@mojihaba
-	\rightmargin\z@ \listparindent\z@ \itemindent\z@
-	\partopsep\z@ \parsep\z@ \topsep\z@ \itemsep\z@}
-\def\@listi{\leftmargin\leftmargini \lst@listi}
-\def\@listii{\leftmargin\leftmarginii \lst@listi}
-\def\@listiii{\leftmargin\leftmarginiii \lst@listi}
-\def\@listiv{\leftmargin\leftmarginiv \lst@listi}
-\def\@listv{\leftmargin\leftmarginv \lst@listi}
-\def\@listvi{\leftmargin\leftmarginvi \lst@listi}
-
-\@listi
-
-\def\labelenumi{(\,\theenumi\,)} 
-\def\theenumi{\arabic{enumi}} 
-\def\labelenumii{(\,\theenumii\,)}
-\def\theenumii{\alph{enumii}}
-\def\p@enumii{\theenumi}
-\def\labelenumiii{(\,\theenumiii\,)}
-\def\theenumiii{\roman{enumiii}}
-\def\p@enumiii{\theenumi(\theenumii)}
-\def\labelenumiv{(\,\theenumiv\,)}
-\def\theenumiv{\Alph{enumiv}}
-\def\p@enumiv{\p@enumiii\theenumiii}
-\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
-	\advance\@enumdepth \@ne 
-	\edef\@enumctr{enum\romannumeral\the\@enumdepth}
-	\list{\csname label\@enumctr\endcsname}{\usecounter
-		{\@enumctr}\def\makelabel##1{##1\hss}%
-		\leftmargin3\@mojihaba \labelwidth3\@mojihaba \labelsep\z@}\fi}
-\let\endenumerate\endlist
-
-\def\labelitemi{$\bullet$}
-\def\labelitemii{\bf --}
-\def\labelitemiii{$\ast$}
-\def\labelitemiv{$\cdot$}
-\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
-	\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
-	\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\hss##1\hss}%
-		\labelwidth2\@mojihaba \labelsep\z@}\fi}
-\let\enditemize\endlist
-
-\def\description{\list{}{\labelwidth\z@ \labelsep\@mojihaba
-	\itemindent\labelsep \advance\itemindent-\leftmargin
-	\def\makelabel##1{\bf ##1}}}
-\let\enddescription\endlist
-
-\let\latex@trivlist\@trivlist
-\def\lst@trivlist#1#2{\leftmargin#1\relax
-	\itemindent\labelwidth \advance\itemindent\labelsep
-	\advance\itemindent#2\relax
-	\let\@trivlist\latex@trivlist \@trivlist}
-
-\def\lst@Trivlist{\def\@trivlist{\lst@trivlist\z@\z@}}
-\def\Enumerate{\lst@Trivlist \enumerate}
-\let\endEnumerate\endlist
-\def\Itemize{\lst@Trivlist \itemize}
-\let\endItemize\endlist
-\def\Description{\lst@Trivlist \description}
-\let\endDescription\endlist
-
-\def\lst@TRIVLIST{\def\@trivlist{\lst@trivlist\z@\@mojihaba}}
-\def\ENUMERATE{\lst@TRIVLIST \enumerate}
-\let\endENUMERATE\endlist
-\def\ITEMIZE{\lst@TRIVLIST \itemize}
-\let\endITEMIZE\endlist
-\def\DESCRIPTION{\lst@TRIVLIST \description}
-\let\endDESCRIPTION\endlist
-
-\def\lst@strivlist{\def\@trivlist{\lst@trivlist\@mojihaba{-\@mojihaba}}}
-\@namedef{enumerate*}{\lst@strivlist \enumerate}
-\@namedef{endenumerate*}{\endlist}
-\@namedef{itemize*}{\lst@strivlist \itemize}
-\@namedef{enditemize*}{\endlist}
-\@namedef{description*}{\lst@strivlist \description}
-\@namedef{enddescription*}{\endlist}
-
-\def\verse{\let\\=\@centercr 
-	\list{}{\itemindent-\@mojihaba \listparindent\itemindent 
-	\rightmargin\leftmargin \advance\leftmargin\@mojihaba}\item[]}
-\let\endverse\endlist
-\def\quotation{\list{}{\listparindent\@mojihaba	\itemindent\listparindent
-	\rightmargin\leftmargin}\item[]}
-\let\endquotation\endlist
-\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
-\let\endquote\endlist
-
-\def\newtheorem{\@ifstar
-	{\theo@newtheorem{\theo@it}{\ }}{\theo@newtheorem{}{\theo@sp}}}
-\def\theo@newtheorem#1#2#3{\@namedef{theo@it@#3}{#1}\@namedef{theo@sp@#3}{#2}%
-	\@ifnextchar[%]
-		     {\@othm{#3}}{\@nthm{#3}}}
-\def\@begintheorem#1#2{\DESCRIPTION \csname theo@it@\@currenvir\endcsname
-	\item[#1\csname theo@sp@\@currenvir\endcsname #2]}
-\def\@opargbegintheorem#1#2#3{\DESCRIPTION
-	\csname theo@style@\@currenvir\endcsname
-	\item[#1\csname theo@sp@\@currenvir\endcsname #2\ (#3)]}
-\let\@endtheorem\endlist					% 1.02(2)
-\ifDS@english
-\let\theo@it\it \let\theo@sp\ %
-\else
-\let\theo@it\relax \let\theo@sp\relax
-\fi
-
-%%%%%% Bibliography %%%%%%
-%
-% 1. Label format is "<nn>)".
-% 2. \leftmargin 24Q (or 2K)
-% 3. \labelsep is 6Q (or 0.5K)
-% 4. \baselineskip is 16Q(j)/15Q(e)/normal(d)
-% 5. ~ and \ is null but stretchable and (hardly) breakable.	% 2.09(1)
-
-\def\thebibliography#1{%
-	\section*{\hskip-\@mojihaba\hfill\hbox{\bib@refname}\hfill\hskip\z@}
-	\ifDS@draft \@tempdima\@mojihaba \else\@tempdima12\@Q\fi
-	\list{\arabic{enumi}\rlap{%(
-			   	  )}}%
-	     {\fs@bibliography \leftmargin2\@tempdima \labelwidth\z@
-		\labelsep\@tempdima \itemindent.5\@tempdima
-		\usecounter{enumi}\def\makelabel##1{\hss\llap{##1}}}
-	\def\newblock{\hskip .11em plus .33em minus .07em}
-	\sloppy \frenchspacing
-	\def\ {\hskip\z@ plus\fontdimen\thr@@\font \penalty5000\relax}
-								% 2.09(1)
-	\ifDS@english\else \ipsj@defcolonforbib \fi}		% 2.12(1b)(2)
-
-% (removal of \bib@refname)					% 2.12(1a)
-
-\newdimen\bib@adjustheight \bib@adjustheight-\maxdimen
-\def\endthebibliography{\endlist \par \@normalsize
-	\@tempdima\@colht \advance\@tempdima-\@colroom
-	\advance\@tempdima\pagetotal \advance\@tempdima-\prevdepth
-	\advance\@tempdima-\topskip
-	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
-	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
-	\advance\@tempdima-\@tempdimb
-	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
-	\vskip-\prevdepth \vskip\@tempdima \prevdepth\z@
-	\bib@adjustheight\@tempdimb \advance\bib@adjustheight\@tempdima
-	\global\advance\bib@adjustheight\topskip
-	\if@firstcolumn\else\global\advance\bib@adjustheight\@M pt\fi}
-
-
-%%%%%% Floats %%%%%%
-
-% You may need to change following parameters
-\setcounter{topnumber}{4}
-\setcounter{bottomnumber}{4}
-\setcounter{totalnumber}{8}
-\setcounter{dbltopnumber}{4}
-\def\topfraction{.9}
-\def\bottomfraction{.9}
-\def\textfraction{.1}
-\def\dbltopfraction{.9}
-\def\floatpagefraction{.9}
-\def\dblfloatpagefraction{.9}
-
-\newcounter{figure}
-\newcounter{table}
-\def\thefigure{\@arabic\c@figure}
-\def\thetable{\@arabic\c@table}
-\def\fps@figure{tbp}
-\def\fps@table{tbp}
-\def\ftype@figure{1}
-\def\ftype@table{2}
-\def\fnum@figure{\fname@figure\thefigure}
-\def\fnum@table{\fname@table\thetable}
-\ifDS@english
-\def\fname@figure{Fig.\,}					% 2.06(1)
-\def\fname@Figure{Figure~}
-\def\fname@table{Table~}
-\def\fname@figures{Figs.\,}					% 2.12(8)>>
-\def\fname@Figures{Figures~}
-\def\fname@tables{Tables~}					% 2.12(8)<<
-\else
-\def\fname@figure{\ipsj@j@fig\fref@nobreak}		% 1.06(1), 2.12(1b)
-\let\fname@Figure\fname@figure
-\def\fname@table{\ipsj@j@tab\fref@nobreak}		% 1.06(1), 2.12(1b)
-\let\fname@figures\fname@figure					% 2.12(8)>>
-\let\fname@Figures\fname@figure
-\let\fname@tables\fname@table					% 2.12(8)<<
-\fi
-\def\fnum@efigure{Fig.\,\thefigure}				% 2.06(1)
-\def\fnum@etable{Table~\thetable}
-
-% 1.06(3) >>
-\def\figure{\let\cap@afterskip\relax \let\flt@fontsize\relax \@float{figure}}
-\def\endfigure{\end@float}
-\@namedef{figure*}{\let\cap@afterskip\relax \let\flt@fontsize\relax
-	\@dblfloat{figure}}
-\@namedef{endfigure*}{\end@dblfloat}
-
-%% Default font for table env. is \footnotesize (H.N.)
-\def\table{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
-	\@float{table}}
-\def\endtable{\end@float}
-\@namedef{table*}{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
-	\@dblfloat{table}}					% 2.01(2)
-\@namedef{endtable*}{\end@dblfloat}
-% 1.06(3) <<
-
-\let\latex@float\@float
-\let\latex@dbflt\@dbflt
-\def\@float{\cap@linewidth\hsize \cap@hsize\hsize \latex@float}
-\def\@dbflt{\cap@linewidth.8\textwidth \cap@hsize.667\textwidth \latex@dbflt}
-\let\latex@xfloat\@xfloat					% 1.06(3)
-\def\@xfloat#1[#2]{\latex@xfloat#1[#2]\flt@fontsize}
-								% 1.06(3)
-\def\end@float{\flt@endfloat
-	\ifdim\bib@adjustheight=-\maxdimen\else
-		\advance\bib@adjustheight\@tempdima
-		\global\advance\bib@adjustheight\baselineskip \fi
-	\ifnum\@floatpenalty <\z@
-		\@nameuse{@largefloatcheck}%			% 2.00(2)
-		\@cons\@currlist\@currbox
-	\ifdim \ht\@currbox >\textheight 
-		\ht\@currbox\textheight \fi
-	\ifnum\@floatpenalty < -\@Mii 
-        	\penalty -\@Miv 
-		\@tempdima\prevdepth \vbox{} \prevdepth\@tempdima
-		\penalty\@floatpenalty
-	\else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@esphack
-	\fi\fi}
-\def\end@dblfloat{\if@twocolumn \flt@endfloat
-	\ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
-	\ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi}
-\def\flt@endfloat{\par \boxmaxdepth\dp\strutbox			% 2.12(7c)
-	\global\@minipagefalse \@nameuse{outer@nobreak}\egroup	% 2.00(2)
-	\@nameuse{color@endbox}\@normalsize			% 2.00(2)
-	\@tempdima\ht\@currbox \advance\@tempdima\dp\@currbox
-	\divide\@tempdima\baselineskip \@tempcnta\@tempdima
-	\advance\@tempcnta\@ne \@tempdima\@tempcnta\baselineskip
-	\global\setbox\@currbox\vbox to\@tempdima{\box\@currbox\vfil}}
-								% 2.10(1)
-% 2.12(7a,b)>>
-\let\ipsj@cflb\@cflb
-\let\ipsj@comflelt\@comflelt
-\def\@cflb{\let\ipsj@botfigrule\botfigrule \let\botfigrule\vfil 
-	\let\@comflelt\ipsj@comfleltbot \ipsj@cflb
-	\let\@comflelt\ipsj@comflelt \let\botfigrule\ipsj@botfigrule}
-\def\ipsj@comfleltbot#1{%
-	\setbox#1\vbox to\ht#1{\vfil\unvbox#1\unskip}\ipsj@comflelt{#1}}
-% 2.12(7a,b)<<
-
-\def\cap@beforeskip{\nointerlineskip\vskip5pt}
-\def\cap@afterskip{\nointerlineskip\vskip5pt}
-\long\def\@caption#1[#2]#3{\par\begingroup
-	\fs@caption \cap@beforeskip
-	\@makecaption{{\bf \csname fnum@#1\endcsname}}{\ignorespaces#3}\par
-	\ifDS@english \cap@afterskip \fi
-	\endgroup}
-\def\ecaption{\@dblarg{\@ecaption\@captype}}
-\long\def\@ecaption#1[#2]#3{\par
-	\begingroup \fs@caption
-	\@makecaption{\csname fnum@e#1\endcsname}{\ignorespaces #3}\par
-	\cap@afterskip
-	\endgroup}
-
-\newif\ifcap@sw
-\newdimen\cap@linewidth
-\newdimen\cap@hsize
-\newcount\cap@prevgraf
-\newbox\cap@box
-\let\latex@label\label
-\long\def\@makecaption#1#2{\begingroup \gdef\cap@label{}\let\label\@gobble
-	\setbox0\hbox{#1\hskip\jspaceskip}
-	\advance\cap@linewidth-\wd0 \advance\cap@hsize-\wd0
-	\cap@makepar\cap@linewidth{#2}{\def\label##1{{%		    %1.03(1)
-		\def\protect{\noexpand\protect\noexpand}	    %1.03(1)
-		\xdef\cap@label{\cap@label\protect\label{##1}}}}}   %1.03(1)
-	\cap@swtrue
-	\ifnum\cap@prevgraf=\@ne
-		\setbox1\vbox{\unvcopy1\cap@getbox1
-			\ifhbox1 \global\setbox\cap@box\hbox{\unhbox1}
-			\ifdim\wd\cap@box>\cap@linewidth\else
-				\global\cap@swfalse \fi\fi}
-		\ifcap@sw\else
-			\cap@put{\vtop{\box\cap@box\hbox{}}}
-		\fi\fi
-	\ifcap@sw \cap@makepar\cap@hsize{#2}\relax
-	\ifnum\cap@prevgraf=\tw@
-		\setbox1\vbox{\unvcopy1\cap@getbox2\cap@getbox3
-			\ifhbox2\ifhbox3
-				\setbox2\hbox{\unhbox2}\setbox3\hbox{\unhbox3}
-				\ifdim\wd2>\cap@hsize\else
-				\ifdim\wd3>\cap@hsize\else
-				\global\cap@swfalse
-				\global\setbox\cap@box\vtop{\box3\box2\hbox{}}
-				\fi\fi\fi\fi}\fi
-	\ifcap@sw \setbox1\vtop{\hsize\cap@hsize
-		\@parboxrestore #2\par\hbox{}}\cap@put{\box1}
-	\else\cap@put{\box\cap@box}\fi
-	\fi
-	\endgroup \cap@label}
-\long\def\cap@makepar#1#2#3{\setbox1\vbox{\hsize#1\@parboxrestore
-	\rightskip\@flushglue \hfuzz\maxdimen
-	\exhyphenpenalty\z@ \finalhyphendemerits\z@
-	\let\@@par\cap@par \let\par\cap@par \global\cap@prevgraf\z@
-	#3#2\cap@par}}
-\let\cap@@par\@@par
-\def\cap@par{\cap@@par\global\advance\cap@prevgraf\prevgraf \prevgraf\z@}
-\def\cap@put#1{\hbox to\hsize{\hss\box0#1\hss}
-	\vskip-\baselineskip\prevdepth\z@}
-\def\cap@getbox#1{\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
-	\unskip\unkern\unpenalty\advance\@tempcnta\m@ne}\setbox#1\lastbox}
-
-\def\figref{\fref@ref\fname@figure}
-\def\Figref{\fref@ref\fname@Figure}
-\def\tabref{\fref@ref\fname@table}
-\let\Tabref\tabref
-\def\fref@ref#1{\@ifstar{\fref@sref{#1}}{\fref@iref\bf{#1}}}
-\def\fref@iref#1#2#3{{\@ifundefined{fref@r@#3}%
-	{#1#2\fref@doref{#3}\global\@namedef{fref@r@#3}{}}{#2\fref@doref{#3}}}}
-\def\fref@sref#1#2{#1\fref@doref{#2}}
-\def\fref@doref#1{{\let\null\relax\ref{#1}}}			% 1.06(2)
-\def\fref@nobreak{\nobreak\ifASCII\else\hskip\@@jasciikanjiskip\fi}
-								% 1.06(1)
-\def\figsref{\fref@refs\fname@figures}				% 2.12(8)>>
-\def\Figsref{\fref@refs\fname@Figures}
-\def\tabsref{\fref@refs\fname@tables}
-\let\Tabsref\tabsref
-\def\fref@refs#1{\@ifstar{\fref@irefs\relax{#1}}{\fref@irefs\bf{#1}}}
-\def\fref@irefs#1#2#3{\def\fref@list{#3}\@tempswafalse \@tempcnta\z@
-	\@for\fref@elem:=\fref@list\do{%
-		\@ifundefined{fref@r@\fref@elem}{\@tempswatrue}{}%
-		\advance\@tempcnta\@ne}%
-	\ifx#1\relax \@tempswafalse\fi
-	\ifDS@english {\if@tempswa #1\fi #2}\let\fref@temp\relax
-	\else \def\fref@temp{#2}\fi
-	\@for\fref@elem:=\fref@list\do{%
-		\if@tempswa \fref@iref{#1}{\fref@temp}{\fref@elem}%
-		\else \fref@temp\fref@doref{\fref@elem}\fi
-		\advance\@tempcnta\m@ne
-		\ifnum\@tempcnta=\@ne \fref@and
-		\else\ifnum\@tempcnta>\@ne \fref@comma \fi\fi}}
-\ifDS@english
-\def\fref@and{ and~}
-\def\fref@comma{, }
-\else
-\def\fref@and{\ipsj@j@comma}
-\let\fref@comma\fref@and
-\fi
-
-\ifDS@printer
-\def\figures{{\bf\fname@figures}}
-\def\Figures{{\bf\fname@Figures}}
-\def\tables{{\bf\fname@tables}}
-\let\Tables\tables
-\def\Ref{\fref@iref\bf\relax}
-\fi								% 2.12(8)<<
-
-\def\fig@extraspace{3mm}					%1.04(4)
-\def\figspace#1{\vskip#1\vskip\fig@extraspace}			%1.04(4)
-
-%%%%%% Footnote %%%%%%
-
-%% The following codes are from pfnote.sty, by H. Nakashima of Kyoto Univ.,
-%% to reset footnote counter at the begining of every page. (H.N.)
-
-% 1.04(2c)>>
-\def\footnote{\@ifnextchar[%]
-	{\@xfootnote}{{\PF@adjustfnote \stepcounter{\@mpfn}%
-		\def\protect{\noexpand\protect\noexpand}%
-		\xdef\@thefnmark{\thempfn}}\@footnotemark\@footnotetext}}
-\def\footnotemark{\@ifnextchar[%]
-	{\@xfootnotemark}{{\PF@adjustfnote \stepcounter{footnote}%
-		\def\protect{\noexpand\protect\noexpand}%
-		\xdef\@thefnmark{\thefootnote}}\@footnotemark}}
-% 1.04(2c)<<
-
-\newcount\PF@fnotectr\global\PF@fnotectr=\z@
-\newcount\PF@page\global\PF@page=-\@M
-\def\PF@thepage{\number\c@page}
-\def\PF@adjustfnote{\global\advance\PF@fnotectr\@ne
-	\expandafter\ifx\csname PF@fn\number\PF@fnotectr\endcsname\relax
-		\global\c@footnote\z@\else
-	\expandafter\@tempcnta\csname PF@fn\number\PF@fnotectr\endcsname\relax
-	\ifnum\@tempcnta=\PF@page\else
-		\global\PF@page\@tempcnta \global\c@footnote\z@ \fi\fi
-	\@tempcnta\c@footnote \multiply\@tempcnta\@M
-	\advance\@tempcnta\PF@fnotectr
-	\if@filesw{\let\PF@thepage\relax
-		\xdef\@gtempa{\write\@auxout{\string\PF@fnpage
-		{\number\@tempcnta}{\PF@thepage}}}}%
-		\@gtempa\fi}
-% 1.04(2a)<<
-
-% 1.04(2a)>>
-\def\PF@fnpage#1#2{\@tempcnta#1\relax \@tempcntb\@tempcnta \divide\@tempcnta\@M
-	\expandafter\xdef\csname PF@fnpage#2\endcsname{\number\@tempcnta}
-	\multiply\@tempcnta\@M \advance\@tempcntb-\@tempcnta	
-	\global\@namedef{PF@fn\number\@tempcntb}{#2}}
-% 1.04(2a)<<
-%% End of quote from pfnote.sty. (H.N.)
-
-\long\def\@makefntext#1{\leftskip20\@Q
-	\noindent\llap{\@makefnmarkforfn\hskip-\scriptspace\hskip5\@Q}#1}
-								% 1.04(2e)
-\def\@makefnmarkstar{$\@thefnmark$}				% 2.12(3)
-\def\@makefnmarkdagger{$\@thefnmark$}
-\def\@makefnmarkast{$\@thefnmark$}				% 2.12(3)
-\let\@makefnmarkforfn\@makefnmarkstar
-
-\def\@makefnmark{\smash{$^{\@thefnmark}$}}			% 2.12(3)
-								% 1.04(2d)
-						% smashed to make it
-						% zero height
-
-\def\thefootnote{\ifnum\c@footnote>0\relax{\star}\number\c@footnote\fi}
-								% 2.12(3)
-
-%%%%%% Citation %%%%%%
-
-%% The following codes for \cite are from overcite.sty by D. Arseneau, but
-%% modified for Trans. IPSJ (H.N.)
-%     O V E R C I T E . S T Y
-%
-%     version 3.2  (Mar 1993)
-%
-%     Compressed, sorted lists of superscript numerical citations.
-%     see also CITE.STY and DRFTCITE.STY
-%
-%     Copyright (C) 1989-1993 by Donald Arseneau
-%     These macros may be freely transmitted, reproduced, or modified for
-%     non-commercial purposes provided that this notice is left intact.
-%
-\def\cite{\protect\@p@cite}
-\def\@p@cite{\let\@citeY\@citey \@p@@cite}
-\def\Cite{\protect\@p@Cite}
-\def\@p@Cite{\let\@citeY\@Citey \@p@@cite}
-\def\@p@@cite{\@ifnextchar[%]
-		          {\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
-\def\@citex[#1]#2{\@citeY{\@p@citen{#2}}\if@tempswa\space[#1]\fi}
-\def\@citey#1{\leavevmode\unskip\kern\z@$\let\@cite@tiestyle\ipsj@j@citescript
-%     								% 2.06(2)
-								% 2.12(4)
-	\def\@cite@punct{,}\m@th^{\hbox{\scriptsize#1}}$\spacefactor\@m}
-\def\@Citey#1{\let\@cite@tiestyle\ipsj@j@citetext		% 2.12(4)
-								% 1.04(1)>>
-	\ifDS@english \def\@cite@punct{,\space\penalty\@highpenalty}
-	\else\def\@cite@punct{\ipsj@j@comma}\fi#1\spacefactor\@m}
-								% 1.04(1)<<
-								% 2.12(1b)
-\def\@p@citen#1{%
-	\edef\@tempa{\@ignspaftercomma,#1, \@end, }%
-	\edef\@tempa{\expandafter\@ignendcommas\@tempa\@end}%
-	\if@filesw \immediate\write\@auxout{\string\citation{\@tempa}}\fi
-	\@tempcntb\m@ne \let\@h@ld\relax \let\@citea\@empty
-	\let\@celt\relax \def\@cite@list{}%			% 2.06(3)
-	\@for\@citeb:=\@tempa\do{\@make@cite@list}%
-	\def\protect{\noexpand\protect\noexpand}%
-	\@tempcnta\m@ne \let\@celt\@compress@cite \@cite@list
-	\let\protect\relax \@h@ld}
-\def\@ignspaftercomma#1, {\ifx\@end#1\@empty\else
-	#1,\expandafter\@ignspaftercomma\fi}
-\def\@ignendcommas,#1,\@end{#1}
-
-%(
-\let\@cite@rp)
-\chardef\@cite@escape`\\
-\def\@make@cite@list{%
-    \expandafter\let\expandafter\@B@citeB\csname b@\@citeb\endcsname
-    \ifx\@B@citeB\relax
-	\@citea {\bf ?}\@cite@rp \let\@citea\@cite@punct
-	\@latex@warning{Citation `\@citeb' on page \thepage\space undefined}%
-								% 2.00(3)
-	\global\@namedef{b@\@citeb}{{\bf ?}}%
-    \else
-	\ifcat \@cite@escape\ifnum\z@<0\@B@citeB \@cite@escape\else A\fi
-	    \@tempcnta\@B@citeB \relax
-	    \ifnum \@tempcnta>\@tempcntb
-		\edef\@cite@list{\@cite@list \@celt{\@B@citeB}}%
-		\@tempcntb\@tempcnta
-	     \else
-		\edef\@cite@list{\expandafter\@sort@celt\@cite@list\@gobble @}%
-		\fi
-	\else \@citea \@B@citeB \@cite@rp \let\@citea\@cite@punct
-    \fi\fi}
-
-\def\@sort@celt#1#2{\ifx \@celt #1% parameters are \@celt {num}
-	\ifnum #2<\@tempcnta % number goes later in list
-	    \@celt{#2}\expandafter\expandafter\expandafter\@sort@celt
-	\else \@celt{\number\@tempcnta}\@celt{#2}\fi\fi}
-
-\def\@compress@cite#1{\advance\@tempcnta\@ne
-	\ifnum #1=\@tempcnta
-		\ifx\@h@ld\relax \edef\@h@ld{\@citea #1\@cite@rp}%
-		\else \edef\@h@ld{\@cite@tie{\protect\@cite@tiestyle}%
-								% 2.12(4)
-			\penalty\@highpenalty #1\@cite@rp}\fi
-	\else \@h@ld \@citea #1\@cite@rp
-		\let\@h@ld\relax
-	\fi \@tempcnta#1\relax \let\@citea\@cite@punct}
-
-%% End of quote from overcite.sty. (H.N.)
-
-\def\multicite{\protect\@p@multicite}
-\def\@p@multicite#1#2{\@citey{\@p@citen{#1}%
-	\@cite@tie\ipsj@j@citescript \@p@citen{#2}}}		% 2.12(4)
-\def\multiCite{\protect\@p@multiCite}
-\def\@p@multiCite#1#2{\@Citey{\@p@citen{#1}\@cite@tie\relax	% 2.12(4)
-	\penalty\@highpenalty \@p@citen{#2}}}
-
-
-%%%%%% Box Height Adjustment and Displayed Math %%%%%%
-
-\newbox\adj@boxa \newbox\adj@boxb
-\newdimen\adj@height
-\@tempdima\baselineskip \advance\@tempdima-\topskip
-\edef\adj@minaboveclearance{\the\@tempdima}
-\@tempdima\baselineskip \advance\@tempdima-1ex
-\edef\adj@maxaboveclearance{\the\@tempdima}
-
-\def\adj@setbhd#1{\setbox0\hbox{#1}				% 2.12(1c)>>
-	\@tempdima\baselineskip \advance\@tempdima-\ht0 \advance\@tempdima\dp0
-	\edef\adj@bhd{\the\@tempdima}}				% 2.12(1c)<<
-
-% 2.01(1) >>
-\def\adjustvboxheight{\ifinner \let\@tempa\relax
-	\let\endadjustvboxheight\relax \let\@endadjustvboxheight\relax
-	\else \let\@tempa\@adjustvboxheight \fi \@tempa}
-\def\@adjustvboxheight{\par\penalty\z@
-	\global\setbox\adj@boxa\vbox\bgroup\relax		% 1.01(3)
-	\let\@footnotetext\@mpfootnotetext			% 2.02(1)
-%								% 2.05(1)
-	\hsize\columnwidth}
-% 2.01(1) <<
-\def\endadjustvboxheight{\adj@closebox \adj@putbox
-	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
-%								% 2.02(1)
-	\global\@ignoretrue\@endparenv}
-\def\adj@closebox{\egroup \normalsize \boxmaxdepth\@maxdepth	% 1.01(1,3)
-	\setbox\adj@boxa\vbox{\unvbox\adj@boxa}			% 1.01(3)
-	\adj@height\ht\adj@boxa
-	\advance\adj@height\adj@minaboveclearance\relax
-	\@tempdima\adj@height \divide\adj@height\baselineskip
-	\@tempcnta\adj@height \adj@height\@tempcnta\baselineskip
-	\ifdim\adj@height<\@tempdima \advance\adj@height\baselineskip\fi}
-\def\adj@putbox{\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
-	\vspace*{-\baselineskip}\advance\@tempdima-\adj@height
-	\@tempdima-\@tempdima \advance\@tempdima\adj@minaboveclearance\relax
-	\@tempdimb\dp\adj@boxa
-	\ifdim\@tempdima>\adj@maxaboveclearance\relax
-		\advance\@tempdima-\@tempdimb \advance\@tempdima\adj@bhd\relax
-		\divide\@tempdima\tw@
-		\vbox to\adj@height{\vskip\@tempdima \box\adj@boxa \vss}
-	\else	\vbox to\adj@height{\vfil\box\adj@boxa\vskip-\@tempdimb}\fi}
-
-\newcount\adj@deadcycle
-\@namedef{adjustvboxheight*}{\adjustvboxheight}
-\@namedef{endadjustvboxheight*}{\@endadjustvboxheight}
-\def\@endadjustvboxheight{\global\adj@deadcycle10\relax
-	\@iendadjustvboxheight
-	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
-%								% 2.05(2)
-	\global\@ignoretrue\@endparenv}
-\def\@iendadjustvboxheight{\adj@closebox
-	\ifnum\adj@deadcycle<\@ne
-	\ipsj@error{I cannot adjust too tall/deep box}{\@ehd}\fi    % 2.00(3)
-	\global\advance\adj@deadcycle\m@ne
-	\ifdim\pagegoal=\maxdimen
-		\@tempdimb\@colht \advance\@tempdimb-\topskip
-		\advance\@tempdimb\baselineskip
-	\else \@tempdimb\pagegoal
-		\advance\@tempdimb-\pagetotal \advance\@tempdimb-\pagedepth
-		\advance\@tempdimb\prevdepth \fi		% 1.01(4a)
-	\let\next\relax
-	\ifdim\adj@height<\@tempdimb \adj@putbox \else
-	\ifdim\adj@height=\@tempdimb \adj@putbox \else
-	\divide\@tempdimb\baselineskip \@tempcnta\@tempdimb	% 1.01(4b)>>
-	\@tempdimb\@tempcnta\baselineskip
-	\advance\@tempdimb-\adj@minaboveclearance\relax		% 1.01(4b)<<
-	\setbox\adj@boxa\vbox{\allowbreak\unvbox\adj@boxa}
-	\vbadness\@M \splittopskip\z@ \splitmaxdepth\@maxdepth	%1.01(1)
-	\setbox\@tempboxa\vsplit\adj@boxa to\@tempdimb
-	\setbox\adj@boxb\copy\adj@boxa
-	\setbox\@tempboxa\vbox{\unvbox\@tempboxa}
-	\@tempdimb\ht\@tempboxa \advance\@tempdimb\dp\@tempboxa
-	\ifdim\@tempdimb>\z@
-		\setbox\adj@boxa\vbox\bgroup\unvbox\@tempboxa
-		\adj@closebox \adj@putbox \newpage
-	\else \newpage \fi
-	\setbox\adj@boxa\vbox\bgroup\unvbox\adj@boxb
-	\let\next\@iendadjustvboxheight \fi\fi \next}
-
-\def\adj@eqindent{2\@mojihaba}
-\def\[{\adjustvboxheight\advance\@totalleftmargin\adj@eqindent\relax
-	\hbox to\hsize\bgroup\hskip\@totalleftmargin$\displaystyle}
-\def\]{$\hfill\egroup\endadjustvboxheight\@doendpe\ignorespaces} % 2.03(1)
-\def\equation{\refstepcounter{equation}\[}
-\def\endequation{\hfill\@eqnnum$\egroup\endadjustvboxheight}
-\def\theequation{\arabic{equation}}
-\def\@eqnnum{{\rm (\theequation)\hskip\@mojihaba}} 
-
-\def\adj@eqnlineskip{3pt}
-\def\adj@eqnlineskiplimit{2pt}
-\def\eqnarray{\futurelet\@tempa\adj@eqnarray}
-\def\adj@eqnarray{\ifx\@tempa[%]
-	\let\next\adj@ieqnarray\else\let\next\adj@xeqnarray\fi\next}
-\def\adj@ieqnarray[#1]{\@ifundefined{adj@xeqnarray#1}%
-	{\ipsj@warning{Unknown eqnarray option `#1'}\adj@xeqnarray}% 2.00(3)
-	{\@nameuse{adj@xeqnarray#1}}}
-\def\adj@xeqnarray{\adjustvboxheight
-	\advance\@totalleftmargin\adj@eqindent\relax
-	\stepcounter{equation}\let\@currentlabel=\theequation
-	\global\@eqnswtrue
-	\global\@eqcnt\z@\tabskip\z@\let\\=\@eqncr
-	\lineskip\adj@eqnlineskip \lineskiplimit\adj@eqnlineskiplimit \jot\z@
-	\halign to \hsize\bgroup\@eqnsel\hskip\@totalleftmargin
-		\hfil$\displaystyle{##}$&\global\@eqcnt\@ne	% 1.01(2)
-		\hfil$\displaystyle{}\mathrel{##}{}$\hfil
-		&\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
-		\tabskip\@centering&\llap{##}\tabskip\z@\cr}
-\def\adj@xeqnarrays{\let\endadjustvboxheight\@endadjustvboxheight
-	\adj@xeqnarray}
-\@namedef{adj@xeqnarrays!}{\par\let\adjustvboxheight\relax
-	\let\endadjustvboxheight\relax \adj@xeqnarray}
-\def\endeqnarray{\@@eqncr \egroup \global\advance\c@equation\m@ne
-	\endadjustvboxheight}
-
-
-%%%%%% Miscellaneous %%%%%%
-
-%% \doublerulesep is 1pt (H.N.)
-\arraycolsep5pt \tabcolsep6pt \arrayrulewidth.4pt \doublerulesep1pt 
-\tabbingsep.5\@mojihaba
-
-\skip\@mpfootins\skip\footins
-\fboxsep3pt \fboxrule.4pt 
-
-%% We simply allow (not encourage) club and widow lines. (H.N.)
-\clubpenalty\z@ \widowpenalty\z@ \displaywidowpenalty\z@
-
-% The following redefinition influences \linebreak etc.
-\def\sloppy{\tolerance9999\hbadness9999\hfuzz.5\p@ \vfuzz.5\p@}
-
-%% For heading of TBIO papers
-\ifDS@TBIO							% 2.11(1)>>
-\def\TBIOpapercategory#1{\def\ipsj@TBIO@pcat{#1}\ignorespaces}
-\def\ipsj@TBIO@pcat{original}
-\def\ipsj@TBIO@pcat@original{Original Paper}
-\def\ipsj@TBIO@pcat@survey{Survey Paper}
-\def\ipsj@TBIO@pcat@database{Database/Software Paper}
-\def\ipsj@TBIO@pcatref{\@ifundefined{ipsj@TBIO@pcat@\ipsj@TBIO@pcat}%
-    {\ipsj@warning{TBIO paper category \ipsj@TBIO@pcat\space is undefined.}}%
-    \relax
-  \@nameuse{ipsj@TBIO@pcat@\ipsj@TBIO@pcat}}
-\fi								% 2.11(1)<<
-
-
-% 2.12(1a)>>
-\let\ipsj@j@citescript\scriptsize				% 2.12(4)>>
-\let\ipsj@j@citetext\normalsize
-\def\@cite@tie#1{\hbox{#1--}}					% 2.12(4)<<
-\def\bib@refname{References}
-\adj@setbhd{A}
-
-\ifipsj@nonjp \let\next\endinput \else \let\next\relax \fi
-\next
-
-\def\ipsj@j@a{あ}
-\def\ipsj@j@app{付録}
-\def\ipsj@j@ack{謝辞}
-\def\ipsj@j@bib{参考文献}
-\def\ipsj@j@fig{図}
-\def\ipsj@j@tab{表}
-\def\ipsj@j@comma{,}
-\def\ipsj@j@technote{テクニカルノート}
-\def\ipsj@j@invited{招待論文}
-\def\ipsj@j@sigrec{研究会推薦論文}
-\def\ipsj@j@talkabst{発表概要}
-\def\ipsj@j@presently{現在,}
-\def\ipsj@j@jipsj{情報処理学会論文誌}
-\def\ipsj@j@regpaper{論文}
-\def\ipsj@j@contactto{連絡先}
-\def\ipsj@j@abstract{概要}
-\def\ipsj@j@colon{:}
-\def\ipsj@j@year{年}
-\def\ipsj@j@month{月}
-\def\ipsj@j@day{日}
-\def\ipsj@j@lp{(}
-\def\ipsj@j@rp{)}
-\def\ipsj@j@edinch{担当編集委員}
-\def\ipsj@j@rerec{再受付}
-\def\ipsj@j@received{受付}
-\def\ipsj@j@accepted{採録}
-\def\ipsj@j@presented{発表}
-\def\ipsj@j@member{正会員}
-\def\ipsj@j@stmember{学生会員}
-\def\ipsj@j@nomember{非会員}
-
-\ifDS@english\else \ifDS@draft\else
-\sec@setskips{\ipsj@j@a}
-\fi\fi
-
-\expandafter\let\csname c@巻数\endcsname\c@volume
-\expandafter\let\csname c@号数\endcsname\c@number
-\expandafter\let\csname c@月数\endcsname\c@number
-\expandafter\let\csname c@年数\endcsname\c@year
-
-\def\ipsj@sig@PRO@j{プログラミング}
-\def\ipsj@sig@TOM@j{数理モデル化と応用}
-\def\ipsj@sig@TOD@j{データベース}
-\def\ipsj@sig@HPS@j{ハイパフォーマンスコンピューティングシステム}
-\def\ipsj@sig@CVIM@j{コンピュータビジョンとイメージメディア}
-\def\ipsj@sig@ACS@j{コンピューティングシステム}			% 2.09(2)
-
-\def\ra@nengo{平成}	%% Change here when ...
-\let\受付\received
-\let\採録\accepted
-\let\発表\presented						% 2.07(7)
-\let\再受付\rereceived
-
-\def\々{\hskip\jintercharskip\hbox to\jspaceskip{\hfil 々\hfil}%% 2.12(5)
-	\hskip\jintercharskip}
-
-\ifDS@english\else \ifDS@draft\else
-{\fs@sec \@tempdima7\jspaceskip
-\xdef\bib@refname{\hbox to\the\@tempdima{\jintercharskip\fill\ipsj@j@bib}}}
-\adj@setbhd\ipsj@j@a
-\fi\fi
-
-\def\ipsj@j@colon@command{{\nobreak				% 2.12(2)>>
-	\hbox to.7\jspaceskip{:\hss}\allowbreak
-	\@tempdima.3\jspaceskip \hskip\@tempdima minus\@tempdima
-	\allowbreak
-	\hskip\z@ minus-\@tempdima}\ignorespaces}
-\def\ipsj@defcolonforbib{\let\:\ipsj@j@colon@command}
-\ifDS@printer \ipsj@defcolonforbib \fi				% 2.12(2)<<
-
-
-%%%%%% Kinsoku Parameters %%%%%%
-
-% 1.04(3)>>
-\ifASCII
-\postbreakpenalty`\`=\@M
-\prebreakpenalty`'=\@M
-\prebreakpenalty`)=\@M
-\postbreakpenalty`(=\@M
-\prebreakpenalty`]=\@M
-\postbreakpenalty`[=\@M
-\prebreakpenalty`\}=\@M
-\postbreakpenalty`\{=\@M
-
-\prebreakpenalty`・=\@M
-\prebreakpenalty`:=\@M
-\prebreakpenalty`;=\@M
-\prebreakpenalty`?=\@M
-\prebreakpenalty`!=\@M
-
-\prebreakpenalty\jis"212D=\@M		% ´
-\postbreakpenalty\jis"212E=\@M		% `
-\postbreakpenalty\jis"2146=\@M		% ‘
-\prebreakpenalty\jis"2147=\@M		% ’
-\postbreakpenalty\jis"2148=\@M		% “
-\prebreakpenalty\jis"2149=\@M		% ”
-
-\prebreakpenalty`)=\@M
-\postbreakpenalty`(=\@M
-\prebreakpenalty`}=\@M
-\postbreakpenalty`{=\@M
-\prebreakpenalty`]=\@M
-\postbreakpenalty`[=\@M
-\postbreakpenalty`‘=\@M
-\prebreakpenalty`’=\@M
-
-\postbreakpenalty\jis"214C=\@M		%〔
-\prebreakpenalty\jis"214D=\@M		% 〕
-\postbreakpenalty\jis"2152=\@M		% 〈
-\prebreakpenalty\jis"2153=\@M		% 〉
-\postbreakpenalty\jis"2154=\@M		% 《
-\prebreakpenalty\jis"2155=\@M		% 》
-\postbreakpenalty\jis"2156=\@M		% 「
-\prebreakpenalty\jis"2157=\@M		% 」
-\postbreakpenalty\jis"2158=\@M		% 『
-\prebreakpenalty\jis"2159=\@M		% 』
-\postbreakpenalty\jis"215A=\@M		% 【
-\prebreakpenalty\jis"215B=\@M		% 】
-
-\prebreakpenalty`ー=\@M						% 2.12(6)
-\prebreakpenalty`〜=\@M						% 2.12(6)
-
-\prebreakpenalty`ぁ=\@M
-\prebreakpenalty`ぃ=\@M
-\prebreakpenalty`ぅ=\@M
-\prebreakpenalty`ぇ=\@M
-\prebreakpenalty`ぉ=\@M
-\prebreakpenalty`っ=\@M
-\prebreakpenalty`ゃ=\@M
-\prebreakpenalty`ゅ=\@M
-\prebreakpenalty`ょ=\@M
-\prebreakpenalty\jis"246E=\@M		% ゎ
-\prebreakpenalty`ァ=\@M
-\prebreakpenalty`ィ=\@M
-\prebreakpenalty`ゥ=\@M
-\prebreakpenalty`ェ=\@M
-\prebreakpenalty`ォ=\@M
-\prebreakpenalty`ッ=\@M
-\prebreakpenalty`ャ=\@M
-\prebreakpenalty`ュ=\@M
-\prebreakpenalty`ョ=\@M
-\prebreakpenalty\jis"256E=\@M		% ヮ
-\prebreakpenalty\jis"2575=\@M		% ヵ
-\prebreakpenalty\jis"2576=\@M		% ヶ
-
-\fi
-% 1.04(3)<<
-% 2.12(1a)<<
--- a/ipsjdrafts.sty	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,392 +0,0 @@
-% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
-%                            The Editorial Board of the IPSJ Journal
-%
-% ipsjdrafts.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
-% (revision history deleted)
-% ipsjdrafts.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
-
-%%%%%% Fonts %%%%%%
-% All font loading are removed.
-
-\ifipsj@nonjp\else						% 2.12(1a)
-\ifASCII
-\let\latex@setsize\@setsize
-\def\@setsize#1#2#3#4{\latex@setsize{#1}{#2}{#3}{#4}\jspaceskip1zw}
-
-\newcount\jfsize
-\let\setjglues\relax
-\let\jintercharskip\kanjiskip
-\let\jasciikanjiskip\xkanjiskip
-\let\jmathkanjiskip\xkanjiskip
-\newdimen\jspaceskip
-
-\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}}
-\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}}
-\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}}
-\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}}
-
-\def\@asciiwarning#1{\ipsj@warning{\string#1\space		% 2.00(1)
-	is not supported in ASCII version}}
-
-\if@LaTeX@eN							% 2.00(2)>>
-\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
-\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
-\fi								% 2.00(2)<<
-
-\def\dg{\gt}							% 1.06(1)
-\def\dm{\mc}							% 1.06(1)
-
-\else	% This is necessary even in 2e.
-\ifx\sixdm\undefined \jfont\sixdm=dm6 \fi			% 1.01(1)
-								% 1.06(2)
-\fi \fi
-
-\if@LaTeX@eN							% 2.00(2)>>
-\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\fi								% 2.00(2)<<
-
-%%%%%% Basic Font Size Macros %%%%%%
-% Nothing at all.
-
-
-%%%%%% Font Size Macros %%%%%%
-
-\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip
-	\@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}%
-		{\@setsize{#1}{#2}{#3}{#4}}}
-
-% \baselineskip's are almost 1.25 times those defined in NTT jart12.
-
-\def\@normalsize{\@setsize\normalsize{20pt}\xiipt\@xiipt}
-\def\small{\fs@setsize\small{17pt}\xipt\@xipt}
-\def\footnotesize{\fs@setsize\footnotesize{14pt}\xpt\@xpt}
-\def\scriptsize{\@setsize\scriptsize{11.875pt}\viiipt\@viiipt}
-\def\tiny{\@setsize\tiny{8.75pt}\vipt\@vipt}
-\def\large{\@setsize\large{20pt}\xivpt\@xivpt}			% 1.06(3)
-\def\Large{\@setsize\Large{25pt}\xviipt\@xviipt}
-\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
-\let\huge\LARGE
-\let\Huge\LARGE
-
-\if@LaTeX@e							% 2.00(3)>>
-\let\normalsize\@normalsize
-\fi								% 2.00(3)<<
-
-\let\fs@sec\large
-\let\fs@subsec\normalsize
-\let\fs@bibliography\normalsize
-\let\fs@caption\normalsize
-\let\fs@table\normalsize
-\let\fs@footnote\footnotesize
-{\tiny \xdef\fn@fontv{\ifipsj@nonjp \the\font \else		% 2.12(1a)
-	\ifASCII \the\jfont \else \sixdm \fi\fi}}
-\let\fn@fontvi\fn@fontv
-
-\@normalsize 
-
-\ifipsj@nonjp\else						% 2.12(1a)
-\ifASCII\else							% 1.06(2) >>
-\ifx\setjglue\undefined\else					% 2.04(1)
-\def\@tempc{\edef\@tempa{\the\ja}
-	\edef\@tempa{\expandafter\string\@tempa}
-	\expandafter\@tempb\@tempa\@nil
-	\expandafter\defjintercharskip\csname\@tempa\endcsname}
-\let\@tempd\@namedef
-{\catcode`j=12\catcode`a=12\gdef\@tempb#1#2ja\@nil{\@tempd{@tempa}{#2}}}
-\dg\@tempc{0pt}{1.4pt}{0.14pt}
-\dm\@tempc{0pt}{1.4pt}{0.14pt}
-\setjglues
-\fi\fi\fi							% 1.06(2) <<
-
-\@tempdima.55\baselineskip
-\edef\sec@aboveskip{\the\@tempdima}
-\@tempdima.45\baselineskip
-\edef\sec@belowskip{\the\@tempdima}
-
-\ifipsj@nonjp\else						% 2.12(1a)
-\if@LaTeX@e\else						% 2.04(2)
-\let\latex@bf\bf						% 1.06(1)
-\def\bf{\dg\latex@bf}						% 1.06(1)
-\fi\fi								% 2.04(2)
-
-
-%%%%%% Page Layout Parameters %%%%%%
-
-\newdimen\@mojihaba
-\ifipsj@nonjp							% 2.12(1a)>>
-	\@mojihaba11.54659pt
-	\let\jspaceskip\@mojihaba
-\else
-	\@mojihaba\jspaceskip
-\fi								% 2.12(1a)<<
-
-% No heads
-\headheight\z@
-\headsep\z@
-
-\setbox0\hbox{$\displaystyle X^X$}
-\topskip\ht0
-
-% 1 page = 32 lines
-\textheight31\baselineskip \advance\textheight\topskip \advance\textheight100sp
-
-% \topmargin is (A4height-\textheight)/2 - 1in
-\topmargin296mm \advance\topmargin-\textheight \divide\topmargin\tw@
-\advance\topmargin-1in
-\ifASCII\if@LaTeX@e\ifipsj@nonjp\else
-	\@@topmargin\topmargin \fi\fi\fi		% 2.00(4),2.12(1a)
-
-\footskip 1.5\baselineskip
-
-% 1 page = 35 Kanji chars
-\ifDS@english							% 1.06(4) >>
-\textwidth404.13048pt
-\else
-\textwidth35\@mojihaba
-\fi								% 1.06(4) <<
-
-% \oddsidemargin is (A4width-\textwidth)/2 - 1in
-\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@
-\advance\oddsidemargin-1in
-
-% As jart12
-\footnotesep10pt
-\skip\footins 10.8pt plus 4pt minus 2pt 
-\def\footnoterule{\kern-3\p@ \hrule width.4\columnwidth \kern2.6\p@}
-
-\floatsep \baselineskip \textfloatsep \baselineskip 
-\intextsep \baselineskip \@maxsep \baselineskip
-\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip
-\@dblmaxsep \baselineskip
-\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil 
-\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil
-
-\parskip\z@ \parindent \@mojihaba
-\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
-\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty
-\@itempenalty -\@lowpenalty 
-
-
-%%%%%% Title and Authors %%%%%%
-%
-% Format of title, author names and abstract.
-%
-%	\leftline{\LARGE <<paper-category>>}
-%	\vfill
-%	\beign{center}\LARGE\bf <Japanese title>\end{center}
-%	\vfill
-%	\begin{center}\LARGE\bf <Engilish title>\end{center}
-%	\vfill\vfill
-%	\newpage
-%	\large <Japanese author names>
-%	\vfill
-%	<<contact info>>
-%	\begin{itemize}\item[]\large <Contact address>\end{itemize}
-%	\vfill\vfill
-%	\newpage
-%	\normalsize <Japanese abstract>
-%	\normalsize <English abstract>
-
-\def\maketitle{\@maketitle}
-
-% default title header
-
-\def\title{\@dblarg{\@xtitle}}
-\def\@xtitle[#1]#2{\gdef\@title{#2}}
-\def\@title{\leavevmode\mkt@warning\title}
-\long\def\author#1{\long\gdef\@author{#1}}
-\def\@author{\mkt@warning\author}
-
-\newbox\@abstractbox
-
-\def\abstract{\global\let\@abstract\relax
-	\global\setbox\@abstractbox\vtop\bgroup}
-\def\endabstract{\par\hbox{}\egroup}
-\def\@abstract{\mkt@warning{abstract env}}
-
-%% We need English title, author name(s) and abstract. (H.N.)
-%% English author names are simply ignored.
-\def\etitle#1{\gdef\@etitle{#1}}
-\def\@etitle{\leavevmode\mkt@warning\etitle}
-\long\def\eauthor#1{}
-
-\newbox\@eabstractbox
-\def\eabstract{\global\let\@eabstract\relax
-	\global\setbox\@eabstractbox\vtop\bgroup}
-\let\endeabstract\endabstract
-\def\@eabstract{\mkt@warning{eabstract env}}
-
-\ifDS@english \let\abstract\eabstract \let\@eabstract\@abstract \fi
-
-% Contact address is no longer required even in draft.
-\def\contact{\long\def\mkt@contact}
-\def\mkt@contact{}						% 2.12(4)
-
-\def\@maketitle{\newpage\thispagestyle{empty}
-	\leftline{\LARGE
-		\ifDS@TBIO \ipsj@TBIO@pcatref			% 2.11(1)
-		\else\ifDS@english \ifDS@technote Technical Note\else
-			Regular Paper\fi
-		\else \ifDS@technote \ipsj@j@technote		% 2.12(1b)
-			       \else \ipsj@j@regpaper\fi\fi\fi}
-	\vfill
-	\begin{center}\LARGE\bf\@title\end{center}
-	\ifDS@english\else 
-		\vfill
-		\begin{center}\LARGE\bf\@etitle\end{center}\fi
-	\@thanks
-	\vfill\vfill
-%								% 2.12(4)>>
-%	\ifDS@anonymous\else					% 2.10(1)>>
-%	    \newpage\thispagestyle{empty}
-%	    \begingroup\large\vspace*{\fill}\rightskip0pt plus1fil
-%	    \parindent\z@\parskip.5\baselineskip\hangindent2em\hangafter\@ne
-%	    \def\par{{\@@par}}
-%	    \mkt@makeauthor
-%	    \par\vfill
-%	    \noindent
-%	    \ifDS@english Contact To:\else \ipsj@j@contactto \fi% 2.12(1b)
-%	    \endgroup
-%	    \begin{itemize}\large\item[]\mkt@contact\end{itemize}
-%	    \vfill\vfill
-%	\fi							% 2.10(1)<<
-%								% 2.12(4)<<
-	\newpage \setcounter{page}{1}\def\thepage{\roman{page}}
-	\ifDS@english\else \@abstract \centerline{\bf \ipsj@j@abstract}
-%								% 2.12(1b)
-		\vskip-\prevdepth\vskip\baselineskip\vskip-\ht\@abstractbox
-		\unvbox\@abstractbox\prevdepth\z@ \fi
-	\centerline{\bf Abstract}
-	\vskip-\prevdepth \vskip\baselineskip\vskip-\ht\@eabstractbox
-	\@eabstract \unvbox\@eabstractbox
-	\newpage \def\thepage{\arabic{page}}\setcounter{page}{1}}
-
-\def\mkt@makeauthor{\let\member\mkt@member \let\nomember\mkt@nomember
-	\let\stmember\mkt@stmember
-	\expandafter\mkt@imakeauthor\@author\and\@nil\and}
-\def\mkt@imakeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax
-	\else #1\par\let\next\mkt@imakeauthor\fi\next}
-
-% Macros to specify author's affiliation easily.
-\ifDS@english
-\def\paffilabel#1#2{\affilabel{#1}{Presently with #2}}
-\else
-\def\paffilabel#1#2{\affilabel{#1}{\ipsj@j@presently #2}}
-\fi
-% Ignore English affiliation even if given.
-\def\affilabel#1#2{\@ifundefined{affi@r@#1}%
-		{\expandafter\xdef\csname affi@r@#1\endcsname
-			{\affi@cuteng#2\\\@nil}}
-		{\ipsj@warning{Affiliation label `#1' multiply defined}}}
-								% 2.00(1)
-\def\affiref#1{\@ifundefined{affi@r@#1}%
-		{\ipsj@warning{%				% 2.00(1)
-			Affiliation reference `#1' undefined}\hbox{(???)}}
-		{\setbox\@tempboxa\hbox{(\csname affi@r@#1\endcsname)}%
-			\@tempdima\wd\@tempboxa \advance\@tempdima2em\relax
-			\ifdim\@tempdima>\hsize
-				\newline\unhbox\@tempboxa
-			\else\ \box\@tempboxa\fi}}
-\def\affi@cuteng#1\\#2\@nil{#1}
-
-% Membership of aurthor is required in draft.
-\ifDS@english
-\def\mkt@member#1{\ \hbox{[Regular Member\##1]}}
-\def\mkt@nomember{\ \hbox{[Non Member]}}
-\def\mkt@stmember#1{\ \hbox{[Student Member\##1]}}
-\else
-\def\mkt@member#1{\ \hbox{[\ipsj@j@member\##1]}}
-\def\mkt@nomember{\ \hbox{[\ipsj@j@nomember]}}
-\def\mkt@stmember#1{\ \hbox{[\ipsj@j@stmember\##1]}}
-\fi
-
-%%%%%% Page Header and Footer %%%%%% 
-
-\mark{{}{}} 
-
-% The following counters are not used, but may appear.
-\let\c@volpage\c@page						% 2.00(5)
-\def\thevolpage{\thepage}					% 2.00(5)
-\newcounter{volpageoffset} % You must set this to appropriate value
-\newcounter{volume}						% 2.12(1b)>>
-\newcounter{number}
-\newcounter{year}						% 2.12(1b)<<
-
-\def\ps@plain{\let\@mkboth\@gobbletwo
-	\def\@oddhead{\@checklines}\let\@evenhead\@oddhead
-	\def\@oddfoot{\rm \hfil\thepage\hfil}\let\@evenfoot\@oddfoot}
-
-\def\transaction#1#2#3{}					% 2.11(2)
-\long\def\copyrightnotice#1{}					% 2.11(2)
-
-% \checklines enables to draw a horizontal rule onto each baselines.
-
-\newif\if@checklines \@checklinesfalse
-\def\checklines{\@checklinestrue}
-\def\@checklines{\if@checklines \rlap{\smash{\vtop{
-	\hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip
-	\hrule\vskip-.4pt
-	\@tempcnta31\relax\@@checklines}}}\hfil\fi}
-\def\@@checklines{\ifnum\@tempcnta>\z@
-	\vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne
-	\let\next\@@checklines\else\let\next\relax\fi\next}
-
-\pagestyle{plain}
-\pagenumbering{arabic}
-
-\ifDS@english\else
-\def\today{\the\year\ipsj@j@year \the\month\ipsj@j@month \the\day\ipsj@j@day}
-								% 2.12(1b)
-\fi
-
-
-%%%%%% Output Routine %%%%%%
-% Nothing at all.
-
-
-%%%%%% Biography %%%%%%
-% Almost nothing.
-
-\def\received#1#2#3{}						% 2.12(1b)>>
-\def\accepted#1#2#3{}
-\def\rereceived#1#2#3{}						% 2.11(2)>>
-% definition of \released is removed				% 2.12(2)
-\def\edInCharge#1{}						% 2.11(2)<<
-%								% 2.12(1b)<<
-
-\def\biography{\let\member\@gobble \let\nomember\@gobble \let\stmember\@gobble
-	\ifDS@english \let\author\@gobble \fi			% 2.12(3)
-	\let\adjust\@gobble \setbox0\vbox\bgroup
-	\tolerance\@M \hbadness\@M \hfuzz\maxdimen}
-\def\endbiography{\egroup\setbox0\hbox{}}
-
-
-%%%%%% Miscellaneous %%%%%%
-
-\raggedbottom
-
-\input{ipsjcommon.sty}
-
-% Redefine \acknowledgment to put it separately.
-\newbox\ack@box
-\let\@acknowledgment\acknowledgment
-
-\def\acknowledgment{\global\setbox\ack@box\vtop\bgroup\@acknowledgment}
-\def\endacknowledgment{\par\egroup}
-
-%								% 2.12(4)>>
-%\let\id@enddocument\enddocument
-%\def\enddocument{\clearpage
-%	\ifDS@anonymous\else \unvbox\ack@box \fi		% 2.10(1)
-%	\id@enddocument}
-%								% 2.12(4)<<
-
-\endinput
--- a/ipsjpapers.cls	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
-%                            The Editorial Board of the IPSJ Journal
-%
-% ipsjpapers.cls 13-Mar-07 by Hiroshi Nakashima (ver 2.12)
-% (revision history deleted)
-% ipsjpapers.cls  1-Apr-96 by Hiroshi Nakashima (ver 2.00)
-
-\ifx\pfmtname\undefined
-\NeedsTeXFormat{LaTeX2e}
-\else
-\NeedsTeXFormat{pLaTeX2e}
-\fi
-
-\ProvidesClass{ipsjpapers}[2007/06/15 ver 2.12]
-\input{ipsjpapers.sty}
-\endinput
--- a/ipsjpapers.sty	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1919 +0,0 @@
-% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
-%                            The Editorial Board of the IPSJ Journal
-%
-% ipsjpapers.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
-% (revision history deleted)
-% ipsjpapers.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
-% ipsjpapers.sty 30-Nov-93 by Hiroshi Nakashima
-% ipsjpapers.sty 3-Feb-93 by Yaski Saito
-% compsoft.sty 22-April-92 by Yaski Saito
-% compsoft.sty 18-July-90 by Hideki Isozaki 
-% j-article.sty 10-Feb-89 from report.sty 16-Mar-88
-
-%%%%%% LaTeX Version %%%%%%
-
-% 2.00(1) >>
-%% \ifASCII is true if ASCII version Japanese TeX, which doesn't have
-%% \jintercharskip (H.N.)
-\newif\ifipsj@nonjp \ipsj@nonjpfalse				% 2.12(1a)
-\newif\ifASCII \ASCIIfalse
-\ifx\jintercharskip\undefined \ASCIItrue
-\ifx\kanjiskip\undefined \ipsj@nonjptrue			% 2.12(1a)
-\fi\fi
-\newif\if@LaTeX@e \@LaTeX@efalse				% 1.06(1)
-\newif\if@LaTeX@eN \@LaTeX@eNfalse				% 2.00(1)
-\def\@tempa{LaTeX2e}						% 1.06(1)
-\ifx\fmtname\@tempa \@LaTeX@etrue				% 1.06(1)
-\ifx\xpt\undefined \@LaTeX@eNtrue \fi\fi			% 2.00(1)
-% 2.00(1) <<
-
-
-
-%%%%%% Document Styles %%%%%%
-
-% 2.00(2) >>
-\newif\ifDS@printer \DS@printerfalse
-\newif\ifDS@english \DS@englishfalse
-\newif\ifDS@technote \DS@technotefalse
-\newif\ifDS@preface \DS@prefacefalse
-\newif\ifDS@draft \DS@draftfalse
-\newif\ifDS@techrep \DS@techrepfalse				% 1.05(2)
-\newif\ifDS@sigrecommended \DS@sigrecommendedfalse		% 2.04(1)
-\newif\ifDS@invited \DS@invitedfalse				% 2.06(1)
-\newif\ifDS@abstract \DS@abstractfalse				% 2.07(7)
-\newif\ifDS@private \DS@privatefalse				% 2.07(8)
-\newif\ifDS@anonymous \DS@anonymousfalse			% 2.10(1)
-\newif\ifDS@TBIO \DS@TBIOfalse					% 2.11(1)
-\newif\ifDS@online \DS@onlinefalse				% 2.12(4a)
-
-\if@LaTeX@eN
-\DeclareOption{printer}{\DS@printertrue}			% 2.09(1)
-								% 2.12(2)
-\DeclareOption{english}{\DS@englishtrue}
-\DeclareOption{technote}{\DS@technotetrue}
-\DeclareOption{preface}{\DS@prefacetrue}
-\DeclareOption{draft}{\DS@drafttrue}
-\DeclareOption{techrep}{\DS@techreptrue}
-\DeclareOption{sigrecommended}{\DS@sigrecommendedtrue}		% 2.04(1)
-\DeclareOption{invited}{\DS@invitedtrue}			% 2.06(1)
-\DeclareOption{abstract}{\DS@abstracttrue}			% 2.07(7)
-\DeclareOption{private}{\DS@privatetrue}			% 2.07(8)
-\DeclareOption{anonymous}{\DS@anonymoustrue}			% 2.10(1)
-\DeclareOption{TBIO}{\DS@TBIOtrue \DS@englishtrue}		% 2.11(1)
-\DeclareOption{online}{\DS@onlinetrue \DS@printertrue \DS@englishtrue}
-								% 2.12(4a)
-\DeclareOption{10pt}{\def\@ptsize{0}}
-\DeclareOption{11pt}{\def\@ptsize{1}}
-\DeclareOption{12pt}{\def\@ptsize{2}}
-\ExecuteOptions{10pt}
-\ProcessOptions
-\def\ipsj@warning{\ClassWarning{ipsjpapers}}			% 2.00(3)
-\def\ipsj@error{\ClassError{ipsjpapers}}			% 2.00(3)
-\newskip \old@latex@skip					% 2.00(14)
-\let\@maxsep\old@latex@skip					% 2.00(14)
-\let\@dblmaxsep\old@latex@skip					% 2.00(14)
-
-\else
-\expandafter\ifx\csname ver@ipsjpapers.cls\endcsname\relax
-\typeout{Document Style `ipsjpapers' (ver 2.12) <15 Jun 2007>.}	% 2.05(1)
-\fi % \ifx
-
-\def\ds@printer{\relax}						% 2.09(1)
-\def\ds@english{\DS@englishtrue}
-\def\ds@technote{\DS@technotetrue}
-\def\ds@preface{\DS@prefacetrue}
-\def\ds@draft{\DS@drafttrue}
-\def\ds@techrep{\DS@techreptrue}				% 1.05(2)
-\def\ds@sigrecommended{\DS@sigrecommendedtrue}			% 2.04(1)
-\def\ds@invited{\DS@invitedtrue}				% 2.06(1)
-\def\ds@abstract{\DS@abstracttrue}				% 2.07(7)
-\def\ds@private{\DS@privatetrue}				% 2.07(8)
-\def\ds@anonymous{\DS@anonymoustrue}				% 2.10(1)
-\def\ds@TBIO{\DS@TBIOtrue \DS@englishtrue}			% 2.11(1)
-\def\ds@online{\DS@onlinetrue \DS@printertrue \DS@englishtrue}	% 2.12(4a)
-
-% 1.04(3)>>
-\def\@ptsize{0}
-\@namedef{ds@11pt}{\def\@ptsize{1}}
-\@namedef{ds@12pt}{\def\@ptsize{2}} 
-% 1.04(3)<<
-
-\@options
-\let\ipsj@warning\@warning					% 2.00(3)
-\let\@latex@warning\@warning					% 2.00(3)
-\def\ipsj@error#1#2{\errhlp{#2}\errmessge{#1}}			% 2.00(3)
-\fi % \if@LaTeX@eN
-% 2.00(2) <<
-
-\ifx\@classoptionslist\undefined\else				% 2.03(1) >>
-\def\ipsj@draft@option{draft}
-\def\ipsj@remove@draft@option{\def\@tempb{}%
-	\@for\@tempa:=\@classoptionslist\do{%
-		\ifx\@tempa\ipsj@draft@option\else
-		\edef\@tempb{\@tempb,\@tempa}\fi}%
-	\ifx\@tempb\@empty \def\@classoptionslist{}\else
-	\expandafter\ipsj@remove@draft@ption\@tempb\@nil\fi}
-\def\ipsj@remove@draft@ption,#1\@nil{%
-	\def\@classoptionslist{#1}}
-\ipsj@remove@draft@option
-\fi % \ifx							% 2.03(1) <<
-
-\ifipsj@nonjp \DS@englishtrue \fi				% 2.12(1a)
-
-%%%%%% Basics %%%%%%
-
-\newdimen\@Q \@Q=0.25mm
-
-\lineskip\z@ \normallineskip\z@ 
-\lineskiplimit\z@ \normallineskiplimit\z@
-\abovedisplayskip\z@ \belowdisplayskip\z@
-\abovedisplayshortskip\z@ \belowdisplayshortskip\z@
-
-\def\baselinestretch{1}
-\jot\z@ 
-
-\ifDS@draft\def\next{\input{ipsjdrafts.sty}\endinput}\else\let\next\relax\fi
-\next
-
-\@twosidetrue
-
-%%%%%% Fonts %%%%%%
-% \finvedm(dg)		dm5		\vpt	\tiny		fn-mark
-% \sixdm(dg)		dm6		\vipt	\scriptsize
-% \sevendm(dg)		dm7		\vipt	\footnotesize	f-note, capt
-%	10Q = 7.11304pt -> w(min7) = 6.73550pt
-% \eightdm(dg)		dm8		\viiipt	\small		abst, header
-%	11Q = 7.82434pt -> w(min8) = 7.69772pt
-% \eightdm(dg)half	dm9		\ixpt	\normalsize	main text
-%	12Q = 8.53564pt -> w(min9) = 8.65994
-% \tendm(dg)		dm10		\xpt	\large		sec title
-%	13Q = 9.24695pt -> w(min10) = 9.62216pt
-% \tendm(dg)half	dm10*1095	\xipt	\Large		author names
-%	15Q =10.66956pt -> w(min10*1095) = 10.53625pt
-% (\twlvdm)		(dm12)		\xiipt	\LARGE		e-title
-% \twelvedm(dg)half	dm12*1095	\xivpt	\huge		title
-%			min10*1440
-%	18Q =12.80347pt -> w(min10*1440) = 13.8559pt
-%
-% Note that cm fonts follows LaTeX standard. (e.g. \viiipt -> cmr8, etc.)
-
-% 2.00(4)>>
-\if@LaTeX@e
-\ifASCII
-\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)>>
-	\edef\@tempa{\ifipsj@nonjp \the\font \else \the\jfont \fi}  % 2.12(1b)
-	\expandafter\global\expandafter\let\expandafter#1\@tempa}}  % 2.00(5)<<
-
-\iffalse	% ASCII LaTeX2e printer settings is removed	% 2.12(2a)
-\else		% ASCII LaTeX2e non-printer
-\ifipsj@nonjp							% 2.12(1b)>>
-\ipsj@declare@font\fn@fontv\rmfamily\@vpt
-\ipsj@declare@font\fn@fontvi\rmfamily\@vpt
-\ipsj@declare@font\fn@fontvii\rmfamily\@vpt
-% no declaration for \fn@fontxv					% 2.12(1b)<<
-\else % \ifipsj@nonjp
-\ipsj@declare@font\fn@fontv\mcfamily\@vpt
-\ipsj@declare@font\fn@fontvi\mcfamily\@vpt
-\ipsj@declare@font\fn@fontvii\mcfamily\@vpt
-\ipsj@declare@font\fn@fontxv\gtfamily\@xipt
-\fi\fi %\ifipsj@nonjp\iffalse
-
-\else % \ifASCII = NTT LaTeX2e
-\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)
-	\xdef#1{\expandafter\noexpand\csname\jf@ntn@me\endcsname}}} % 2.00(5)
-\ipsj@declare@font\fn@fontv\dm\@vpt
-\ipsj@declare@font\fn@fontvi\dm\@vpt
-\ipsj@declare@font\fn@fontvii\dm\@vpt
-\ipsj@declare@font\fn@fontxv\dg\@xipt
-\fi % \ifASCII
-% 2.00(4) <<
-
-\else % \if@LaTeX@e = LaTeX 2.09				% 2.00(4)
-%% Fonts for ASCII TeX. (H.N.)
-\ifASCII
-\iffalse	% ASCII LaTeX 2.09 printer settings is removed	% 2.12(2a)
-\else \ifipsj@nonjp\else					% 2.12(1b)
-\font\fivedm		min5
-\font\fivedg		goth5
-\font\sixdm		min6
-\font\sixdg		goth6
-\font\sevendm		min7
-\font\sevendg		goth7
-\font\eightdm		min8
-\font\eightdg		goth8
-\font\eightdmhalf	min9
-\font\eightdghalf	goth9
-\font\tendm		min10
-\font\tendg		goth10
-\font\tendmhalf		min10 scaled\magstephalf
-\font\tendghalf		goth10 scaled\magstephalf
-\font\twelvedm		min10 scaled\magstep1
-\font\twelvedg		goth10 scaled\magstep1
-\font\twelvedmhalf	min10 scaled\magstep2
-\font\twelvedghalf	goth10 scaled\magstep2
-\let\fn@fontv\fivedm
-\let\fn@fontvi\fivedm
-\let\fn@fontvii\fivedm
-\let\fn@fontxv\tendghalf
-
-\fi\fi % \ifipsj@nonjp\iffalse
-
-%% ASCII doesn't have \old@Npt. (H.N.)
-\let\old@@vpt\vpt
-\let\old@@vipt\vipt
-\let\old@@viipt\viipt
-\let\old@@viiipt\viiipt
-\let\old@@ixpt\ixpt
-\let\old@@xpt\xpt
-\let\old@@xipt\xipt
-\let\old@@xiipt\xiipt
-\let\old@@xivpt\xivpt
-
-\ifipsj@nonjp							% 2.12(1b)>>
-\def\old@vpt{\old@@vpt}
-\def\old@vipt{\old@@vipt}
-\def\old@viipt{\old@@viipt}
-\def\old@viiipt{\old@@viiipt}
-\def\old@ixpt{\old@@ixpt}
-\def\old@xpt{\old@@xpt}
-\def\old@xipt{\old@@xipt}
-\def\old@xiipt{\old@@xiipt}
-\def\old@xivpt{\old@@xivpt}					% 2.12(1b)<<
-\else % \ifipsj@nonjp
-\def\old@vpt{\old@@vpt\jspaceskip1zw\relax}
-\def\old@vipt{\old@@vipt\jspaceskip1zw\relax}
-\def\old@viipt{\old@@viipt\jspaceskip1zw\relax}
-\def\old@viiipt{\old@@viiipt\jspaceskip1zw\relax}
-\def\old@ixpt{\old@@ixpt\jspaceskip1zw\relax}
-\def\old@xpt{\old@@xpt\jspaceskip1zw\relax}
-\def\old@xipt{\old@@xipt\jspaceskip1zw\relax}
-\def\old@xiipt{\old@@xiipt\jspaceskip1zw\relax}
-\def\old@xivpt{\old@@xivpt\jspaceskip1zw\relax}
-\fi % \ifipsj@nonjp
-								% 2.00(6)
-								% 1.06(2)
-
-%% ASCII doesn't have \dg nor \dm. (H.N.)
-\ifipsj@nonjp\else						% 2.12(1b)
-\def\dg{\protect\pdg}
-\def\dm{\protect\pdm}
-%% Redefine \gt and \mc
-\def\gt{\protect\pdg}
-\def\mc{\protect\pdm}
-\let\pdm\relax
-\fi % \ifipsj@nonjp
-
-\else % \ifASCII
-%% Fonts for NTT jTeX
-%% \magstephalf and \magstep1 may cause trouble in older versions.
-
-\jfont\fivedm=dm5
-\jfont\fivedg=dg5
-\jfont\sixdm=dm6
-\jfont\sixdg=dg6
-\jfont\sevendm=dm7
-\jfont\sevendg=dg7
-\jfont\eightdm=dm8
-\jfont\eightdg=dg8
-\jfont\eightdmhalf=dm9
-\jfont\eightdghalf=dg9
-\jfont\tendm=dm10
-\jfont\tendg=dg10
-\jfont\tendmhalf=dm10 scaled 1095
-\jfont\tendghalf=dg10 scaled 1095
-\jfont\twelvedm=dm12
-\jfont\twelvedg=dg12
-\jfont\twelvedmhalf=dm12 scaled 1095
-\jfont\twelvedghalf=dg12 scaled 1095
-\let\fn@fontv\fivedm
-\let\fn@fontvi\fivedm
-\let\fn@fontvii\fivedm
-\let\fn@fontxv\tendghalf
-								% 1.06(3)
-\fi % \ifASCII
-\fi % \if@LaTeX@e
-
-\ifx\jfsize\undefined \newcount\jfsize \fi			% 1.06(2)
-
-\ifASCII						% 1.06(3),2.00(6)>>
-\ifipsj@nonjp\else						% 2.12(1b)
-\let\setjglues\relax
-\let\jintercharskip\kanjiskip
-\let\jasciikanjiskip\xkanjiskip
-\let\jmathkanjiskip\xkanjiskip
-\newdimen\jspaceskip
-
-\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}}
-\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}}
-\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}}
-\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}}
-							
-\def\@asciiwarning#1{\ipsj@warning{\string#1\space		% 2.00(3)
-	is not supported in ASCII version}}
-							% 1.06(3),2.00(6)<<
-\fi % \ifipsj@nonjp
-\else % \ifASCII						% 2.00(7)>>
-\if@LaTeX@e
-\ipsj@declare@font\fn@eightdmhalf\dm\@ixpt
-\ipsj@declare@font\fn@eightdghalf\dg\@ixpt
-\else
-\def\fn@eightdmhalf{\eightdmhalf}
-\def\fn@eightdghalf{\eightdghalf}
-\fi % \if@LaTeX@e
-\ifx\setjglues\undefined\else
-\expandafter\defjintercharskip\fn@eightdmhalf{0pt}{1.4pt}{0.5pt}
-\expandafter\defjintercharskip\fn@eightdghalf{0pt}{1.4pt}{0.5pt}
-\expandafter\defjasciikanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
-\expandafter\defjasciikanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
-\expandafter\defjmathkanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
-\expandafter\defjmathkanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
-\fi % \if@LaTeX@e						% 2.00(7)<<
-\fi % \ifASCII							% 2.00(4)
-
-\if@LaTeX@e							% 2.00(8)>>
-\if@LaTeX@eN
-\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
-\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
-\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
-\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
-\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
-\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
-\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
-\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
-\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
-\ifASCII \ifipsj@nonjp\else					% 2.12(1b)
-\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
-\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
-\fi\fi\fi % \ifipsj@nonjp\ifASCII\if@LaTeX@eN
-
-\ifASCII \ifipsj@nonjp\else					% 2.12(1b)
-\def\dm{\mc}
-\def\dg{\gt}
-\fi\fi\fi % \ifipsj@nonjp\ifASCII\if@LaTeX@e			% 2.00(8)<<
-
-%%%%%% Basic Font Size Macros %%%%%%
-
-\if@LaTeX@e					% 1.06(4),2.00(9),2.04(3)>>
-\def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}\ipsj@setjspaceskip}
-\let\ipsj@setjspaceskip\relax			% 2.12(1b)>>
-\ifASCII \ifipsj@nonjp\else
-\def\ipsj@setjspaceskip{\jspaceskip1zw\relax}
-\fi\fi % \ifipsj@nonjp\ifASCII			% 2.12(1b)<<
-						% 1.06(4),2.00(9),2.04(3)<<
-
-%% \vipt etc. are redefined to use appropriate Japanese fonts.
-\else % \if@LaTeX@e						% 2.00(9)
-\ifipsj@nonjp\else						% 2.12(1b)
-\def\vpt{\old@vpt\fivedm\let\pdg\fivedg\let\pdm\fivedm\jfsize=5\relax}
-\def\vipt{\old@vipt\sixdm\let\pdg\sixdg\let\pdm\sixdm\jfsize=6\relax}
-\def\viipt{\old@viipt\sevendm\let\pdg\sevendg\let\pdm\sevendm\jfsize=7\relax}
-\def\viiipt{\old@viiipt\eightdm\let\pdg\eightdg\let\pdm\eightdm\jfsize=8\relax}
-\def\ixpt{\old@ixpt\eightdmhalf\let\pdg\eightdghalf\let\pdm\eightdmhalf
-	\jfsize=9\relax \@ixptboldmath}				% 1.02(2)
-\def\xpt{\old@xpt\tendm\let\pdg\tendg\let\pdm\tendm\jfsize=10\relax}
-\def\xipt{\old@xipt\tendmhalf\let\pdg\tendghalf\let\pdm\tendmhalf\jfsize=11
-	\relax}
-\def\xiipt{\old@xiipt\twelvedm\let\pdg\twelvedg\let\pdm\twelvedm
-	\jfsize=12\relax}
-\def\xivpt{\old@xivpt\twelvedmhalf\let\pdg\twelvedghalf\let\pdm\twelvedmhalf
-	\jfsize=14\relax}
-\fi\fi % \ifipsj@nonjp\if@LaTeX@e				% 2.00(9)
-
-\if@LaTeX@e							% 1.06(5)
-\let\@ixptboldmath\relax					% 1.06(5)
-\else								% 1.06(5)
-% 1.02(2) >>
-\iffalse	% printer setting removed			% 2.12(2a)
-\else
-\def\@ixptboldmath{%
-	\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
-		\textfont\@ne\ninmi 
-		\textfont\tw@\ninsy \textfont\lyfam\ninly
-		\@boldfalse}\@boldfalse
-% 1.03(1) >>
-	\def\boldmath{\@ifundefined{ninmib}{\global\font\ninmib\@mbi 
-		\global\font\ninsyb\@mbsy\relax
-		\global\font\ninlyb\@lasyb\relax
-		\@addfontinfo\@ixpt
-			{\def\boldmath{\everymath{\mit}\everydisplay{\mit}%
-				\@prtct\@nomathbold
-				\textfont\@ne\ninmib \textfont\tw@\ninsyb 
-				\textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}%
-	\@ixpt\boldmath}}
-% 1.03(1) <<
-\fi % \iffalse
-% 1.02(2) <<
-\fi % \if@LaTeX@e						% 1.06(5)
-
-
-%%%%%% Font Size Macros %%%%%%
-
-\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip
-	\@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}%
-		{\@setsize{#1}{#2}{#3}{#4}}}
-
-% s = (3*b - (h' + d') - (h + d))/2
-% s_a = s + h' + d - b
-% s_b = s + h + d' - b
-\def\sec@setskips#1{\setbox0\hbox{\fs@sec\bf#1}\setbox1\hbox{#1}
-	\@tempdima3\baselineskip
-	\advance\@tempdima-\ht0 \advance\@tempdima-\dp0
-	\advance\@tempdima-\ht1 \advance\@tempdima-\dp1
-	\divide\@tempdima\tw@ \advance\@tempdima-\baselineskip
-	\@tempdimb\@tempdima
-	\advance\@tempdima\ht0 \advance\@tempdima\dp1
-	\advance\@tempdimb\ht1 \advance\@tempdimb\dp0
-	\edef\sec@aboveskip{\the\@tempdima}
-	\edef\sec@belowskip{\the\@tempdimb}}
-
-\ifDS@english
-% size		pt	\baselineskip	  size		\?pt	\baselineskip
-% \normalsize	10	16Q		  \large	11	18Q (*)
-% \small	 9	15Q		  \Large	12	22Q
-% \footnotesize	 8	13Q		  \LARGE	14	26Q (*)
-% \scriptsize	 6	8pt (*)		  \huge		18	30Q (*)
-% \tiny		 5	6pt (*)		  \Huge		18	30Q (*)
-% * : not measured
-
-\def\@normalsize{\@setsize\normalsize{16\@Q}\xpt\@xpt}
-\def\small{\fs@setsize\small{15\@Q}\ixpt\@ixpt}
-\def\footnotesize{\fs@setsize\footnotesize{13\@Q}\viiipt\@viiipt}
-\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
-\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
-\def\large{\@setsize\Large{18\@Q}\xipt\@xipt}
-\def\Large{\@setsize\LARGE{22\@Q}\xiipt\@xiipt}
-\def\LARGE{\@setsize\LARGE{26\@Q}\xivpt\@xivpt}
-\def\huge{\@setsize\Huge{30\@Q}\xviipt\@xviipt}
-\let\Huge\huge
-
-\ifDS@techrep							% 1.05(2)>>
-\def\@normalsize{\@setsize\normalsize{17\@Q}\xpt\@xpt}
-\fi								% 1.05(2)<<
-
-\if@LaTeX@e							% 2.00(10)>>
-\let\normalsize\@normalsize
-\fi								% 2.00(10)<<
-
-\let\fs@footnote\footnotesize
-\let\fs@caption\footnotesize
-\let\fs@table\footnotesize
-\let\fs@eabst\footnotesize
-\let\fs@header\footnotesize
-\let\fs@footer\footnotesize
-\let\fs@bibliography\small
-\let\fs@subsec\normalsize
-\let\fs@sec\normalsize
-\let\fs@type\large
-\let\fs@eauthor\large
-\let\fs@title\Large
-
-\@normalsize
-
-\sec@setskips{A}
-
-\else % \ifDS@english
-% size		pt	\baselineskip	  size		\?pt	\baselineskip
-% \normalsize	 9	19Q		  \large	10	19Q
-% \small	 8	14Q		  \Large	11	22Q
-% \footnotesize	 7	14Q		  \LARGE	12	18Q
-% \scriptsize	 6	8pt (*)		  \huge		14	26Q
-% \tiny		 5	6pt (*)		  \Huge		14	26Q
-% * : not measured
-
-\def\@normalsize{\@setsize\normalsize{19\@Q}\ixpt\@ixpt}
-\def\small{\fs@setsize\small{14\@Q}\viiipt\@viiipt}
-\def\footnotesize{\fs@setsize\footnotesize{14\@Q}\viipt\@viipt}
-\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vipt}
-\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
-\def\large{\@setsize\large{19\@Q}\xpt\@xpt}
-\def\Large{\@setsize\Large{22\@Q}\xipt\@xipt}
-\def\LARGE{\@setsize\LARGE{18\@Q}\xiipt\@xiipt}
-\def\huge{\@setsize\Huge{26\@Q}\xivpt\@xivpt}
-\let\Huge\huge
-
-\ifDS@techrep							% 1.05(2)>>
-\def\@normalsize{\@setsize\normalsize{17\@Q}\ixpt\@ixpt}
-\fi								% 1.05(2)<<
-
-\if@LaTeX@e							% 2.00(10)>>
-\let\normalsize\@normalsize
-\fi								% 2.00(10)<<
-
-\let\fs@footnote\footnotesize
-\let\fs@caption\footnotesize
-\let\fs@table\footnotesize
-\let\fs@abst\small
-\def\fs@eabst{\small\baselineskip13\@Q}
-\let\fs@header\small
-\let\fs@footer\small
-\let\fs@subsec\normalsize
-\def\fs@bibliography{\normalsize\baselineskip16\@Q}
-\let\fs@sec\large
-\let\fs@type\fn@fontxv
-\let\fs@author\Large
-\def\fs@eauthor{\Large\baselineskip20\@Q}			% 2.12(7)
-\let\fs@etitle\LARGE
-\let\fs@title\huge
-
-\@normalsize 
-								% 2.00(7)
-\ifx\setjglues\undefined\else
-\setjglues
-\fi
-
-% \sec@setskips{<A of hiragana>} is moved to ipsjcommon		% 2.12(1c)
-\fi % \ifDS@englisth
-
-\if@LaTeX@e\else \ifipsj@nonjp\else			% 2.00(11),2.12(1b)
-\let\latex@bf\bf						% 1.06(6)
-\def\bf{\latex@bf \dg}						% 1.06(6)
-\fi\fi								% 2.00(11)
-
-
-%%%%%% Page Layout Parameters %%%%%%
-
-\newdimen\@mojihaba
-\ifipsj@nonjp \let\jspaceskip\@mojihaba	\fi			% 2.12(1b)
-
-\ifDS@printer							% 2.12(2b) >>
-\voffset=-20mm
-\hoffset=-14mm
-\fi								% 2.12(2b) <<
-
-\headheight 12\@Q
-
-% We want to allow a line containing $\displaystyle X^X$ to be a first line.
-\setbox0\hbox{$\displaystyle X^X$}
-\topskip\ht0
-
-\ifdim\maxdepth<\dp\strutbox \maxdepth\dp\strutbox \@maxdepth\maxdepth\fi
-
-\@tempswafalse							% 1.05(2)>>
-\ifDS@english \ifDS@techrep \else \@tempswatrue \fi\fi
-\if@tempswa							% 1.05(2)<<
-\topmargin 138\@Q \advance\topmargin-1in
-
-% \textheight = 53\baselineskip + \topskip + epsilon(100sp)
-\textheight53\baselineskip \advance\textheight\topskip \advance\textheight100sp
-
-% \headsep = 24Q - \topskip
-\headsep28\@Q \advance\headsep-\topskip				% 2.02(2)
-
-% Only first page has page number (footer) at the bottom
-\footskip 27\@Q
-
-\@mojihaba13\@Q
-
-\else % \if@tempswa
-\topmargin 131\@Q \advance\topmargin-1in
-
-% \textheight = 45\baselineskip + \topskip + epsilon(100sp)
-\textheight45\baselineskip \advance\textheight\topskip \advance\textheight100sp
-
-\ifDS@techrep							% 1.05(2)>>
-\textheight50\baselineskip \advance\textheight\topskip \advance\textheight100sp
-\fi % \ifDS@techrep						% 1.05(2)<<
-
-% \headsep = 28Q - \topskip
-\headsep28\@Q \advance\headsep-\topskip
-
-% Only first page has page number (footer) at the bottom
-\footskip24\@Q
-
-\@mojihaba12\@Q
-\fi % \if@tempswa
-
-\columnsep30\@Q
-
-% \textwidth - \columnwidth = 24 * 12Q * 2 + \columnsep = 606Q
-\textwidth606\@Q
-\columnseprule0pt
-
-\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@
-\advance\oddsidemargin-1in \evensidemargin\oddsidemargin
-
-\skip\footins\baselineskip \advance\skip\footins-.5\@mojihaba
-% \footnotesep = \baselineskip - depth(\strutbox)
-{\fs@footnote
-	\footnotesep\baselineskip
-	\global\advance\footnotesep-\dp\strutbox}
-
-\def\footnoterule{{\fs@footnote\kern-\dp\strutbox \hrule \kern-.4\p@
-	\kern\dp\strutbox}}
-
-\floatsep \baselineskip \textfloatsep \baselineskip 
-\intextsep \baselineskip \@maxsep \baselineskip
-\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip
-\@dblmaxsep \baselineskip
-\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil 
-\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil
-
-\parskip\z@ \parindent\@mojihaba
-\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
-\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty
-\@itempenalty -\@lowpenalty 
-
-
-%%%%%% Title and Authors %%%%%%
-%
-% Format of title, author names and abstract.
-%
-%	\huge\bf <Japanese title>
-%	\vskip 32Q
-%	\Large <Japanese author names>
-%	\vskip 32Q
-%	\small <Japanese abstract>
-%	\vskip 34Q
-%	\LARGE\bf <English title>
-%	\vskip 28Q
-%	\Large\sc <English author names>
-%	\vskip 28Q
-%	\small <English abstract>
-%	\vskip 25Q
-
-% 2.07(3)>>
-\def\ipsj@ohcheck#1#2#3{\fs@header\hskip12\@Q#1\qquad#2\qquad#3\hskip12\@Q}
-\def\ipsj@ohcvolno{Vol.~00\hskip12\@Q No.~SIG\ 00(\ipsj@sig@code\ 00)}
-
-\newif\ifipsj@trans \ipsj@transfalse				% 2.12(4f)
-\def\maketitle{\let\ipsj@oddhead@t\ipsj@oddhead@a
-	\ifipsj@trans
-	    \settowidth\@tempdima{%
-		\ipsj@ohcheck\ipsj@ohcvolno\@titlestring\ipsj@ohcvolno}%
-	    \ifdim\@tempdima>\textwidth
-		\let\ipsj@oddhead@t\ipsj@oddhead@b
-		\settowidth\@tempdima{%
-		    \ipsj@ohcheck\ipsj@ohcvolno\@titlestring{000}}%
-		\ifdim\@tempdima>\textwidth
-			\ipsj@warning{%				% 2.00(3)
-			\string\title\space for headding is too wide}%
-	    \fi \fi
-	\else
-	    \settowidth\@tempdima{\fs@header
-		\hskip12\@Q Vol.~00\hskip12\@Q No.~00\qquad\@titlestring\qquad
-		Vol.~00\hskip12\@Q No.~00\hskip12\@Q}
-	    \ifdim\@tempdima>\textwidth
-		\ipsj@warning{%					% 2.00(3)
-		\string\title\space for headding is too wide}%
-	\fi \fi
-	\par\twocolumn[\@maketitle]\thispagestyle{myheadings}\@thanks}
-% 2.07(3)<<
-
-% default title header
-
-\def\title{\@dblarg{\@xtitle}}
-\def\@xtitle[#1]#2{\gdef\@title{#2}%
-	{\def\protect{\noexpand\protect\noexpand}%
-		\ifDS@english\def\\{\unskip\ \ignorespaces}%
-		\else\def\\{\unskip\ignorespaces}\fi
-		\xdef\@titlestring{#1}}}			% 2.07(3)
-
-\def\@title{\mkt@warning\title}\def\@titlestring{}
-\long\def\author#1{\long\gdef\@author{#1}}
-\def\@author{\mkt@warning\author}
-
-\newbox\@abstractbox
-%% Introduce \@titlewidth because we now use this dimen repeatedly. (H.N.)
-%% \@titlewidth = 44 * 11Q = 484Q
-\newdimen\@titlewidth \@titlewidth 484\@Q
-
-\def\abstract{\global\let\@abstract\relax
-	\global\setbox\@abstractbox\hbox\bgroup
-		\begin{minipage}[b]{\@titlewidth}\fs@abst\parindent11\@Q}
-\def\endabstract{\end{minipage}\egroup}
-\def\@abstract{\mkt@warning{abstract env}}
-
-%% We need English title, author name(s) and abstract. (H.N.)
-\def\etitle#1{\gdef\@etitle{#1}}
-\def\@etitle{\mkt@warning\etitle}
-\long\def\eauthor#1{\long\gdef\@eauthor{#1}}
-\def\@eauthor{\mkt@warning\eauthor}
-
-\newbox\@eabstractbox
-\def\eabstract{\global\let\@eabstract\relax
-	\global\setbox\@eabstractbox\hbox\bgroup
-		\begin{minipage}[b]{\@titlewidth}\fs@eabst\parindent11\@Q}
-\let\endeabstract\endabstract
-\def\@eabstract{\mkt@warning{eabstract env}}
-
-\ifDS@english
-\let\author\eauthor \let\abstract\eabstract
-\let\@eauthor\@author \let\@eabstract\@abstract
-\fi
-
-\def\mkt@warning#1{\ipsj@warning{Missing \string#1}}		% 2.00(3)
-
-\newdimen\mkt@prevdepth
-\newbox\mkt@titlebox
-\def\@maketitle{\setbox\mkt@titlebox\vbox{
-	\ifDS@english \ifDS@preface
-		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
-	\else
-		\hbox{}\vskip26\@Q \vskip-\headsep \vskip-\baselineskip
-		\leftline{\fs@type\it
-		  	\ifDS@TBIO \ipsj@TBIO@pcatref		% 2.11(2)
-			\else\ifDS@technote Technical Note
-                        \else\ifDS@invited Invited Paper        % 2.06(1)
-			\else\ifDS@sigrecommended		% 2.04(1)
-				Recommended Paper		% 2.04(1)
-			\else\ifDS@abstract			% 2.07(7)
-				Abstract			% 2.07(7)
-			\else\ifDS@techrep\else			% 2.02(1)
-				Regular Paper\fi\fi\fi\fi\fi\fi}% 2.06(1)
-%								% 2.04(1)
-		\vskip32\@Q \vskip-\baselineskip \fi
-	\else							% 2.04(1) >>
-	\@tempswafalse	\ifDS@technote\@tempswatrue\fi
-			\ifDS@sigrecommended\@tempswatrue\fi
-                        \ifDS@invited\@tempswatrue\fi           % 2.06(1)
-			\ifDS@abstract\@tempswatrue\fi		% 2.07(7)
-	\if@tempswa
-		\vskip18\@Q \vskip-\headsep
-		\leftline{\vbox to28\@Q{\hrule height.8pt\vss
-			\hbox{\hskip7\@Q \fs@type
-				\ifDS@technote \ipsj@j@technote	% 2.12(1c)>>
-                                \else\ifDS@invited
-					\ipsj@j@invited		% 2.06(1)
-				\else\ifDS@sigrecommended
-					\ipsj@j@sigrec		% 2.06(1)
-				\else \ipsj@j@talkabst		% 2.07(7)
-				\fi\fi\fi			% 2.12(1c)<<
-				\hskip7\@Q}\vss\hrule height.8pt}}
-%								% 2.04(1) <<
-		\vskip40\@Q \vskip-\baselineskip
-	\else
-		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
-	\fi\fi
-	\@tempswafalse \ifDS@english\else\ifDS@preface\@tempswatrue\fi\fi
-	\mkt@maketitle{\fs@title\bf}\@title\title
-	\affi@labels
-	\ifDS@english\else
-	\vskip-\mkt@prevdepth \nointerlineskip\vskip32\@Q
-	\centerline{\vbox{\centering\hsize\@titlewidth\fs@author
-		\mkt@makeauthor}}
-	\ifDS@preface\else
-	\vskip-\prevdepth \nointerlineskip\vskip32\@Q
-	\centerline{\@abstract\box\@abstractbox}
-	\vskip-\prevdepth \nointerlineskip\vskip34\@Q
-	\mkt@maketitle{\fs@etitle\bf}\@etitle\etitle
-	\fi\fi
-	\if@tempswa\else
-	\vskip-\mkt@prevdepth \nointerlineskip\vskip28\@Q
-	\centerline{\vbox{\centering\hsize\@titlewidth\fs@eauthor\sc
-		\mkt@makeeauthor}}
-	\fi
-	\ifDS@preface\else
-	\vskip-\prevdepth \nointerlineskip\vskip28\@Q
-	\centerline{\@eabstract\box\@eabstractbox}
-	\fi
-	\vskip-\prevdepth \nointerlineskip\vskip25\@Q}
-	\@tempdimb\ht\mkt@titlebox \advance\@tempdimb\dp\mkt@titlebox
-	\@tempcnta\@tempdimb \@tempcntb\baselineskip
-	\divide\@tempcnta\@tempcntb \@tempdima\@tempcnta\baselineskip
-	\advance\@tempdima-\@tempdimb
-	\box\mkt@titlebox
-	\ifdim\@tempdima=\z@\else\advance\@tempdima\baselineskip
-		\vskip\@tempdima\fi}
-
-%% \mkt@maketitle puts Japanese/English title, whose lines should be
-%% properly broken with \\ by the user.  The result is flushed to left, then
-%% centered with respect to the longest line. (H.N.)
-\def\mkt@maketitle#1#2#3{\setbox\@tempboxa\vtop{
-	\def\\{\unskip\egroup\hbox\bgroup\ignorespaces}
-		#1\hbox\bgroup#2\unskip\egroup
-		\global\mkt@prevdepth\prevdepth}
-	\@tempdima\textwidth\advance\@tempdima-4\@mojihaba
-	\ifdim\wd\@tempboxa>\@tempdima
-		\ipsj@warning{%					% 2.00(3)
-			\string#3 is too wide. Break line(s) by \string\\}\fi
-	\centerline{\box\@tempboxa}}
-
-% Assignment of Japanese author names to lines:
-% 1 -> 1, 2 -> 2, 3 -> 3, 4 -> 2+2, 5 -> 3+2, 6 -> 3+3, 7 -> 3+2+2, 8 -> 3+3+2,
-% ...
-% Rule for N authors (N > 2, q := N div 3)
-%	N mod 3 = 0 -> 3 * q
-%	N mod 3 = 1 -> 3 * (q - 2) + 2 + 2
-%	N mod 3 = 2 -> 3 * (q - 1) + 2
-
-\newcount\mkt@cnta\newcount\mkt@cntb
-\newcount\mkt@sname\newcount\mkt@gname
-\newbox\mkt@boxa
-\newdimen\mkt@namewidth
-\def\mkt@makeauthor{\let\member\@gobble \let\nomember\relax
-	\let\stmember\@gobble	% Those are not necessary in final manuscript.
-	\def\@makefnmark{\smash{\rlap{$^{\affi@thefnmark}$}}}%	% 2.12(7)
-	\gdef\affi@thefnmark{}\leavevmode\let\+\ignorespaces
-	\settowidth\@tempdima{\ifipsj@nonjp x\else\ipsj@j@a \fi}% 2.12(1c)
-	\mkt@namewidth7\@tempdima\@tempcnta\z@
-	\expandafter\mkt@countauthor\@author\and\@nil\and
-	\ifnum\@tempcnta=\@ne\let\mkt@anhbox\mkt@anhboxc\mkt@makesingleauthor
-	\else
-		\@tempcntb\@tempcnta \divide\@tempcntb\thr@@
-		\multiply\@tempcntb\thr@@ \advance\@tempcntb-\@tempcnta
-		\ifnum\@tempcntb=\m@ne\relax\@tempcntb\tw@\else\@tempcntb\z@\fi
-		\mkt@cnta\thr@@
-		\let\mkt@anhbox\mkt@anhboxl
-		\expandafter\mkt@makemultiauthor\@author\and\and\fi}
-\def\mkt@countauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax
-	\else\advance\@tempcnta\@ne \let\next\mkt@countauthor\fi\next}
-
-% If single author, author name has 9 KC width instead of 7.
-\def\mkt@makesingleauthor{\divide\mkt@namewidth7\multiply\mkt@namewidth9\relax
-	\expandafter\mkt@putauthor\@author\+ \@nil}
-
-\def\mkt@makemultiauthor#1\and{\ifnum\@tempcnta=\z@\unskip\let\next\relax\else
-	\leavevmode
-	\advance\mkt@cnta\m@ne \advance\@tempcnta\m@ne
-	\ifnum\mkt@cnta=\z@\mkt@maleft{#1}\mkt@cnta\thr@@\else
-	\ifnum\@tempcnta=\@tempcntb\mkt@maleft{#1}\mkt@cnta\tw@\else
-	\mkt@putauthor#1\+ \@nil\let\mkt@anhbox\mkt@anhboxc\fi\fi
-	\let\next\mkt@makemultiauthor\fi\next}
-\def\mkt@maleft#1{\let\mkt@anhbox\mkt@anhboxr\mkt@putauthor#1\+ \@nil
-	\par\let\mkt@anhbox\mkt@anhboxl}
-
-% Japanese author name format:
-%	Non Japanese : As is.
-%	Japanese w/o s/g delimitor : As is with warning.
-%	Japanese (s+g>6) : As is.
-%	Japanese (s+g<7) : Give 1-KC space to s/g delimitor, then insert
-%		infinit stretch between each character pair, assuming the
-%		s/g delimitor as a charcter, to make the name have 7-KC
-%		width.   An exception is 2s + 2g case, in which s/g
-%		delimitor has 0 width in order to have the result
-%		"S_S_G_G".
-
-\def\mkt@putauthor#1 #2\@nil{%
-	\ifipsj@nonjp \mkt@anhbox{#1 #2}\else
-	\setbox\@tempboxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
-		\jintercharskip\z@#1#2}%
-	\setbox\mkt@boxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
-		\jintercharskip1cm#1#2}%
-	\ifdim\wd\@tempboxa=\wd\mkt@boxa \mkt@anhbox{#1 #2}\else
-						% probably no Kanjis
-	\def\@tempa{#2}\ifx\@tempa\empty	% without space btwn s/g-name
-		{\let\affiref\@gobble \def\+{}%
-			\ipsj@warning{Author name #1 doesn't have a space}}%
-								% 2.00(3)
-		\mkt@anhbox{#1}\else
-	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
-	\mkt@cntb\mkt@sname \advance\mkt@cntb\mkt@gname
-	\ifnum\mkt@cntb>6\relax\mkt@anhbox{#1\ #2}\else
-	\jintercharskip\fill%
-	\@tempskipa\@tempdima plus2fill\relax
-	\ifnum\mkt@sname=\tw@ \ifnum\mkt@gname=\tw@ \@tempskipa\fill\fi\fi
-	\hbox to\mkt@namewidth{#1\hskip-\lastskip
-		\hskip\@tempskipa#2\hskip-\lastskip\@makefnmark}\fi\fi\fi
-	\fi
-	\gdef\affi@thefnmark{}\hskip\columnsep}
-
-% When an author name is formatted "as is", the following macros are used
-% according to their position (left, right, or center).
-\def\mkt@anhboxl#1{\hbox to\mkt@namewidth{\hss#1\@makefnmark}}
-\def\mkt@anhboxr#1{\hbox to\mkt@namewidth{#1\@makefnmark\hss}}
-\def\mkt@anhboxc#1{\setbox\@tempboxa\hbox{#1\@makefnmark}%
-	\ifdim\wd\@tempboxa>\mkt@namewidth\box\@tempboxa
-	\else\hbox to\mkt@namewidth{\hss\box\@tempboxa\hss}\fi}	% 2.08(1)
-
-\def\mkt@getnamewidth#1#2{\setbox\@tempboxa\hbox{\let\affiref\@gobble#2}%
-	\@tempdimb\wd\@tempboxa
-	\advance\@tempdimb.5\@tempdima #1\@tempdimb \mkt@cntb\@tempdima
-	\divide#1\mkt@cntb}
-
-% English author name format
-%	1 -> <name-1>^*
-%	2 -> <name-1>^* and~<name-2>^*
-%	3 or more -> <name-1>,^* <name-2>,^* ... <name-n-1>^* and~<name-n>^*
-% (be careful the position of comma).
-%
-% No special tricks for assignment names to line.  Names are simply put in a
-% \centering paragraph.
-
-\def\mkt@makeeauthor{\let\member\@gobble \let\nomember\relax
-	\let\stmember\@gobble	% Those are not necessary in final manuscript.
-	\leavevmode\let\mkt@and\relax\gdef\affi@thefnmark{}%
-	\def\@thefnmark{\affi@thefnmark}%
-	\expandafter\mkt@imakeeauthor\@eauthor\and\@nil\and}
-\def\mkt@imakeeauthor#1\and#2\and{\def\@tempa{#2}\ifx\@tempa\@nnil
-		#1\@makefnmark\let\next\relax
-	\else
-		\def\@tempb{#1}\def\next{\mkt@iimakeeauthor#2\and}%
-	\fi\next}
-\def\mkt@iimakeeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil
-		\@makefnmark\ {\rm{and}~}\gdef\affi@thefnmark{}\hbox{\@tempb}%
-		\@makefnmark\let\next\relax
-	\else
-		\mkt@and\hbox{\@tempb}\let\mkt@and\mkt@andmid
-		\let\next\mkt@iimakeeauthor
-	\fi\def\@tempb{#1}\next}
-\def\mkt@andmid{,\@makefnmark\ \gdef\affi@thefnmark{}}
-
-% Macros to specify author's affiliation easily.
-% 2.12(7)>>
-\newcounter{affi@footnote} \c@affi@footnote\z@
-\newcounter{affi@pfootnote} \c@affi@pfootnote\z@
-\def\affilabel{\affi@deflabels\affi@affilabel}
-\def\paffilabel{\affi@deflabels\affi@paffilabel}
-\def\affi@deflabels#1#2#3{{\def\protect{\noexpand\protect\noexpand}%
-	\let\affi@affilabel\relax \let\affi@paffilabel\relax \let\\\relax
-	\xdef\affi@labels{\affi@labels#1{#2}{#3}}}}
-\def\affi@labels{}
-\def\affi@affilabel{\begingroup \affi@label{affi@footnote}\@makefnmarkdagger}
-\def\affi@paffilabel#1#2{\begingroup
-	\def\protect{\noexpand\protect\noexpand}%
-	\def\\{\noexpand\\Presently with \ignorespaces}%
-	\edef\@tempa{\ifDS@english Presently with \else		% 1.04(1d)
-		\ipsj@j@presently\fi#2}%			% 2.12(1c)
-	\affi@label{affi@pfootnote}\@makefnmarkast{#1}\@tempa}
-\def\affi@label#1#2#3#4{\stepcounter{#1}%
-	\@ifundefined{affi@r@#3}%
-		{\expandafter\xdef\csname affi@r@#3\endcsname{%
-			\csname the#1\endcsname}}%
-		{\ipsj@warning{Affiliation label `#3' multiply defined}}%
-								% 2.00(3)
-	\let\affi@footnotetext\relax\let\\\relax
-	\def\protect{\noexpand\protect\noexpand}%
-	\xdef\@thanks{\@thanks
-		\affi@footnotetext
-			{\csname the#1\endcsname}{\protect#2}{#4}}\endgroup}
-
-\def\affiref#1{\@ifundefined{affi@r@#1}%
-		{\ipsj@warning{Affiliation reference `#1' undefined}% 2.00(3)
-			\def\@tempa{?}}%
-		{\def\@tempa{\csname affi@r@#1\endcsname}}%
-	{\def\protect{\noexpand\protect\noexpand}%
-	\ifx\affi@thefnmark\empty \xdef\affi@thefnmark{\@tempa}\else
-	\xdef\affi@thefnmark{\affi@thefnmark,\hskip\z@\@tempa}\fi}}
-\def\affi@footnotetext#1#2#3{{\def\@thefnmark{#1}%
-	\def\@makefnmarkforfn{#2}\@footnotetext{#3}}}
-
-\def\theaffi@footnote{{\dagger}\number\c@affi@footnote}
-\def\theaffi@pfootnote{{\ast}\number\c@affi@pfootnote}
-
-\def\thanks#1{\begingroup
-	\stepcounter{affi@pfootnote}\let\thempfn\theaffi@pfootnote
-	\let\@thefnmark\thempfn \@makefnmark
-	\let\affi@footnotetext\relax\let\\\relax
-	\def\protect{\noexpand\protect\noexpand}%
-	\xdef\@thanks{\@thanks
-		\affi@footnotetext{\thempfn}{\protect\@makefnmarkast}{#1}}%
-	\endgroup}
-% 2.12(7)<<
-
-% \contact is necessary only for drafts.
-\long\def\contact#1{}
-
-
-%%%%%% Page Header and Footer %%%%%% 
-
-\mark{{}{}} 
-
-\newcounter{volpageoffset} % You must set this to appropriate value
-\setcounter{volpageoffset}{1} % for each issue!
-\ifDS@printer							% 2.12(4d)>>
-\def\LastPageNumber{\gdef\ipsj@last@page}
-\fi								% 2.12(4d)<<
-
-% 2.00(16)>>
-\let\latex@document\document
-\def\document{\latex@document
-	\ifDS@private\else
-	\ifDS@online \global\c@page\ipsj@olh@page		% 2.12(4)
-	\else \global\c@page\c@volpageoffset \fi \fi}		% 2.07(8)
-\let\c@volpage\c@page		% for backward compatibility
-\def\thevolpage{\thepage}	% for backward compatibility
-% 2.00(16)<<
-
-\newcounter{volume}						% 2.12(1c)>>
-\newcounter{number}
-\let\c@month\c@number						% 2.07(4)
-\newcounter{year}						% 2.12(1c)<<
-
-\ifDS@printer							% 2.12(4b)>>
-\def\SetOnlineHeaderInfo#1#2#3#4{%	% <vol><year><month><page>[<lastpage>]
-	\def\ipsj@olh@vol{#1}%
-	\def\ipsj@olh@year{#2}%
-	\def\ipsj@olh@month{#3}%
-	\def\ipsj@olh@page{#4}%
-	\@ifnextchar[%]
-		\ipsj@olh@setlastpage\relax}
-\def\ipsj@olh@setlastpage[#1]{\def\ipsj@olh@lastpage{#1}}
-\fi								% 2.12(4b)<<
-
-% 2.07(4)>>
-\ifDS@online							% 2.12(4b)
-\def\@thevolno{Vol.~\ipsj@olh@vol}				% 2.12(4b)
-\else
-\def\@thevolno{Vol.~\arabic{volume}\hskip\@mojihaba No.~%	% 2.12(1c)>>
-	\ifipsj@trans SIG\ \ipsj@sig@numa(\ipsj@sig@code\ \ipsj@sig@numb)%
-	\else \arabic{number}\fi}				% 2.12(1c)<<
-\fi
-% 2.07(4)<<
-% 2.00(15)>>
-% 2.12(1c)(4b)>>
-\def\@monthyear{%
-	\ifDS@online \ipsj@monthyear\ipsj@olh@month\ipsj@olh@year
-	\else \c@year1959 \advance\c@year\c@volume
-		\ipsj@monthyear\c@number\c@year \fi}
-\def\ipsj@monthyear#1#2{\ifcase#1\or Jan.\or Feb.\or Mar.\or Apr.\or May\or
-		June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\else\fi
-	\hskip.5\@mojihaba \number#2}
-% 2.12(1c)(4b)<<
-% 2.00(15)<<
-
-% 2.07(2)>>
-\def\transaction#1#2#3{\ipsj@transtrue
-	\def\ipsj@sig@code{#1}\def\ipsj@sig@numa{#2}\def\ipsj@sig@numb{#3}%
-	\expandafter\let\expandafter\ipsj@sig@title
-		\csname ipsj@sig@#1@\ifDS@english e\else j\fi\endcsname
-	\ifx\ipsj@sig@title\relax
-		\ipsj@warning{Transaction code #1 is unknown}\fi
-	\let\ipsj@oddhead@s\ipsj@oddhead@a
-	\ifDS@online\else					% 2.12(4c)
-	\settowidth\@tempdima{%
-	    \ipsj@ohcheck\ipsj@ohcvolno\hdr@tipsj\ipsj@ohcvolno}%
-	\ifdim\@tempdima>\textwidth
-	    \let\ipsj@oddhead@s\ipsj@oddhead@b
-	    \settowidth\@tempdima{\c@month3\relax	% "Mar." is longest
-		\ipsj@ohcheck\ipsj@ohcvolno\hdr@tipsj\@monthyear}%
-	    \ifdim\@tempdima>\textwidth
-		\let\ipsj@oddhead@s\ipsj@oddhead@c
-	\fi \fi \fi}
-
-\def\ipsj@sig@PRO@e{Programming}
-\def\ipsj@sig@TOM@e{Mathematical Modeling and Its Applications}
-\def\ipsj@sig@TOD@e{Databases}
-\def\ipsj@sig@HPS@e{High Performance Computing Systems}
-\def\ipsj@sig@CVIM@e{Computer Vision and Image Media}
-\def\ipsj@sig@ACS@e{Advanced Computing Systems}			% 2.09(2)
-\def\ipsj@sig@TBIO@e{Bioinformatics}				% 2.11(3)
-\def\ipsj@sig@SLDM@e{System LSI Design Methodology}		% 2.12(8)
-% 2.07(2)<<
-
-\def\copyrightnotice{\long\def\ipsj@cnotice}
-
-% 1.05(2)>>
-\ifDS@techrep
-\def\ps@headings{\let\@mkboth\markboth
-	\def\@oddhead{\@checklines\hss}\let\@evenhead\@oddhead
-	\def\@oddfoot{}\def\@evenfoot{}}
-\let\ps@myheadings\ps@headings
-
-\else\ifDS@private						% 2.07(8)>>
-\def\ps@headings{\let\@mkboth\markboth
-	\def\@oddhead{\@checklines\hfil\thepage\hskip12\@Q}%
-	\def\@evenhead{\@checklines\hskip12\@Q\thepage\hfil}
-	\def\@oddfoot{}\def\@evenfoot{}}
-\def\ps@myheadings{\ps@headings
-	\def\@oddhead{\@checklines
-		\smash{\parbox[b]{.75\textwidth}{\@nameuse{ipsj@cnotice}}}%
-		\hfil\thepage\hskip12\@Q}%
-	\let\@evenhead\@oddhead}
-								% 2.07(8)<<
-\else
-% 1.05(2)<<
-\def\ps@headings{\let\@mkboth\markboth
-	\def\@oddfoot{}
-	\def\@evenfoot{}
-	\def\@evenhead{\fs@header \@checklines
-		\hskip12\@Q\rlap{\thepage}\hss			% 2.07(3)
-		\hdr@tipsj\hss\llap{\@monthyear}\hskip12\@Q}
-	\def\@oddhead{\fs@header \@checklines
-		\ipsj@oddhead@t\@titlestring\thepage}		% 2.07(3)
-	\def\sectionmark##1{}\def\subsectionmark##1{}}
-
-\def\ps@myheadings{\let\@mkboth\@gobbletwo
-	\def\@oddhead{\fs@header \@checklines
-		\ipsj@oddhead@s\hdr@tipsj\@monthyear}		% 2.07(3)
-	\def\@oddfoot{\fs@footer\hfil\thepage\hfil}
-	\let\@evenhead\@oddhead
-	\let\@evenfoot\@oddfoot
-	\def\sectionmark##1{}\def\subsectionmark##1{}}
-\fi\fi								% 1.05(2)
-								% 2.07(8)
-
-% 2.12(9)>>
-\def\ipsj@lc@Rtop{\rlap{\smash{\rule[-\headsep]{0.05mm}{10mm}%
-	\rule[-\headsep]{10mm}{0.05mm}}}}
-\def\ipsj@lc@Ltop{\llap{\smash{\rule[-\headsep]{10mm}{0.05mm}%
-	\rule[-\headsep]{0.05mm}{10mm}}}}
-\def\ipsj@lc@Lbot{\llap{\smash{\raisebox{-\textheight}{%
-	\raisebox{-\headsep}{\rule{10mm}{0.05mm}\rule[-10mm]{0.05mm}{10mm}}}}}}
-\def\ipsj@lc@Rbot{\rlap{\smash{\raisebox{-\textheight}{%
-	\raisebox{-\headsep}{\rule[-10mm]{0.05mm}{10mm}\rule{10mm}{0.05mm}}}}}}
-
-\def\ps@layoutcheck{\ps@headings
-	\let\ipsj@lc@evenhead\@evenhead
-	\def\@evenhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
-		\ipsj@lc@evenhead
-		\ipsj@lc@Rtop \ipsj@lc@Rbot}%
-	\let\ipsj@lc@oddhead\@oddhead
-	\def\@oddhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
-		\ipsj@lc@oddhead
-		\ipsj@lc@Rtop \ipsj@lc@Rbot}%
-	\let\ipsj@lc@myheadings\ps@myheadings
-	\def\ps@myheadings{\ipsj@lc@myheadings
-		\let\ipsj@lc@fpoddhead\@oddhead
-		\def\@oddhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
-			\ipsj@lc@fpoddhead
-			\ipsj@lc@Rtop \ipsj@lc@Rbot}%
-		\let\@evenhead\@oddhead}}
-% 2.12(9)<<
-
-% 2.07(3)>>
-\def\ipsj@oddhead@a#1#2{\hskip12\@Q \rlap{\@thevolno}\hss#1\hss
-	\llap{#2}\hskip12\@Q}
-\def\ipsj@oddhead@b#1#2{\hskip12\@Q \@thevolno\qquad#1\hss
-	\llap{#2}\hskip12\@Q}
-\def\ipsj@oddhead@c#1#2{\hskip12\@Q \@thevolno\hss#1\hss#2\hskip12\@Q}
-\let\ipsj@oddhead@t\ipsj@oddhead@a
-\let\ipsj@oddhead@s\ipsj@oddhead@a
-% 2.07(3)<<
-
-\def\ipsj@online@trans{IPSJ Digital Courier}			% 2.12(4c)
-\def\ipsj@online@journal{IPSJ Digital Courier}			% 2.12(4c)
-% 2.02(2),2.07(4)>>
-\ifDS@english
-\def\hdr@tipsj{\smash{%
-	\ifDS@online						% 2.12(4c)>>
-		\ifipsj@trans
-			\ipsj@online@trans
-		\else
-			\ipsj@online@journal\fi			% 2.12(4c)<<
-	\else
-		\ifipsj@trans
-			IPSJ Transactions on \ipsj@sig@title
-		\else
-			IPSJ Journal\fi
-	\fi}}
-\else
-\def\hdr@tipsj{\smash{\ipsj@j@jipsj				% 2.12(1c)>>
-	\ifipsj@trans \ipsj@j@colon \ipsj@sig@title \fi}}	% 2.12(1c)<<
-\fi
-% 2.02(2),2.07(4)<<
-
-% \checklines enables to draw a horizontal rule onto each baselines.
-
-\newif\if@checklines \@checklinesfalse
-\def\checklines{\@checklinestrue}
-\def\@checklines{\if@checklines \rlap{\smash{\vtop{\normalsize
-	\hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip
-	\hrule\vskip-.4pt
-	\ifDS@techrep\@tempcnta50\else				% 1.05(2)
-	\ifDS@english\@tempcnta53\else\@tempcnta45\fi\fi	% 1.05(2)
-	\relax\@@checklines}}}\fi
-	\ifDS@english\@tempcnta-7\else\@tempcnta\z@\fi\relax
-% 1.05(2)>>
-	% register marks are removed				% 2.12(2d)
-% 1.05(2)<<
-	}
-\def\@@checklines{\ifnum\@tempcnta>\z@
-	\vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne
-	\let\next\@@checklines\else\let\next\relax\fi\next}
-
-\pagestyle{headings}
-\pagenumbering{arabic}
-
-\ifDS@english\else
-\def\today{\the\year\ipsj@j@year \the\month\ipsj@j@month \the\day\ipsj@j@day}
-								% 2.12(1c)
-\fi
-
-
-%%%%%% Output Routine %%%%%%
-
-% To balance the final page,
-% following code is borrowed from nicetwocolumn style
-
-% you can refrain from balancing by falsifying following switch!
-%% Initial value of \if@lastpagebalancing is false.  It may be turned true by
-%% biography processing macros. (H.N.)
-
-\newif\if@lastpagebalancing \@lastpagebalancingfalse
-\newif\if@finalpageoutput \@finalpageoutputfalse
-% incorporate balanced output to \enddocument
-\let\latex@enddocument\enddocument
-\def\enddocument{\@finalpageoutputtrue
-	\if@lastpagebalancing
-		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
-	\ifDS@preface
-		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
-	\ifDS@abstract						% 2.07(7)>>
-		\hbox{}\newpage
-		\ifDS@english	\rightline{(Presented \ra@presented)}
-		\else		\expandafter\ra@putpresented\ra@presented \fi
-		\fi						% 2.07(7)<<
-%								% 2.12(4d)>>
-	\if@filesw \write\@auxout{\string\gdef\string\ipsj@lastpage
-		{\number\c@page}}\fi				% 2.12(4d)<<
-	\latex@enddocument}
-
-\newbox\@leftcolumnfootnote \newbox\@rightcolumnfootnote
-\newif\if@leftfootnoteexist \@leftfootnoteexistfalse 
-\newif\if@rightfootnoteexist \@rightfootnoteexistfalse
-\newif\ifopt@floatexist \opt@floatexistfalse
-
-% 2.00(12) \color@{begin/end}group ignored
-\def\enlargethispage{\ipsj@warning{\string\enlargepage is ignored}}
-								% 2.00(3,12)
-\def\@makecol{\vbadness10000 \lineskiplimit\normallineskiplimit	% 1.05(1)
-	\setbox\@outputbox\box\@cclv
-	\if@firstcolumn
-		\ifvoid\footins \global\@leftfootnoteexistfalse
-		\else
-			\global\@leftfootnoteexisttrue
-			\@tempdima\dp\footins
-			\global\setbox\@leftcolumnfootnote\vbox{
-				\unvbox\footins\vskip-\@tempdima}
-		\fi
-		\ifx\@botlist\@empty\else\global\opt@floatexisttrue\fi
-	\else
-		\ifvoid\footins \global\@rightfootnoteexistfalse
-		\else
-			\global\@rightfootnoteexisttrue
-			\@tempdima\dp\footins
-			\global\setbox\@rightcolumnfootnote\vbox{
-				\unvbox\footins	\vskip-\@tempdima}
-		\ifx\@toplist\@empty\else\global\opt@floatexisttrue\fi
-		\fi
-	\fi
-	\xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
-	\global\maxdepth\@maxdepth}
-
-% 2.01(1) >>
-\let\latex@vtryfc\@vtryfc
-\def\@vtryfc{\if@firstcolumn \global\@leftfootnoteexistfalse
-	\else \global\@rightfootnoteexistfalse \fi \latex@vtryfc}
-% 2.01(1) <<
-
-% 1.01(1,2) >>
-\let\latex@addtobot\@addtobot
-\def\@addtobot{\latex@addtobot\global\maxdepth\@maxdepth}
-\let\latex@combinefloats\@combinefloats
-\def\@combinefloats{\ifx\@botlist\@empty\else \dimen@\dp\@outputbox
-	\setbox\@outputbox\vbox{\unvbox\@outputbox \vskip-\dimen@}\fi
-	\latex@combinefloats}
-% 1.01(1,2) <<
-
-\newskip\opt@baselineskip
-\def\@outputdblcol{
-	\if@firstcolumn \global\@firstcolumnfalse
-		\global\setbox\@leftcolumn\box\@outputbox
-		\global\opt@baselineskip\baselineskip
-	\else \global\@firstcolumntrue \global\opt@floatexistfalse
-	\global\bib@adjustheight-\maxdimen
-	\setbox\@leftcolumn\vbox to\@colht{\boxmaxdepth\@maxdepth   % 1.01(3)
-		\unvbox\@leftcolumn
-		\if@leftfootnoteexist\vfil
-			\footnoterule\box\@leftcolumnfootnote\fi}
-	\setbox\@outputbox\vbox to\@colht{\boxmaxdepth\@maxdepth    % 1.01(3)
-		\unvbox\@outputbox
-		\if@rightfootnoteexist\vfil
-			\footnoterule\box\@rightcolumnfootnote\fi}
-	\global\maxdepth\@maxdepth
-	\if@finalpageoutput
-	\if@leftfootnoteexist\else\if@rightfootnoteexist\else
-		\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn}%
-		\setbox\@outputbox\vbox{\unvbox\@outputbox}
-		\ifdim\ht\@leftcolumn<\ht\@outputbox
-			\setbox\@leftcolumn\vbox to\ht\@outputbox{
-				\unvbox\@leftcolumn}%
-		\else
-			\setbox\@outputbox\vbox to\ht\@leftcolumn{
-				\unvbox\@outputbox}%
-		\fi
-	\fi\fi\fi
-	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
-		{\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
-		\hbox to\columnwidth{\box\@outputbox \hss}}}
-	\@combinedblfloats
-	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
-	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}%
-	\endgroup
-	\fi}
-
-\let\opt@outputdblcol\@outputdblcol
-\chardef\opt@boxa\z@
-\chardef\opt@boxb\@ne
-\chardef\opt@boxc\tw@
-\def\opt@magicpenalty{1234}
-\def\opt@balanceoutputdblcol{\let\next\opt@ibalanceoutputdblcol
-	\if@firstcolumn \let\next\opt@outputdblcol
-	\else	\ifopt@floatexist \opt@warning \let\next\opt@outputdblcol
-		\else\ifx\@deferlist\@empty\else
-			\opt@warning \let\next\opt@outputdblcol\fi\fi\fi
-	\next}
-\def\opt@ibalanceoutputdblcol{%
-	\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn
-		\ifnum\lastpenalty=\opt@magicpenalty\relax\else
-		\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
-			\unskip\unskip\unkern\unpenalty
-			\advance\@tempcnta\m@ne}\fi}
-	\advance\opt@baselineskip-\dp\@leftcolumn
-	\ifdim\dp\@leftcolumn=\z@ \ifdim\opt@baselineskip=\baselineskip
-		\@tempdima\ht\@leftcolumn \advance\@tempdima-\topskip
-		\divide\@tempdima\baselineskip
-		\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
-		\advance\@tempdima\topskip
-		\advance\@tempdima-\ht\@leftcolumn
-		\advance\opt@baselineskip\@tempdima \fi\fi
-	\advance\opt@baselineskip-\topskip
-	\setbox\@outputbox\vbox{\unvbox\@outputbox}
-	\ifdim\ht\@outputbox=\topskip \ifdim\dp\@outputbox=\z@
-	\setbox\opt@boxa\vbox{\unvcopy\@outputbox\unskip
-		\global\setbox\opt@boxb\lastbox
-		\global\dimen@\lastskip}
-	\ifvoid\opt@boxb\else\ifdim\ht\opt@boxb=\z@
-		\ifdim\dp\opt@boxb=\z@\ifdim\dimen@=\topskip
-		\@firstcolumntrue\fi\fi\fi\fi\fi\fi
-	\setbox\opt@boxa\copy\@outputbox
-	\setbox\@outputbox\vbox{\unvcopy\@leftcolumn
-		\if@firstcolumn\else
-		\vskip\opt@baselineskip
-		\penalty\interlinepenalty\unvbox\@outputbox\fi}
-	\@tempdima\ht\@outputbox \advance\@tempdima\topskip
-	\divide\@tempdima\tw@ \advance\@tempdima100sp
-	\splittopskip\topskip \splitmaxdepth\@maxdepth
-	\ifdim\bib@adjustheight<\@M pt
-		\opt@split\@outputbox\opt@boxb\@tempdima
-		\ifdim\ht\opt@boxb<\bib@adjustheight
-			\opt@split\@leftcolumn\opt@boxc\bib@adjustheight
-			\opt@split\opt@boxc\opt@boxb\@tempdima
-			\if@firstcolumn
-				\opt@adjust\opt@boxc{\unvbox\@leftcolumn}
-			\else\opt@adjust\opt@boxc{\ifvoid\@leftcolumn\else
-				\unvbox\@leftcolumn\vskip\opt@baselineskip\fi
-				\unvbox\opt@boxa}\fi\fi
-	\else
-		\advance\bib@adjustheight-\@M pt
-		\opt@split\opt@boxa\opt@boxc\bib@adjustheight
-		\setbox\@outputbox\vbox{\unvbox\@leftcolumn
-			\vskip\opt@baselineskip\unvbox\opt@boxc}
-		\opt@split\@outputbox\opt@boxb\@tempdima
-		\opt@adjust\@outputbox{\unvbox\opt@boxa}
-	\fi
-	\if@leftfootnoteexist
-		\setbox\opt@boxb\vbox to\@colht{\box\opt@boxb\vfill
-			\footnoterule\box\@leftcolumnfootnote}\fi
-	\if@rightfootnoteexist
-		\setbox\@outputbox\vbox to\@colht{\box\@outputbox\vfill
-			\footnoterule\box\@rightcolumnfootnote}\fi
-	\ifdim\ht\@outputbox>\ht\opt@boxb
-		\setbox\opt@boxb\vbox to\ht\@outputbox{\unvbox\opt@boxb}
-	\else
-		\setbox\@outputbox\vbox to\ht\opt@boxb{\unvbox\@outputbox}
-	\fi
-	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
-		{\box\opt@boxb \hss}\hfil \vrule width\columnseprule\hfil
-		\hbox to\columnwidth{\box\@outputbox \hss}}}
-	\global\@firstcolumntrue \@combinedblfloats
-	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
-	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup}
-
-\if@LaTeX@eN							% 2.00(3)>>
-\def\opt@warning{\ClassWarning{ipsjpapers}{%
-	Single column floats still remain on biography\MessageBreak
-	processing.\MessageBreak
-	Do \string\verbbiography\space for manual balcing}}
-\else
-\def\opt@warning{\@warning{Single column floats still remain on biography
-	processing.^^J\space\space\space\space\space
-	\space\space\space\space\space\space\space\space\space\space
-	Do \string\verbbiography\space for manual balancing}}
-\fi								% 2.00(3)<<
-\def\opt@split#1#2#3{\setbox#2\vsplit#1to#3\setbox#2\vbox{\unvbox#2}}
-\def\opt@adjust#1#2{\@tempdima\ht#1 \advance\@tempdima-\topskip
-	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
-	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
-	\advance\@tempdima-\@tempdimb
-	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
-	\advance\@tempdima\baselineskip \advance\@tempdima-\dp#1 
-	\advance\@tempdima-\topskip
-	\setbox\@outputbox\vbox{\ifvoid#1\else\unvbox#1\vskip\@tempdima\fi#2}}
-
-\let\latex@outputpage\@outputpage
-% \opt@finalgap:	vertical space above the \hrule at the end of paper.
-% \opt@finallinewidth:	width of the \hrule at the end of paper.
-\@tempdima2\baselineskip		% This might be changed
-\edef\opt@finalgap{\the\@tempdima}
-\def\opt@finallinewidth{220\@Q}		% This might be changed
-\ifDS@techrep \let\opt@finallinewidth\z@ \fi			% 1.05(2)
-
-\def\@outputpage{\if@finalpageoutput
-	\setbox\@outputbox\vbox{\unvbox\@outputbox}
-	\@tempdima\dp\@outputbox
-	\@tempdimb\ht\@outputbox \advance\@tempdimb\opt@finalgap\relax
-	\ifdim\@tempdimb>\textheight\else
-	\setbox\@outputbox\vbox{\unvbox\@outputbox\vskip-\@tempdima
-		\nointerlineskip\vbox to\z@{\vskip\opt@finalgap
-			\hbox to\textwidth{\hss
-			\vrule height0.4pt width\opt@finallinewidth\hss}
-		\vss}}\fi\fi
-	\ifASCII\if@LaTeX@e\ifipsj@nonjp\else
-		\@@topmargin\topmargin \fi\fi\fi	    % 2.00(13),2.12(1b)
-	\latex@outputpage}
-
-%%%%%% Biography %%%%%%
-
-% If you want to control the allocation of biographies manually, do
-% \verbbiography and insert \adjust{<vertical materials>} just before
-% \member (or its relatives).  For example;
-% 	\verbbiography
-%	\begin{biography}
-%	\member{...} ...
-%	\adjust{\protect\newpage}
-%	\member{...} ...
-%	\adjust{\protect\vspace{1.3cm}}
-%	\member{...} ...
-%	\end{biography}
-% will make page break just after the biography of the 1st author, and will
-% insert a vertical space of 1.3cm just after that of the 2nd.  It is
-% strongly recommended to \protect any control sequence in the argument of
-% \adjust.
-
-% \received and \accepted define the dates of receipt/acceptance.
-% They are put at the end of manuscript (just before biographies) by
-% \ra@putrcvacc.
-
-% 2.12(1c)>>
-% \def\ra@nengo is moved to the tail				% 2.12(1c)
-\ifDS@english
-\def\received#1#2#3{\def\ra@received{\ra@date{#1}{#2}{#3}}\ignorespaces}
-\def\accepted#1#2#3{\def\ra@accepted{\ra@date{#1}{#2}{#3}}\ignorespaces}
-								% 2.07(5)
-% \rereceived is moved below					% 2.12(5)
-\def\presented#1#2#3{\def\ra@presented{\ra@date{#1}{#2}{#3}}\ignorespaces}
-								% 2.07(7)
-\ifDS@printer							% 2.12(4e)>>
-\def\ReleasedToOnline#1#2#3{\ifDS@online
-	\def\ra@released{\ra@date{#1}{#2}{#3}}\fi}
-\fi								% 2.12(4e)<<
-\def\ra@received{??? ??, ????}
-\def\ra@accepted{??? ??, ????}
-\def\ra@presented{??? ??, ????}					% 2.07(7)
-\def\ipsj@TOD@editor{(Editor in Charge:\quad{\it\ipsj@TOD@ename\/})}
-								% 2.07(6)
-								% 2.12(6)
-
-\ifDS@TBIO							% 2.11(4)>>
-\def\ipsj@TOD@editor{(Communicated by\quad{\it\ipsj@TOD@ename\/})}% 2.12(6)
-\fi								% 2.11(4)<<
-\else
-\def\received#1#2#3{\def\ra@received{#1&#2&#3&}\ignorespaces}
-\def\accepted#1#2#3{\def\ra@accepted{#1&#2&#3&}\ignorespaces}
-								% 2.07(5)
-% \rereceived is moved below					% 2.12(5)
-\def\presented#1#2#3{\def\ra@presented{#1&#2&#3&}\ignorespaces}	% 2.07(7)
-\def\ra@received{?&?&?&}
-\def\ra@accepted{?&?&?&}
-\def\ra@presented{?&?&?&}					% 2.07(7)
-\def\ipsj@TOD@editor{\ipsj@j@lp\ipsj@j@edinch
-	\quad\ipsj@TOD@ename\ipsj@j@rp}				% 2.07(6)
-								% 2.08(2)
-								% 2.12(6)
-\fi
-% aliasing of \received etc. is moved to the tail.
-
-% 2.12(1c)<<
-
-\let\ra@elt\relax						% 2.12(5)>>
-\def\rereceived#1#2#3{\ifx\ra@rereceived\undefined
-		\def\ra@rereceived{\ra@elt{}{#1}{#2}{#3}}\def\ra@rerecnum{1}%
-	\else
-		\@tempcnta\ra@rerecnum \advance\@tempcnta\@ne
-		\edef\ra@rerecnum{\number\@tempcnta}%
-		\edef\ra@rereceived{\ra@rereceived
-			\ra@elt{(\ra@rerecnum)}{#1}{#2}{#3}}%
-	\fi \ignorespaces}					% 2.12(5)<<
-
-\def\edInCharge#1{\def\ipsj@TOD@ename{#1}\ignorespaces}		% 2.07(6)
-
-\def\ra@putrcvacc{\rightline{\vtop{\normalsize\tabskip\z@
-	\ifDS@english
-	    \llap{(Received \ra@received)}
-	    \def\ra@elt##1##2##3##4{%				% 2.12(5)>>
-		\llap{(Revised##1 \ra@date{##2}{##3}{##4})}}
-	    \ifx\ra@rereceived\undefined \else \ra@rereceived \fi
-								% 2.12(5)<<    
-	    \llap{(Accepted \ra@accepted)}
-	    \ifx\ra@released\undefined\else			% 2.12(4e)
-		\llap{(Released \ra@released)}\fi		% 2.12(4e)
-	    \hbox{}
-	\else							% 2.12(1c)>>
-	    \def\ra@elt##1##2##3##4{##2&##3&##4&\ipsj@j@rerec##1)\cr}%
-								% 2.12(5)
-	    \halign{(\ra@nengo\hskip\jasciikanjiskip
-		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@year
-			\hskip\jasciikanjiskip&
-		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@month
-			\hskip\jasciikanjiskip&
-		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@day
-			&##\hfil\cr				% 2.07(5)>>
-		\ra@received \ipsj@j@received)\cr
-		\ifx\ra@rereceived\undefined \else \ra@rereceived \fi
-								% 2.12(5)
-		\ra@accepted \ipsj@j@accepted)\cr\multispan3\cr}\fi}%
-								% 2.07(5)<<
-								% 2.12(1c)<<
-	\hskip\@mojihaba}
-	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}
-	\ifDS@printer \ifDS@english				% 2.12(4d)>>
-		\ifipsj@trans
-			\ifDS@online \noindent \ipsj@refer@trans \par \fi
-		\else
-			\ifDS@online\else \noindent \ipsj@refer@online \par \fi
-	\fi \fi \fi						% 2.12(4d)<<
-	\ifipsj@recommendation\else				% 2.04(2)
-		\ifx\ipsj@TOD@ename\undefined\else		% 2.07(6)>>
-			\nobreak\vskip\baselineskip
-			\hbox{\ipsj@TOD@editor}\fi		% 2.07(6)<<
-		\vskip\baselineskip\penalty\opt@magicpenalty\fi}% 2.04(2)
-\def\ra@date#1#2#3{\ifcase#2\or
-	January\or February\or March\or April\or May\or June\or
-	July\or August\or September\or October\or November\or December\fi
-	\space#3, #1}
-\def\ra@jdate#1#2#3{#1&#2&#3&}
-\def\ra@putpresented#1&#2&#3&{\rightline{%			% 2.12(1c)>>
-	(\ra@nengo\hskip\jasciikanjiskip			% 2.07(7)>>
-	#1\hskip\jasciikanjiskip \ipsj@j@year \hskip\jasciikanjiskip
-	#2\hskip\jasciikanjiskip \ipsj@j@month \hskip\jasciikanjiskip
-	#3\hskip\jasciikanjiskip \ipsj@j@day\ipsj@j@presented)}}
-								% 2.07(7)<<
-								% 2.12(1c)<<
-
-% 2.12(4d)>>
-\def\ipsj@space{\hskip\z@ plus\fontdimen\thr@@\font \penalty5000\relax}
-\def\ipsj@refer@trans{%
-	(Paper version of this article can be found in the IPSJ Transactions on
-	\csname ipsj@sig@\ipsj@sig@code @e\endcsname,
-	Vol.\ipsj@space\number\c@volume,
-	No.\ipsj@space SIG\ipsj@sig@numa\ipsj@space
-	(\ipsj@sig@code\ipsj@space\ipsj@sig@numb),
-	pp.\ipsj@space\number\c@volpageoffset--\penalty5000\relax
-	\ipsj@thelastpage\c@volpageoffset\ipsj@last@page.)}
-\def\ipsj@refer@online{%
-	(Online version of this article can be found in the
-	IPSJ Digital Courier,
-	Vol.\ipsj@space\ipsj@olh@vol,
-	pp.\ipsj@space\ipsj@olh@page--\penalty5000\relax
-	\ipsj@thelastpage\ipsj@olh@page\ipsj@olh@lastpage.)}
-\def\ipsj@thelastpage#1#2{\begingroup
-	\@tempcnta#1\relax
-	\ifDS@online \@tempcntb\ipsj@olh@page
-	\else \@tempcntb\c@volpageoffset\fi
-	\ifx#2\undefined
-		\ifx\ipsj@lastpage\undefined \def\@tempa{???}%
-		\else \advance\@tempcntb-\ipsj@lastpage
-			\advance\@tempcnta-\@tempcntb
-			\def\@tempa{\number\@tempcnta}%
-		\fi
-	\else \def\@tempa{#2}%
-	\fi
-	\@tempa \endgroup}
-% 2.12(4d)<<
-
-\newbox\bio@picbox
-% The following define the height and width of a picture for biography, and
-% the indentation of the first 6 lines.  They might be changed.
-\def\bio@picheight{100\@Q}
-\def\bio@picwidth{80\@Q}
-
-\newif\ifbio@showpicbox
-\bio@showpicboxtrue
-% Do \bio@showpicboxfalse if you don't want to put a frame box at the
-% position for picture.
-\ifDS@english
-\def\bio@lineheight{9\@Q}
-\def\bio@piclines{7}
-\def\bio@indent{91\@Q}
-\def\bio@hangafter{7}
-\else
-\def\bio@lineheight{8\@Q}
-\def\bio@piclines{6}
-\def\bio@indent{96\@Q}
-\def\bio@hangafter{5}
-\fi
-
-% \verbbiography forces verbatim output of biography (i.e. not ballanced).
-\newif\ifbio@verb \bio@verbfalse
-\def\verbbiography{\global\bio@verbtrue}
-% The environment biography saves texts for biographies into the list of
-% \inserts (for floats).
-\def\biography{\ifipsj@recommendation\else\par\ra@putrcvacc\fi	% 2.04(2)
-	\def\member{\bio@member{}{\ipsj@j@member}}%		%2.12(3a)(1c)>>
-	\def\nomember{\bio@member{}{}}%
-	\def\stmember{\bio@member{}{\ipsj@j@stmember}}%
-	\def\xmember{\bio@member{}}%
-	\ifDS@printer
-		\def\Kmember{\bio@Kmember{\ipsj@j@member}}%
-		\def\Knomember{\bio@Kmember{}}%
-		\def\Kstmember{\bio@Kmember{\ipsj@j@stmember}}
-		\let\Kxmember\bio@Kmember
-	\fi							%2.12(3a)(1c)<<
-	\ifDS@english \let\author\nomember			% 2.12(3d)>>
-		\ifDS@printer \let\Kauthor\Knomember \fi
-	\fi							% 2.12(3d)<<
-	\let\adjust\bio@adjust
-	\ifbio@showpicbox
-	\setbox\bio@picbox\hbox{\hbox to\z@{\vrule\hskip-0.4pt%
-		\vtop to\bio@picheight{\vskip\z@\hrule width\bio@picwidth
-			\vfil\hrule}\hskip-0.4pt\vrule\hss}}
-	\else
-	\setbox\bio@picbox\hbox{}
-	\fi
-	\@tempdima\bio@piclines\baselineskip \advance\@tempdima\bio@lineheight
-	\dp\bio@picbox\@tempdima
-	\let\bio@egroup\relax\let\+\ignorespaces\let\@elt\relax
-	\def\bio@list{}\global\bio@th\z@}
-
-\def\bio@Kmember#1#2#3{\bio@member{#3}{#1}{#2}}			% 2.12(3a)
-\def\bio@member#1#2#3{\bio@egroup\let\bio@egroup\bio@@egroup	% 2.12(3b)>>
-	\@next\@currbox\@freelist\relax
-		{\@latexerr{Too many unprocessed floats and biographies}\@ehb}%
-	\def\@tempa{#3}\def\@tempb{#1}%
-	\global\setbox\@currbox\hbox\bgroup
-	    \@tempswatrue
-	    \ifx\@tempb\@empty
-		\ifDS@printer \@tempswafalse
-		\else \raise\bio@lineheight\copy\bio@picbox
-		\fi
-	    \else
-		\setbox\@tempboxa\hbox to\z@{\vtop{\vskip\z@
-		    \hbox{\includegraphics
-			[width=\bio@picwidth,height=\bio@picheight]{#1.eps}}}%
-		    \hss}
-		\dp\@tempboxa\dp\bio@picbox
-		\raise\bio@lineheight\box\@tempboxa
-	    \fi							% 2.12(3b)<<
-	    \vtop\bgroup
-		\let\par\\
-		\if@tempswa \hangindent\bio@indent\hangafter-\bio@hangafter \fi
-		\ifDS@english {\bf #3\ }%
-		\else {\bf\bio@putauthor#3\+ \@nil}%
-			\def\@tempb{#2}\ifx\@tempb\@empty\else	% 2.12(3c)
-			\ipsj@j@lp#2\ipsj@j@rp\fi{\@@par}\fi	% 2.12(3c)(1c)
-	\ignorespaces}
-
-% Author name format:
-%	S + G < 5 -> fill space between S/G (like SS__G)
-%	otherwise -> 1 KC space between S/G (like SS_GG)
-\def\bio@putauthor#1 #2\@nil{%
-	\ifipsj@nonjp#1 #2\else
-	\setbox\@tempboxa\hbox{\jintercharskip\z@#1#2}%
-	\setbox\mkt@boxa\hbox{\jintercharskip1cm#1#2}%
-	\ifdim\wd\@tempboxa=\wd\mkt@boxa #1 #2\else
-	\def\@tempa{#2}\ifx\@tempa\empty
-		{\def\+{}\ipsj@warning{Author name #1 doesn't have a space}}%
-								% 2.00(3)
-		#1\else
-	\@tempdima\@mojihaba
-	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
-	\advance\mkt@sname\mkt@gname
-	\ifnum\mkt@sname<5\leavevmode\hbox to5\@mojihaba{#1\hfil#2}\else
-		#1#2\fi\fi\fi\fi}
-\def\bio@@egroup{\@@par\hbox{}\egroup\egroup\@tempdima\dp\@currbox
-	\ifdim\@tempdima>\textheight
-		\ipsj@warning{Biography of \@tempa\space is too long}% 2.00(3)
-		\bio@verbtrue \fi
-	\advance\@tempdima\baselineskip\global\advance\bio@th\@tempdima
-	\global\dimen\@currbox\@tempdima \global\count\@currbox\z@
-	{\let\protect\bio@protect\xdef\bio@list{\bio@list\@elt\@currbox}}}
-\def\bio@adjust#1{\bio@egroup\let\bio@egroup\relax
-	\ifbio@verb {\let\protect\bio@protect\xdef\bio@list{\bio@list#1}\fi}}
-\def\bio@protect{\noexpand\protect\noexpand}
-
-\def\endbiography{\bio@egroup \@tempswatrue
-	\ifx\@botlist\@empty\ifx\@deferlist\@empty \@tempswafalse \fi\fi
-	\ifbio@verb\else\if@tempswa \bio@verbtrue \opt@warning\fi\fi
-	\ifbio@verb{\let\@elt\bio@putelt \let\protect\relax \bio@list}%
-	\else\bio@putbio\fi}
-
-\newdimen\bio@colht \newdimen\bio@splitheight
-\newdimen\bio@maxgap \newdimen\bio@lastgap
-\newdimen\bio@th \newdimen\bio@lhA \newdimen\bio@hA \newdimen\bio@hB
-\newdimen\bio@lh \newdimen\bio@rh
-\newdimen\bio@tempdim
-\newif\ifbio@awful
-\newinsert\bio@pbox \count\bio@pbox\@ne
-
-\def\bio@putbio{\let\@elt\relax \let\bio@vskip\relax \allowbreak
-	\bio@colht\@colht \advance\bio@colht-\topskip
-	\advance\bio@colht\baselineskip
-	\@tempdima\bio@colht \advance\@tempdima-\@colroom
-	\advance\@tempdima\pagetotal
-	\if@firstcolumn
-	    \ifdim\@tempdima>\bio@th
-		\global\@lastpagebalancingtrue
-		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
-	    \else
-		\ifdim\pagetotal=\z@\else
-			\dimen\bio@pbox\@tempdima \advance\bio@th\@tempdima
-			\edef\bio@list{\@elt\bio@pbox\bio@list}\fi
-		\bio@splitheight\bio@colht \bio@splitpage
-		\bio@splitheight.5\bio@th
-		\let\bio@awfulput\bio@specialawfulput
-		\bio@trybalance\fi
-	\else \advance\@tempdima\bio@th
-	    \ifdim\@tempdima<\bio@colht
-		\global\@lastpagebalancingtrue
-		\ifdim\pagetotal=\z@ \global\opt@baselineskip2\baselineskip\fi
-		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
-	    \else
-		\let\bio@awfulput\bio@normalawfulput
-		\bio@splitheight\z@ \advance\@tempdima-\bio@th
-		\advance\bio@colht-\@tempdima \bio@splitpage
-		{\let\@elt\bio@putelt\bio@list}\bio@nextpage
-		\bio@trybalance\fi
-	\fi}
-
-\def\bio@trybalance{\bio@split 
-	\let\bio@right\bio@rightA \let\bio@left\bio@leftA
-		\def\bio@rightx{}\def\bio@leftx{}%
-		\let\bio@hX\bio@hA \bio@balance
-		\let\bio@rightxA\bio@rightx \let\bio@leftxA\bio@leftx
-	\ifbio@awful\@tempcnta\tw@\else\@tempcnta\z@\fi
-	\let\bio@right\bio@rightB \let\bio@left\bio@leftB
-		\def\bio@rightx{}\def\bio@leftx{}%
-		\let\bio@hX\bio@hB \bio@balance
-		\let\bio@rightxB\bio@rightx \let\bio@leftxB\bio@leftx
-	\ifbio@awful\advance\@tempcnta\@ne\fi
-	\ifcase\@tempcnta
-		\ifdim\bio@hA<\bio@hB \bio@balanceput\bio@leftxA\bio@rightxA
-		\else \bio@balanceput\bio@leftxB\bio@rightxB\fi
-	\or \bio@balanceput\bio@leftxA\bio@rightxA
-	\or \bio@balanceput\bio@leftxB\bio@rightxB
-	\else \bio@awfulput\fi
-	\ifx\bio@deferred\empty\vskip-\baselineskip\let\next\relax
-	\else\bio@nextpage\let\next\bio@trybalance\fi\next}
-
-\def\bio@split{\def\bio@leftA{}\def\bio@leftB{}%
-	\def\bio@rightA{}\def\bio@rightB{}%
-	\bio@lhA\z@\@tempdimb\z@ \bio@isplit}
-\def\bio@isplit{\ifx\bio@list\empty\let\next\relax\else
-	\bio@car\@tempdima\@currbox\bio@list
-	\bio@lhA\@tempdimb\advance\@tempdimb\@tempdima
-	\edef\bio@leftB{\bio@leftB\@elt\@currbox}%
-	\ifdim\@tempdimb>\bio@splitheight
-		\edef\bio@rightA{\@elt\@currbox\bio@list}%
-		\let\bio@rightB\bio@list \let\next\relax
-	\else\edef\bio@leftA{\bio@leftA\@elt\@currbox}\let\next\bio@isplit
-	\fi\fi\next}
-
-\def\bio@balanceput#1#2{{\let\@elt\bio@putelt\let\bio@vskip\bio@xvskip
-	#1\bio@newpage#2}}
-\def\bio@normalawfulput{{\let\bio@vskip\@gobble \@tempcnta\z@ 
-	\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxB
-	\ifdim\@tempdima<\bio@colht
-		\@tempdima\z@ \bio@addheight\@tempdima\bio@rightxB
-		\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
-			\let\@elt\bio@putelt
-			\bio@leftxB\bio@newpage\bio@rightxB\fi\fi
-	\ifnum\@tempcnta=\z@
-		\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxA
-		\ifdim\@tempdima<\bio@colht
-			\@tempdima\z@\bio@addheight\@tempdima\bio@rightxA
-			\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
-				\let\@elt\bio@putelt
-				\bio@leftxA\bio@newpage\bio@rightxA\fi\fi\fi
-% The following may be redundant.
-	\ifnum\@tempcnta=\z@
-		\let\@elt\bio@putelt\bio@listsave\fi}}
-\def\bio@specialawfulput{{\advance\bio@th-\dimen\bio@pbox
-	\ifdim\bio@th<\bio@colht\bio@newpage
-	\let\bio@newpage\relax\fi\bio@normalawfulput}}
-
-\def\bio@putelt#1{\ifnum\count#1>\z@\else\box#1
-	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}
-	\vskip\baselineskip\fi}
-\def\bio@xvskip#1{\vskip#1\prevdepth\z@}
-\def\bio@newpage{\vskip-\baselineskip\newpage}
-
-\def\bio@nextpage{\bio@newpage \let\bio@list\bio@deferred
-	\bio@th\z@ \bio@addheight\bio@th\bio@list
-	\bio@colht\@colht \advance\bio@colht-\topskip
-	\advance\bio@colht\baselineskip
-	\bio@splitheight\bio@colht \bio@splitpage
-	\bio@splitheight.5\bio@th
-	\let\bio@awfulput\bio@normalawfulput}
-\def\bio@splitpage{\let\bio@listsave\bio@list \bio@split
-	\@tempdima\bio@th \advance\@tempdima-\bio@lhA
-	\ifdim\@tempdima>\bio@colht
-		\let\bio@leftAsave\bio@leftA \bio@th\bio@lhA
-		\let\bio@list\bio@rightA \bio@splitheight\bio@colht
-		\bio@split \edef\bio@list{\bio@leftAsave\bio@leftA}%
-		\advance\bio@th\bio@lhA
-		\let\bio@deferred\bio@rightA
-	\else\def\bio@deferred{}\let\bio@list\bio@listsave\fi}
-
-% \bio@tolerablegap:	maximum tolerable gap between adjacent bio's.
-% \bio@tolerablestretch:maximum stretch of a column.
-
-\@tempdima10\baselineskip		% This might be changed
-\edef\bio@tolerablegap{\the\@tempdima}
-\@tempdima15\baselineskip
-\edef\bio@tolerablelastgap{\the\@tempdima}
-\def\bio@tolerablestretch{2}		% This might be changed
-
-\def\bio@balance{\let\@elt\relax \edef\bio@bstack{%
-		\@elt{{\bio@left}{\bio@right}{}{}{0pt}}}
-	\bio@xbalance}
-\def\bio@xbalance{%
-	\expandafter\bio@popstack\bio@bstack\@nil
-	\let\bio@nextA\bio@xbalance \@tempdima\z@
-	\ifx\bio@left\empty \ifx\bio@right\empty
-		\let\bio@nextA\bio@balanceend
-	\else
-		\bio@addheight\@tempdima\bio@right
-		\edef\bio@leftx{\bio@leftx\bio@vskip{\the\@tempdima}}%
-		\advance\bio@hX\@tempdima
-		\edef\bio@rightx{\bio@rightx\bio@right}\def\bio@right{}%
-		\bio@pushstack \fi\else
-	\ifx\bio@right\empty
-		\bio@addheight\@tempdima\bio@left
-		\edef\bio@rightx{\bio@rightx\bio@vskip{\the\@tempdima}}%
-		\advance\bio@hX\@tempdima
-		\edef\bio@leftx{\bio@leftx\bio@left}\def\bio@left{}%
-		\bio@pushstack \else
-	\bio@car\@tempdima\bio@leftbox\bio@left
-	\bio@car\@tempdimb\bio@rightbox\bio@right
-	\edef\bio@leftx{\bio@leftx\@elt\bio@leftbox}%
-	\edef\bio@rightx{\bio@rightx\@elt\bio@rightbox}%
-	\ifdim\@tempdima>\@tempdimb
-		\advance\bio@hX\@tempdima
-		\let\bio@da\@tempdima\let\bio@db\@tempdimb
-		\bio@ibalance\bio@left\bio@right\bio@leftx\bio@rightx
-	\else	\advance\bio@hX\@tempdimb
-		\let\bio@da\@tempdimb\let\bio@db\@tempdima
-		\bio@ibalance\bio@right\bio@left\bio@rightx\bio@leftx\fi
-	\fi\fi\bio@nextA}
-\def\bio@ibalance#1#2#3#4{\let\bio@nextB\relax
-	\ifx#2\empty 
-		\advance\bio@da-\bio@db
-		\edef#4{#4\bio@vskip{\the\bio@da}}\bio@pushstack\else
-	\bio@car\bio@tempdim\@currbox#2 \advance\bio@db\bio@tempdim
-	\ifdim\bio@da<\bio@db
-		\advance\bio@db-\bio@da
-		\let\@tempa#3\edef#3{#3\bio@vskip{\the\bio@db}}%
-		\let\@tempb#4\edef#4{#4\@elt\@currbox}%
-		\advance\bio@hX\bio@db \bio@pushstack
-		\advance\bio@hX-\bio@db
-		\edef#2{\@elt\@currbox#2}%
-		\advance\bio@tempdim-\bio@db
-		\let#3\@tempa \edef#4{\@tempb\bio@vskip{\the\bio@tempdim}}%
-		\bio@pushstack
-	\else \edef#4{#4\@elt\@currbox}\def\bio@nextB{\bio@ibalance#1#2#3#4}%
-	\fi\fi\bio@nextB}
-\def\bio@balanceend{\bio@awfulfalse \def\bio@bstack{}%
-	\bio@maxgap\z@ \bio@lastgap\z@
-	\bio@checkgap\bio@leftx \bio@checkgap\bio@rightx
-	\ifdim\bio@maxgap>\bio@tolerablegap\relax\bio@awfultrue\fi
-	\ifdim\bio@lastgap>\bio@tolerablelastgap\relax\bio@awfultrue\fi
-	\ifdim\bio@hX>\bio@tolerablestretch\bio@splitheight\bio@awfultrue\fi
-	\ifdim\bio@hX>\bio@colht\bio@awfultrue\fi}
-\def\bio@checkgap#1{{\@tempdima\z@ \@tempdimb\z@ \bio@tempdim\z@
-	\let\@elt\bio@cgelt \let\bio@vskip\bio@cgvskip #1\relax
-	\ifdim\@tempdima>\bio@maxgap \global\bio@maxgap\@tempdima \fi
-	\ifdim\bio@tempdim>\bio@lastgap \global\bio@lastgap\bio@tempdim \fi}}
-\def\bio@cgvskip#1{\advance\bio@tempdim#1\relax
-	\ifdim\bio@tempdim>\@tempdimb \@tempdimb\bio@tempdim\fi}
-\def\bio@cgelt#1{\@tempdima\@tempdimb \bio@tempdim\z@}
-\def\bio@popstack\@elt#1#2\@nil{\edef\bio@bstack{#2}\bio@ipopstack#1}
-\def\bio@ipopstack#1#2#3#4#5{\def\bio@left{#1}\def\bio@right{#2}%
-	\def\bio@leftx{#3}\def\bio@rightx{#4}\bio@hX#5\relax}
-\def\bio@pushstack{\def\bio@bstackx{}%
-	\expandafter\bio@ipushstack\bio@bstack\@elt\@nil}
-\def\bio@ipushstack\@elt#1{\def\@tempc{#1}%
-	\ifx\@tempc\@nnil \edef\bio@bstack{\bio@bstackx\bio@stackelt}%
-		\let\bio@nextC\relax \else
-	\bio@iipushstack#1\fi\bio@nextC}
-\def\bio@iipushstack#1#2#3#4#5{\ifdim#5>\bio@hX
-	\edef\bio@bstackx{\bio@bstackx\bio@stackelt
-		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
-		\let\bio@nextC\bio@pushstackend\else
-	\edef\bio@bstackx{\bio@bstackx
-		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
-		\let\bio@nextC\bio@ipushstack\fi}
-\def\bio@pushstackend#1\@elt\@nil{\edef\bio@bstack{\bio@bstackx#1}}
-\def\bio@stackelt{\@elt{{\bio@left}{\bio@right}{\bio@leftx}{\bio@rightx}%
-	{\the\bio@hX}}}
-\def\bio@addheight#1#2{\def\@elt##1{\advance#1\dimen##1}#2\let\@elt\relax}
-\def\bio@car#1#2#3{\expandafter\bio@icar#3\@nil#1#2#3}
-\def\bio@icar\@elt#1#2\@nil#3#4#5{#3=\dimen#1\relax\def#4{#1}\def#5{#2}}
-
-
-%%%%%% Miscellaneous %%%%%%
-
-\flushbottom
-
-\ifDS@english
-\hbadness9999 \tolerance9999
-\else
-\hbadness5000 \tolerance5000
-\pretolerance\m@ne
-\fi
-
-\input{ipsjcommon.sty}
-
-\twocolumn
-
-\endinput
--- a/ipsjsort.bst	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1285 +0,0 @@
-% ipsjsort.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
-% ipsjsort.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
-% ipsjsort.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
-% jssst.bst tomura@etl.go.jp (Satoru Tomura)
-% BibTeX standard bibliography style `jplain'
-	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
-	% by Shouichi Matsui, matsui@denken.junet
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-    yomi
-  }
-  {}
-  { label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { before.year }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-  #4 'before.year :=					% 1.00(1)
-}
-
-STRINGS { s t }
-
-FUNCTION {is.kanji}
-{ is.kanji.str$ }					% 1.00(2), 2.00(1)
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { duplicate$ is.kanji				% 2.00(2)
-	{ "," * write$ }
-	{ ", " * write$ }
-      if$
-    }
-    { output.state after.block =
-	{ add.period$ write$
-	  newline$
-	  "\newblock " write$
-	}
-	{ output.state before.all =
-	    'write$
-	    { output.state before.year =		% 1.00(1)
-		{ " " * write$ }
-		{ add.period$ " " * write$ }
-	      if$
-	    }
-	  if$
-	}
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {required.argument}
-{ 't :=
-  empty$
-    {"Missing required argument " t * " in " * cite$ * warning$}
-    'skip$
-  if$
-}
-
-FUNCTION {required.exclusive.or.argument}
-{ 't :=
-  empty$
-    { 's := 
-      empty$
-        { t " or " * s * " is missing in " * cite$ * warning$}
-        'skip$
-      if$
-    }
-    { 's :=
-      empty$
-        'skip$
-        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
-      if$
-    }
-  if$
-}
-
-FUNCTION {required.and.or.argument}
-{ 't := empty$
-     { 's := empty$
-         { "there's no " t * " and/or " * s * cite$ * warning$ }
-         'skip$
-       if$
-     }
-     { pop$ pop$ }
-  if$
-}
-
-FUNCTION {optional.series.volume.number.argument}
-{ series empty$
-    { volume empty$
-        { number empty$
-            'skip$
-            { "there's a number but no series in " cite$ * warning$ }
-          if$
-        }
-        { number empty$
-            { "there's a volume but no series in " cite$ * warning$ }
-            { "you can use only one of volume and number in " cite$ * warning$}
-          if$
-        }
-     if$
-    }
-    { volume empty$
-        { number empty$
-            { "there's a series but neither volume nor number in " cite$ * warning$ }
-            'skip$
-          if$
-        }
-        { number empty$
-            'skip$
-            { "you can use only one of volume and number in " cite$ * warning$ }
-          if$
-        }
-     if$
-   }
-   if$
-}            
-
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-	'skip$
-	{ after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { duplicate$ is.kanji
-        'skip$						% 1.00(3)
-        { "{\em " swap$ * "}" * }			% 2.00(3)
-      if$
-    }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}					% 1.00(4), 2.00(4)
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
-	{ duplicate$ text.length$ #6 >
-	    { 't := }
-	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
-	  if$
-	}
-        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
-      if$
-      nameptr #1 >
-	{ namesleft #1 >
-	    { s is.kanji
-		{ "," }
-		{ ", " }
-	      if$
-	      * t * }
-	    { t "others" =
-		{ s is.kanji
-			{"ほか" * }
-			{" et al." * }
-		      if$
-                }
-		{ s is.kanji
-			{"," * t * }	% put "," here for Kanji (H.N.)
-			{" and " * t * }
-	     	      if$
-		}
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-}
-
-FUNCTION {add.colon}					% 2.00(5)
-{ duplicate$ is.kanji
-    { "\:" * }						% 2.12(1)
-    { ": " * }
-  if$
-}
-
-FUNCTION {format.editors.inparen}			% 2.00(6)
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ editor is.kanji
-		{",編" * } {", eds." *} if$
-	}
-	{ editor is.kanji
-		{",編" *}  {", ed." *} if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ editor is.kanji
-		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
-	}
-	{ editor is.kanji
-		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-	{ t #1 #2 substring$ "--" = not
-	    { "--" *
-	      t #2 global.max$ substring$ 't :=
-	    }
-	    {   { t #1 #1 substring$ "-" = }
-		{ "-" *
-		  t #2 global.max$ substring$ 't :=
-		}
-	      while$
-	    }
-	  if$
-	}
-	{ t #1 #1 substring$ *
-	  t #2 global.max$ substring$ 't :=
-	}
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ before.year 'output.state :=				% 1.00(1)
-  year empty$
-    { month empty$
-	{ "" }
-	{ "there's a month but no year in " cite$ * warning$
-          ""						% 1.00(5)
-	}
-      if$
-    }
-    { "(" year ")" * * }				% 1.00(5)
-  if$
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { "\ " }						% 1.00(6)
-  if$
-  swap$ * *
-}
-
-FUNCTION {output.volume}
-{ 
-  volume empty$
-    'skip$
-    { "Vol.~" volume * output}
-  if$
-
-}
-
-FUNCTION {output.number}
-{
-  number empty$
-    'skip$
-    { "No.~" number * output}
-  if$
-}
-
-FUNCTION {output.series.volume.number}
-{ series empty$
-    { output.volume
-      output.number }
-    { series is.kanji
-      volume empty$
-      number empty$
-      or
-      and
-        { series " " * volume * number * output}
-        { series output
-          output.volume
-          output.number}
-      if$
-   }
- if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-	{ edition "l" change.case$ " edition" * }
-	{ edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-	{ #1 'multiresult := }
-	{ t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}					% 1.00(7)
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-	{ "pp." pages n.dashify tie.or.space.connect }
-	{ "p." pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}				% 1.00(8)
-{ volume empty$
-  { ""}
-  { " Vol.~" volume * }
-  if$ 
-  number empty$
-    'skip$
-    { volume empty$
-	{ "there's a number but no volume in " cite$ * warning$ }
-	{ "," *}
-      if$
-      " No.~" number * *
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-	{ pop$ format.pages }
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
-	{ "chapter" chapter tie.or.space.connect }
-        { type is.kanji 
-             { chapter type tie.or.space.connect }
-             { type "l" change.case$ chapter tie.or.space.connect }
-          if$
-        }
-      if$
-      pages empty$
-	'skip$
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { booktitle emphasize
-      editor empty$
-	'skip$
-	{ booktitle is.kanji
-	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
-	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { title empty$
-        { "Technical Report" }
-        { title is.kanji
-            { "技術報告" }
-            { "Technical Report" }
-          if$
-        }
-      if$
-    }
-    {type}
-  if$
-  number empty$
-    { "t" change.case$ }
-    { " " number * * }
-  if$
-}
-
-FUNCTION {format.article.crossref}			% 2.00(8)
-{ key empty$
-    { journal empty$
-	{ "need key or journal for " cite$ * " to crossref " * crossref *
-	  warning$
-	  ""
-	}
-	{ journal emphasize }				% 1.00(10)
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}			% 1.00(11)
-{ editor #1
-  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
-  format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { editor is.kanji
-	  {pop$ "ほか" *} {pop$ " et al." * } if$
-    }
-    { #2 <
-	'skip$
-	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-	    { editor is.kanji
-		{"ほか" *} {" et al." * } if$
-	    }
-	    { editor is.kanji
-		{"・" * editor #2 "{ff}" format.name$ * }
-		{" and " * editor #2 "{vv }{ll}" format.name$ * }
-	      if$
-	    }
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}				% 2.00(8)
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ series empty$
-	    { "need editor, key, or series for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-	    { series emphasize }			% 1.00(10)
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { format.crossref.editor }
-  if$
-  " \cite{" * crossref * "}" *
-  volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
-    { duplicate$ is.kanji { "," } { ", "} if$ *
-      "Vol." * volume tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ booktitle empty$
-	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-	    { booktitle emphasize }			% 1.00(10)
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { format.crossref.editor }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ 
-%%%%
-  author  "author"  required.argument
-  title   "title"   required.argument
-  journal "journal" required.argument
-  year    "year"    required.argument
-%%%% jssst
-  volume  "volume"  
-  number  "number"  
-     required.and.or.argument
-  pages   "pages"   required.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { journal emphasize output
-      format.vol.num.pages output			% 1.00(12)
-      format.date output
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ 
-%%%%
-  author  "author"
-  editor  "editor"
-    required.exclusive.or.argument
-  title   "title"  required.argument
-  publisher "publisher" required.argument
-  year    "year" required.argument
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem
-  author empty$
-    { format.editors}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  crossref missing$
-    { output.series.volume.number
-      publisher output
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{
-%%%%
-  title   "title"   required.argument
-%%%% jssst
-  author  "author"  required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ 
-%%%%
-  author  "author"
-  editor  "editor"
-     required.exclusive.or.argument
-  title   "title"  required.argument
-  chapter "chapter"
-  pages   "pages"
-     required.and.or.argument
-  publisher  "publisher" required.argument
-  year       "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem 
-  author empty$
-    { format.editors}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  crossref missing$
-    { output.series.volume.number
-      format.chapter.pages output
-      publisher output
-    }
-    { format.chapter.pages output
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date output					% 1.00(13)
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{
-%%%%
-  author    "author"    required.argument
-  title     "title"     required.argument
-  booktitle "booktitle" required.argument
-  publisher "publisher" required.argument
-  year      "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { format.in.ed.booktitle output
-      output.series.volume.number
-      publisher output
-      address output
-      format.edition output
-      format.chapter.pages output			% 1.00(13)
-      format.date output
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{
-%%%%
-  author    "author"    required.argument
-  title     "title"     required.argument
-  year      "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { format.in.ed.booktitle output
-      booktitle "booktitle" required.argument
-      output.series.volume.number
-      address output
-      organization output
-      publisher output
-      format.pages output
-      format.date output				% 1.00(13)
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{	
-%%%%
-  title   "title"    required.argument
-%%%% jssst
-  author   "author"
-  organization "organazaion"
-     required.exclusive.or.argument
-%%%%
-  output.bibitem
-  author empty$
-    { organization}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  author empty$
-    'skip$
-    { organization output }
-  if$
-  address output
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{
-%%%%
-  author   "author"  required.argument
-  title    "title"   required.argument
-  school   "school"  required.argument
-  year     "year"    required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  author empty$
-    { "Master's thesis" }
-    { author is.kanji
-        { "修士論文" }  
-        { "Master's thesis" }
-      if$
-    }
-  if$
-  format.thesis.type output.nonnull
-  school output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{
-%%%%
-%%%% jssst
-  author "author" required.argument
-  title  "title"  required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  howpublished output
-  format.date output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{
-%%%%
-  author   "author"  required.argument
-  title    "title"   required.argument
-  school   "school"  required.argument
-  year     "year"    required.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output						% 2.00(9)
-  author empty$
-    { "PhD Thesis" }
-    { author is.kanji
-        { "博士論文" }
-        { "PhD Thesis" }
-      if$
-    }
-  if$
-  format.thesis.type output.nonnull
-  school output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{
-%%%%
-  title  "title"  required.argument
-  year   "year"   required.argument
-
-  optional.series.volume.number.argument
-%%%% jssst
-  editor  "editor"
-  organization "organization"
-      required.exclusive.or.argument 
-%%%%
-  output.bibitem 
-  editor empty$
-    { organization }
-    { format.editors }
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  output.series.volume.number
-  address output
-  editor empty$
-    'skip$
-    { organization output }
-  if$
-  publisher output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{
-%%%%
-  author   "author"   required.argument
-  title    "title"    required.argument
-  institution "institution" required.argument
-  year     "year"     required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  format.tr.number output.nonnull
-  institution output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{
-%%%%
-  author   "author"   required.argument
-  title    "title"    required.argument
-  note     "note"     required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  yomi empty$
-     'skip$
-     { yomi 's := }
-  if$
-
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-	{ "   " * }
-	'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-	{ "et al" * }
-	{ t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
-    { key empty$
-	{ "to sort, need author or key in " cite$ * warning$
-	  ""
-	}
-	{ key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
-    { editor empty$
-	{ key empty$
-	    { "to sort, need author, editor, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need author, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need editor, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-	'editor.organization.sort
-	{ type$ "manual" =
-	    'author.organization.sort
-	    'author.sort
-	  if$
-	}
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION {begin.bib}
-{ preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
-
-
--- a/ipsjunsrt.bst	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1135 +0,0 @@
-% ipsjunsrt.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
-% ipsjunsrt.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
-% ipsjunsrt.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
-% jssst.bst tomura@etl.go.jp (Satoru Tomura)
-% BibTeX standard bibliography style `jplain'
-	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
-	% by Shouichi Matsui, matsui@denken.junet
-
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-    yomi
-  }
-  {}
-  { label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { before.year }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-  #4 'before.year :=					% 1.00(1)
-}
-
-STRINGS { s t }
-
-FUNCTION {is.kanji}
-{ is.kanji.str$ }					% 1.00(2), 2.00(1)
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { duplicate$ is.kanji				% 2.00(2)
-	{ "," * write$ }
-	{ ", " * write$ }
-      if$
-    }
-    { output.state after.block =
-	{ add.period$ write$
-	  newline$
-	  "\newblock " write$
-	}
-	{ output.state before.all =
-	    'write$
-	    { output.state before.year =		% 1.00(1)
-		{ " " * write$ }
-		{ add.period$ " " * write$ }
-	      if$
-	    }
-	  if$
-	}
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {required.argument}
-{ 't :=
-  empty$
-    {"Missing required argument " t * " in " * cite$ * warning$}
-    'skip$
-  if$
-}
-
-FUNCTION {required.exclusive.or.argument}
-{ 't :=
-  empty$
-    { 's := 
-      empty$
-        { t " or " * s * " is missing in " * cite$ * warning$}
-        'skip$
-      if$
-    }
-    { 's :=
-      empty$
-        'skip$
-        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
-      if$
-    }
-  if$
-}
-
-FUNCTION {required.and.or.argument}
-{ 't := empty$
-     { 's := empty$
-         { "there's no " t * " and/or " * s * cite$ * warning$ }
-         'skip$
-       if$
-     }
-     { pop$ pop$ }
-  if$
-}
-
-FUNCTION {optional.series.volume.number.argument}
-{ series empty$
-    { volume empty$
-        { number empty$
-            'skip$
-            { "there's a number but no series in " cite$ * warning$ }
-          if$
-        }
-        { number empty$
-            { "there's a volume but no series in " cite$ * warning$ }
-            { "you can use only one of volume and number in " cite$ * warning$}
-          if$
-        }
-     if$
-    }
-    { volume empty$
-        { number empty$
-            { "there's a series but neither volume nor number in " cite$ * warning$ }
-            'skip$
-          if$
-        }
-        { number empty$
-            'skip$
-            { "you can use only one of volume and number in " cite$ * warning$ }
-          if$
-        }
-     if$
-   }
-   if$
-}            
-
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-	'skip$
-	{ after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.sentence
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { duplicate$ is.kanji
-        'skip$						% 1.00(3)
-        { "{\em " swap$ * "}" * }			% 2.00(3)
-      if$
-    }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}					% 1.00(4), 2.00(4)
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
-	{ duplicate$ text.length$ #6 >
-	    { 't := }
-	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
-	  if$
-	}
-        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
-      if$
-      nameptr #1 >
-	{ namesleft #1 >
-	    { s is.kanji
-		{ "," }
-		{ ", " }
-	      if$
-	      * t * }
-	    { t "others" =
-		{ s is.kanji
-			{"ほか" * }
-			{" et al." * }
-		      if$
-                }
-		{ s is.kanji
-			{"," * t * }	% put "," here for Kanji (H.N.)
-			{" and " * t * }
-	     	      if$
-		}
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names }
-  if$
-}
-
-FUNCTION {add.colon}					% 2.00(5)
-{ duplicate$ is.kanji
-    { "\:" * }						% 2.12(1)
-    { ": " * }
-  if$
-}
-
-FUNCTION {format.editors.inparen}			% 2.00(6)
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ editor is.kanji
-		{",編" * } {", eds." *} if$
-	}
-	{ editor is.kanji
-		{",編" *}  {", ed." *} if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names
-      editor num.names$ #1 >
-	{ editor is.kanji
-		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
-	}
-	{ editor is.kanji
-		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-	{ t #1 #2 substring$ "--" = not
-	    { "--" *
-	      t #2 global.max$ substring$ 't :=
-	    }
-	    {   { t #1 #1 substring$ "-" = }
-		{ "-" *
-		  t #2 global.max$ substring$ 't :=
-		}
-	      while$
-	    }
-	  if$
-	}
-	{ t #1 #1 substring$ *
-	  t #2 global.max$ substring$ 't :=
-	}
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.date}
-{ before.year 'output.state :=				% 1.00(1)
-  year empty$
-    { month empty$
-	{ "" }
-	{ "there's a month but no year in " cite$ * warning$
-          ""						% 1.00(5)
-	}
-      if$
-    }
-    { "(" year ")" * * }				% 1.00(5)
-  if$
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { "\ " }						% 1.00(6)
-  if$
-  swap$ * *
-}
-
-FUNCTION {output.volume}
-{ 
-  volume empty$
-    'skip$
-    { "Vol.~" volume * output}
-  if$
-
-}
-
-FUNCTION {output.number}
-{
-  number empty$
-    'skip$
-    { "No.~" number * output}
-  if$
-}
-
-FUNCTION {output.series.volume.number}
-{ series empty$
-    { output.volume
-      output.number }
-    { series is.kanji
-      volume empty$
-      number empty$
-      or
-      and
-        { series " " * volume * number * output}
-        { series output
-          output.volume
-          output.number}
-      if$
-   }
- if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-	{ edition "l" change.case$ " edition" * }
-	{ edition "t" change.case$ " edition" * }
-      if$
-    }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-	{ #1 'multiresult := }
-	{ t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pages}					% 1.00(7)
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-	{ "pp." pages n.dashify tie.or.space.connect }
-	{ "p." pages tie.or.space.connect }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.vol.num.pages}				% 1.00(8)
-{ volume empty$
-  { ""}
-  { " Vol.~" volume * }
-  if$ 
-  number empty$
-    'skip$
-    { volume empty$
-	{ "there's a number but no volume in " cite$ * warning$ }
-	{ "," *}
-      if$
-      " No.~" number * *
-    }
-  if$
-  pages empty$
-    'skip$
-    { duplicate$ empty$
-	{ pop$ format.pages }
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
-	{ "chapter" chapter tie.or.space.connect }
-        { type is.kanji 
-             { chapter type tie.or.space.connect }
-             { type "l" change.case$ chapter tie.or.space.connect }
-          if$
-        }
-      if$
-      pages empty$
-	'skip$
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { booktitle emphasize
-      editor empty$
-	'skip$
-	{ booktitle is.kanji
-	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
-	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { title empty$
-        { "Technical Report" }
-        { title is.kanji
-            { "技術報告" }
-            { "Technical Report" }
-          if$
-        }
-      if$
-    }
-    {type}
-  if$
-  number empty$
-    { "t" change.case$ }
-    { " " number * * }
-  if$
-}
-
-FUNCTION {format.article.crossref}			% 2.00(8)
-{ key empty$
-    { journal empty$
-	{ "need key or journal for " cite$ * " to crossref " * crossref *
-	  warning$
-	  ""
-	}
-	{ journal emphasize }				% 1.00(10)
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}			% 1.00(11)
-{ editor #1
-  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
-  format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { editor is.kanji
-	  {pop$ "ほか" *} {pop$ " et al." * } if$
-    }
-    { #2 <
-	'skip$
-	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-	    { editor is.kanji
-		{"ほか" *} {" et al." * } if$
-	    }
-	    { editor is.kanji
-		{"・" * editor #2 "{ff}" format.name$ * }
-		{" and " * editor #2 "{vv }{ll}" format.name$ * }
-	      if$
-	    }
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}				% 2.00(8)
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ series empty$
-	    { "need editor, key, or series for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-	    { series emphasize }			% 1.00(10)
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { format.crossref.editor }
-  if$
-  " \cite{" * crossref * "}" *
-  volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
-    { duplicate$ is.kanji { "," } { ", "} if$ *
-      "Vol." * volume tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ booktitle empty$
-	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-	    { booktitle emphasize }			% 1.00(10)
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { format.crossref.editor }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ 
-%%%%
-  author  "author"  required.argument
-  title   "title"   required.argument
-  journal "journal" required.argument
-  year    "year"    required.argument
-%%%% jssst
-  volume  "volume"  
-  number  "number"  
-     required.and.or.argument
-  pages   "pages"   required.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { journal emphasize output
-      format.vol.num.pages output			% 1.00(12)
-      format.date output
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ 
-%%%%
-  author  "author"
-  editor  "editor"
-    required.exclusive.or.argument
-  title   "title"  required.argument
-  publisher "publisher" required.argument
-  year    "year" required.argument
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem
-  author empty$
-    { format.editors}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  crossref missing$
-    { output.series.volume.number
-      publisher output
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{
-%%%%
-  title   "title"   required.argument
-%%%% jssst
-  author  "author"  required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  howpublished output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ 
-%%%%
-  author  "author"
-  editor  "editor"
-     required.exclusive.or.argument
-  title   "title"  required.argument
-  chapter "chapter"
-  pages   "pages"
-     required.and.or.argument
-  publisher  "publisher" required.argument
-  year       "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem 
-  author empty$
-    { format.editors}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  crossref missing$
-    { output.series.volume.number
-      format.chapter.pages output
-      publisher output
-    }
-    { format.chapter.pages output
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.edition output
-  format.date output					% 1.00(13)
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{
-%%%%
-  author    "author"    required.argument
-  title     "title"     required.argument
-  booktitle "booktitle" required.argument
-  publisher "publisher" required.argument
-  year      "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { format.in.ed.booktitle output
-      output.series.volume.number
-      publisher output
-      address output
-      format.edition output
-      format.chapter.pages output			% 1.00(13)
-      format.date output
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{
-%%%%
-  author    "author"    required.argument
-  title     "title"     required.argument
-  year      "year"      required.argument
-
-  optional.series.volume.number.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output
-  crossref missing$
-    { format.in.ed.booktitle output
-      booktitle "booktitle" required.argument
-      output.series.volume.number
-      address output
-      organization output
-      publisher output
-      format.pages output
-      format.date output				% 1.00(13)
-    }
-    { format.incoll.inproc.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{	
-%%%%
-  title   "title"    required.argument
-%%%% jssst
-  author   "author"
-  organization "organazaion"
-     required.exclusive.or.argument
-%%%%
-  output.bibitem
-  author empty$
-    { organization}
-    { format.authors}
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  author empty$
-    'skip$
-    { organization output }
-  if$
-  address output
-  format.edition output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{
-%%%%
-  author   "author"  required.argument
-  title    "title"   required.argument
-  school   "school"  required.argument
-  year     "year"    required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  author empty$
-    { "Master's thesis" }
-    { author is.kanji
-        { "修士論文" }  
-        { "Master's thesis" }
-      if$
-    }
-  if$
-  format.thesis.type output.nonnull
-  school output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{
-%%%%
-%%%% jssst
-  author "author" required.argument
-  title  "title"  required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  howpublished output
-  format.date output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{
-%%%%
-  author   "author"  required.argument
-  title    "title"   required.argument
-  school   "school"  required.argument
-  year     "year"    required.argument
-%%%%
-  output.bibitem 
-  format.authors add.colon				% 2.00(5)
-  title output						% 2.00(9)
-  author empty$
-    { "PhD Thesis" }
-    { author is.kanji
-        { "博士論文" }
-        { "PhD Thesis" }
-      if$
-    }
-  if$
-  format.thesis.type output.nonnull
-  school output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{
-%%%%
-  title  "title"  required.argument
-  year   "year"   required.argument
-
-  optional.series.volume.number.argument
-%%%% jssst
-  editor  "editor"
-  organization "organization"
-      required.exclusive.or.argument 
-%%%%
-  output.bibitem 
-  editor empty$
-    { organization }
-    { format.editors }
-  if$
-  add.colon						% 2.00(5)
-  title emphasize output
-  output.series.volume.number
-  address output
-  editor empty$
-    'skip$
-    { organization output }
-  if$
-  publisher output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{
-%%%%
-  author   "author"   required.argument
-  title    "title"    required.argument
-  institution "institution" required.argument
-  year     "year"     required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  format.tr.number output.nonnull
-  institution output
-  address output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{
-%%%%
-  author   "author"   required.argument
-  title    "title"    required.argument
-  note     "note"     required.argument
-%%%%
-  output.bibitem
-  format.authors add.colon				% 2.00(5)
-  title output
-  format.date output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION {begin.bib}
-{ preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
-
-
--- a/opencl.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-\section{Parallel Computing Platform}
-\subsection{OpenCL}
-OpenCL とは、Multi Core CPU と GPU のようなヘテロジニアスな環境を利用した並列計算を支援するフレームワークである。
-演算用のプロセッサ(本研究では GPU)上で動作するプログラム OpenCL C という言語で記述する。
-OpenCL C で記述したプログラムを GPU 上で実行させるために OpenCL Runtime API を利用する。
-OpenCL ではオペレーティングシステムなどが処理されるメイン CPU のことを host、GPGPU が可能なグラフィックボードなどのことを device と定義している。
-OpenCL Application は host 側のプログラムと device 側のプログラムが一体となって動作する。
-この device 上で動作するプログラムを特別に kernel と呼ぶ。
-
-\subsubsection{CommandQueue}
-OpenCL では、device の操作に CommandQueue を使用する。
-CommandQueue は device に Operation を送るための仕組みである。
-kernel の実行、input buffer の読み込み、output buffer への書き込みなどが Operation となる。
-
-CommandQueue に投入された Operation は投入された順序で実行される。
-CommandQueue を生成するときプロパティを指定することで Operation を投入された順序を無視して(out of order)実行することが可能になる。
-また複数の CommandQueue を生成し、device に投入することでも our of order で実行することが可能である。
-
-out of order で実行する場合、データの依存関係を設定する必要がある。各 Operation を発行する関数には event\_wait\_list と event を指定することができ、これらを利用してデータの依存関係を設定することができる。
-out of order 実行を可能にするプロパティをサポートしている device が少ないため、今回は複数の CommandQueue を用いる方法で実装を行なった。
-
-\subsubsection{OpenCL におけるデータ並列}
-3D グラフィックのような多次元のデータを処理する場合に高い並列度を保つには、データを分割して並列に実行する機能が必要である。
-これを OpenCL ではデータ並列と呼んでいる。
-OpenCL では次元数に対応する index があり、OpenCL は1つの記述から index の異なる複数の kernel を自動生成する。
-その添字を global\_id と呼ぶ。
-このとき入力されたデータは WorkItem という処理単位に分割される。
-
-OpenCL は WorkItem に対して、それぞれを識別する ID(global\_id)を割り当てる。
-kernel は get\_global\_id という API によって ID を取得し、取得した ID に対応するデータに対して処理を行うことでデータ並列を実現する。
-
-データ並列による kernel 実行の場合、clEnqueueNDRangeKernel を使用する。
-この関数の引数として WorkItem の数と次元数を指定することでデータ並列で実行することができる。
-
-\subsection{CUDA}
-CUDA とは、半導体メーカー NVIDIA 社が提供する GPU コンピューティング向けの総合開発環境でコンパイラ、ライブラリ、デバッガなどから構成される。プログラミング言語である CUDA C は C 言語ベースに拡張を加えたものである。
-
-CUDA には CUDA Runtime API と CUDA Driver API の2種類がある。
-Driver API は Runtime API に比べてプログラマが管理すべきリソースが多い。
-しかし、Runtime API より柔軟な処理を行うことができる。
-今回は Driver API を使用して実装した。
-
-CUDA も OpenCL と同様に、制御を行う CPU 側を host、GPU 側を device と定義している。
-また、device 上で動作するプログラムも OpenCL と同様に kernel と呼ぶ。
-
-\subsubsection{Stream}
-CUDA には OpenCL の CommandQueue と似たような仕組みとして Stream がある。
-Stream は host 側で発行された Operation を一連の動作として device で実行する。
-Stream に発行された Operation は発行された順序で実行されることが保証されている。
-異なる Stream に発行された Operation に依存関係が存在しない場合、Operation を並列に実行することができる。
-
-Stream は cuStreamCreate という Driver API で生成される。
-引数に Stream を指定しない API はすべて host 側をブロックする同期的な処理となる。
-複数の Stream を同時に走らせ Operation を並列に実行するためには非同期な処理を行う API を利用する必要がある。
-
-\subsubsection{CUDA におけるデータ並列}
-CUDA では OpenCL の WorkItem に相当する単位を thread と定義している。
-この thread をまとめたものを block と呼ぶ。
-CUDA でデータ並列による kernel 実行をする場合、cuLaunchKernel API を使用する。
-この関数は引数として各座標の block 数と各座標の block 1つ当たりの thread 数を指定することでデータ並列で実行できる。
-
-cuLaunckKernel で kernel を実行すると各 thread に対して block ID と thread ID が割り当てられる。
-CUDA には OpenCL とは異なり、ID を取得する API は存在しない。
-代わりに、kernel に組み込み変数が準備されており、それを参照し、対応するデータに対し処理を行うことでデータ並列を実現する。
-組み込み変数は以下の通りである。
-
-\begin{itemize}
-  \item uint3 blockDim
-  \item uint3 blockIdx
-  \item uint3 threadIdx
-\end{itemize}
-
-各組み込み変数はベクター型で、blockDim.x とすると x 座標の thread 数を参照することができる。
-blockIdx.x とすると x 座標の block ID が参照でき、threadIdx.x とすると x 座標の thread ID を参照することができる。
-blockDim.x * blockIdx.x + threadIdx.x で OpenCL の get\_global\_id(0) で取得できる ID に相当する ID を算出することができる。
-例として、ある kernel で get\_global\_id(0) の返り値が13の場合、CUDA では図:\ref{fig:calculate_index}のようになる。
-
-\begin{figure}[!h]
-  \begin{center}
-    \includegraphics[scale=0.4]{./images/culculate_index.pdf}
-  \end{center}
-  \caption{Calculate Index}
-  \label{fig:calculate_index}
-\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/Makefile	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,35 @@
+TARGET = sigos
+
+LATEX   = platex
+BIBTEX  = pbibtex
+#DVIPS   = dvips
+#DVIPDFM = dvipdfmx
+RM      = rm -f
+DVIPDF=dvipdfmx -p a4
+#  Option definitions
+#DVIPDFMOPT = 
+#DVIPSOPT   = -D 720 -mode esphi -O 0mm,0mm -N0 
+
+#  Suffixes definitions
+.SUFFIXES: .tex .dvi .pdf
+
+.tex.dvi:
+	$(LATEX) $<
+	$(BIBTEX) $(TARGET)
+	$(LATEX) $<
+	$(LATEX) $<
+
+.dvi.pdf:
+	$(DVIPDF) $(DVIPDF_OPT) $<
+
+
+all: $(TARGET).pdf
+	open $(TARGET).pdf
+
+dvi: $(TARGET).dvi
+
+pdf: $(TARGET).pdf
+
+
+clean:
+	rm -f *.dvi *.aux *.log *.pdf *.ps *.gz *.bbl *.blg *~ *.core
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/benchmark.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,73 @@
+\section{Benchmark}
+本章では、WordCount, FFT を例題として用い、本研究で実装した GpuScheduler および CudaScheduler の測定を行う。
+
+測定環境
+\begin{itemize}
+\item OS : MacOS 10.9.2
+\item CPU : 2*2.66GHz 6-Core Intel Xeon
+\item GPU : NVIDIA Quadro K5000 4096MB
+\item Memory : 16GB 1333MHz DDR3
+\item Compiler : Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
+\end{itemize}
+
+\section{WordCount}
+今回は 100MB のテキストファイルに対して WordCount を行なった。
+表:\ref{table:wordcount}は実行結果である。
+
+\begin{table}[!h]
+  \begin{center}
+    \small
+    \begin{tabular}[t]{c||r} \hline
+      & Run Time \\ \hline
+      1 CPU & 0.73s \\ \hline
+      2 CPU & 0.38s \\ \hline
+      4 CPU & 0.21s \\ \hline
+      8 CPU & 0.12s \\ \hline
+      OpenCL(no pipeline) & 48.32s \\ \hline
+      OpenCL(pipeline) & 46.74s \\ \hline
+      OpenCL Data Parallel & 0.38s \\ \hline
+      CUDA(no pipeline) & 55.71s \\ \hline
+      CUDA(pipeline) & 10.26s \\ \hline
+      CUDA Data Parallel & 0.71s \\ \hline
+    \end{tabular}
+    \caption{WordCount}
+    \label{table:wordcount}
+  \end{center}
+\end{table}
+
+パイプライン処理を行うことで CUDA では5.4倍の性能向上が見られた。
+しかし、OpenCL ではパイプライン処理による性能向上が見られなかった。
+OpenCL と CUDA を用いたそれぞれの Scheduler はほぼ同等な実装である。
+OpenCL でパイプライン処理を行うために実行機構を見直す必要がある。
+一方で、データ並列による実行は 1CPU に対して OpenCL では1.9倍、CUDA では1.02倍という結果になった。
+どちらもタスク並列による実行よりは優れた結果になっている。
+CUDA によるデータ並列実行の機構を見直す必要がある。
+
+\subsection{FFT}
+次に、フーリエ変換と周波数フィルタによる画像処理を行う例題を利用し測定を行う。
+使用する画像のサイズは512*512で、画像に対して High Pass Filter をかけて変換を行う。
+表:\ref{table:fft}は実行結果である。
+
+\begin{table}[!h]
+  \begin{center}
+    \small
+    \begin{tabular}[t]{c||r} \hline
+      & Run Time \\ \hline
+      1 CPU & 0.48s \\ \hline
+      2 CPU & 0.26s \\ \hline
+      4 CPU & 0.17s \\ \hline
+      8 CPU & 0.11s \\ \hline
+      OpenCL & 0.09s \\ \hline
+      CUDA & 0.21s \\ \hline
+    \end{tabular}
+    \label{table:fft}
+    \caption{FFT}
+  \end{center}
+\end{table}
+
+1CPU に対して OpenCL ではの5.3倍、CUDA では2.2倍の性能向上が見られた。
+しかし、WordCount の場合と同様に OpenCL と CUDA で差がある。
+WordCount と FFT の結果から CudaScheduler によるデータ並列実行機構を見直す必要がある。
+また、FFT の OpenCL の kernel は cl\_float2 というベクター型を用いている。
+CUDA では cl\_float2 を float に変換して演算している。
+OpenCL ではベクターの演算なので、その部分に最適化がかかっており結果が良くなっている可能性がある。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/bib.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,2 @@
+\bibliographystyle{ipsjunsrt}
+\bibliography{sigos}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/bibliography.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,35 @@
+
+\begin{thebibliography}{10}
+
+\bibitem{akira}
+{Akira KAMIZATO.}: Cell を用いたゲームフレームワークの提案,琉球大学工学部情報工学科平成19年度学位論文(修士) (2008).
+
+\bibitem{FFTonGPU}
+{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}:性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ,東京工業大学 (2008).
+
+\bibitem{toma:2012a}
+{Daichi TOMA and Shinji KONO}:Cerium Task Manager におけるマルチコア上での並列実行機構の実装(2012)
+
+\bibitem{gongo:2008a}
+{Wataru MIYAGUNI,Shinji KONO}:Cell 用の Fine-grain Task Manager の実装
+
+\bibitem{opencl:ref}
+{Aaftab Munshi, Khronos OpenCL Working Group}:The OpenCL Specification Version 1.0 (2007)
+
+\bibitem{cell}
+{Sony Corporation.}: {\em Cell broadband engine architecture} (2005).
+
+\bibitem{spurs}
+{Keisuke INOUE.}: Cell プロセッサ向け実行環境(SPU Centric Execution
+  Model),先進的計算基盤システムシンポジウム SACSIS (2006).
+
+\bibitem{kono}
+{Shinji KONO.}: 検証を自身で表現できるハードウェア、ソフトウェア記述言語
+  Continuation ba sed C と、その Cell
+  への応用,電子情報通信学会VLSI設計技術研究会 (2008).
+
+\bibitem{fuchita}
+{Yoshihiko, FUCHITA.}: 分散プログラミングモデル Federated Linda
+  と分散デバッグ開発,琉球大学工学部情報工学科平成19年度学位論文(修士) (2008).
+
+\end{thebibliography}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/book.bib	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,25 @@
+@BOOK{clay200912, 
+	title={並行コンピューティング技法 - 実践マルチコア/マルチスレッドプログラミング},
+	author={Clay Breshears},
+	publisher={オライリージャパン},
+	year={2009},
+	month={12},
+	isbn={9784873114354},
+	url={http://amazon.co.jp/o/ASIN/4873114357/},
+	price={¥ 3,360},
+	totalpages={284},
+	timestamp={2011.11.17},
+}
+
+@BOOK{fix200609, 
+	title={マルチコアCPUのための並列プログラミング - 並列処理\&マルチスレッド入門},
+	author={安田 絹子 and 飯塚 博道 and 青柳 信吾 and 小林 林広 and 阿部 貴之},
+	publisher={秀和システム},
+	year={2006},
+	month={9},
+	isbn={9784798014623},
+	url={http://amazon.co.jp/o/ASIN/4798014621/},
+	price={¥ 3,360},
+	totalpages={367},
+	timestamp={2011.11.17},
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/cerium.bib	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,315 @@
+@manual{cell_abi,
+author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
+title ="{Cell Broadband Engine Linux Reference Implementation Application Binary Interface Specification}",
+year = 2007
+}
+
+@manual{cell_cpp,
+author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
+title = "{C/C++ Language Extensions for Cell Broadband Engine Architecture Version 2.6}",
+year = 2008
+}
+
+@misc{osmesa,
+author = "",
+title = "{The Mesa 3D Graphics Library}",
+howpublished = "{http://www.mesa3d.org/}"
+}
+
+@misc{fedora,
+author = "",
+title = "{Fedora Project}",
+howpublished = "{http://fedoraproject.org/}"
+}
+
+@misc{ydl,
+author = "",
+title = "{Yellow Dog Linux for PowerPC Computers}",
+howpublished = "{http://us.fixstars.com/products/ydl/}"
+}
+
+@book{amdahl,
+author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}",
+title = "{Java Concurrency in Prac-tice}",
+publisher = "{Addison-Wesley Professional}",
+year = "2005"
+}
+
+@misc{cerium,
+author = "",
+title = "{SourceForge.JP: Cerium Rendering Engine}",
+howpublished = "{https//sourceforge.jp/projects/cerium/}"
+}
+
+@misc{spurs,
+author = "{Keisuke Inoue}",
+title = "{SPU Centric Execution Model}",
+text = "SACSIS 2006",
+year = 2006
+}
+
+@manual{cell,
+author = "{Sony Corporation}",
+title = "{Cell BroadbandEngine \texttrademark アーキテクチャ}",
+year = 2006
+}
+
+@manual{cell_sdk,
+author = "{International Business Machines Corporation}",
+title = "{Software Development Kit for Multicore Acceleration Version 3.1}",
+year = 2008
+}
+
+@manual{libspe2,
+author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
+title = "{SPE Runtime Management Library Version 2.3}",
+year = 2008
+}
+
+
+@misc{blender,
+title = "{blender.org}",
+howpublished = "{http://blender.org/}"
+}
+
+@article{spufs,
+author = "{Toshiyuki SANUKI}",
+title = "{Cell Broadband Engine \texttrademark を用いたブレード・サーバーの設計と実装}",
+journal = "{IBM PROVISION No.48}",
+year = 2006
+}
+
+@misc{sdl,
+author = "",
+title = "{Simple DirectMedia Layer}",
+howpublished = "{http://www.libsdl.org/}"
+}
+
+@misc{sdl_image,
+author = "",
+title = "{SDL\_image}",
+howpublished = "{http://www.libsdl.org/projects/SDL\_image/}"
+}
+
+@manual{opencl,
+author = "{Aaftab Munshi, Khronos OpenCL Working Group}",
+title ="{The OpenCL Specification Version 1.0}",
+year = 2007
+}
+
+@manual{opencl:ref,
+author = "{Khronos OpenCL Working Group}",
+title ="{OpenCL 1.2 Reference Pages}",
+year = 2012
+}
+
+@misc{gallium,
+author = "",
+title = "{Gallium3D}",
+howpublished = "{http://www.tungstengraphics.com/wiki/index.php/Gallium3D}"
+}
+
+@inproceedings{cellbe-overview-conference,
+author = {Pham, D. and Asano, S. and Bolliger, M.and Day, M. N. and Hofstee, H. P. and Johns, C. and Kahle, J. and Kameyama, A. and Keaty, J. and Masubuchi, Y. and Riley, M. and Shippy, D. and Stasiak, D. and Suzuoki, M. and Wang, M. and Warnock, J. and Weitzel, S. and Wendel, D. and Yamazaki, T. and Yazawa, K. },
+booktitle = {Solid-State Circuits Conference, 2005. Digest of Technical Papers. ISSCC. 2005 IEEE International},
+pages = {184--592 Vol. 1},
+title = {The design and implementation of a first-generation CELL processor},
+year = {2005}
+}
+
+@INPROCEEDINGS{KOKKEVIS06high-performancephysics,
+author = {V KOKKEVIS and S OSMAN and E L},
+title = {High-performance physics solver design for next generation consoles},
+booktitle = {In Game Developers Conference},
+year = {2006}
+}
+
+@misc{Cellteto,
+author = "{Williams, J. Carter, L. Oliker, J. Shalf, K. Yelick}",
+title = "{3D Lattice Boltzmann Magneto-hydrodynamics (LBMHD3D)}",
+howpublished = "{UTK Summit on Software and Algorithms for the Cell Processor}",
+year = {2006}
+}
+
+@inproceedings{cellbe-spe-overview-conference,
+uthor = {Flachs, B.  and Asano, S.  and Dhong, S. H.  and Hotstee, P.  and Gervais, G.  and Kim, R.  and Le, T.  and Liu, P.  and Leenstra, J.  and Liberty, J.  and Michael, B.  and Oh, H.  and Mueller, S. M.  and Takahashi, O.  and Hatakeyama, A.  and Watanabe, Y.  and Yano, N. },
+journal = {Solid-State Circuits Conference, 2005. Digest of Technical Papers. ISSCC. 2005 IEEE International},
+pages = {134--135 Vol. 1},
+title = {A streaming processing unit for a CELL processor},
+year = {2005}
+}
+
+@article{Cellteto2,
+  author = {A. E. Eichenberger},
+  title =  {Using advanced compiler technology to exploit the performance of the Cell Broadband Engine \texttrademark architecture},
+  journal = {IBM System Journal Vol 45, No.1},
+  year =  {2006},
+}
+
+
+@INPROCEEDINGS{Benthin06raytracing,
+    author = {Carsten Benthin and Ingo Wald and Michael Scherbaum and Heiko Friedrich},
+    title = {Ray Tracing on the CELL Processor},
+    booktitle = {In Proceedings of the 2006 IEEE Symposium on Interactive Ray Tracing},
+    year = {2006},
+    pages = {15--23}
+}
+
+@inproceedings{citeulike:1905188,
+author = {Blagojevic, Filip   and Nikolopoulos, Dimitris  S.  and Stamatakis, Alexandros   and Antonopoulos, Christos  D. },
+booktitle = {PPoPP '07: Proceedings of the 12th ACM SIGPLAN symposium on Principles and practice of parallel programming},
+pages = {90--100},
+publisher = {ACM},
+title = {Dynamic multigrain parallelization on the cell broadband engine},
+year = {2007}
+}
+
+@article{DBLP:journals/cphysics/Fabritiis07,
+  author    = {G. De Fabritiis},
+  title     = {Performance of the Cell processor for biomolecular simulations},
+  journal   = {Computer Physics Communications},
+  volume    = {176},
+  number    = {11-12},
+  year      = {2007},
+  pages     = {660-664},
+  ee        = {http://dx.doi.org/10.1016/j.cpc.2007.02.107},
+  bibsource = {DBLP, http://dblp.uni-trier.de}
+}
+
+@article{1272431,
+ author = {Kurzak,, Jakub and Dongarra,, Jack},
+ title = {Implementation of mixed precision in solving systems of linear equations on the Cell processor: Research Articles},
+ journal = {Concurr. Comput. : Pract. Exper.},
+ volume = {19},
+ number = {10},
+ year = {2007},
+ issn = {1532-0626},
+ pages = {1371--1385},
+ publisher = {John Wiley and Sons Ltd.},
+}
+
+@inproceedings{1128027,
+ author = {Williams,, Samuel and Shalf,, John and Oliker,, Leonid and Kamil,, Shoaib and Husbands,, Parry and Yelick,, Katherine},
+ title = {The potential of the cell processor for scientific computing},
+ booktitle = {CF '06: Proceedings of the 3rd conference on Computing frontiers},
+ year = {2006},
+ isbn = {1-59593-302-6},
+ pages = {9--20},
+ publisher = {ACM}
+}
+@Comment LocalWords:  SACSIS BroadbandEngine sdk Multicore
+
+
+@article{kono:2008a,
+        author = "河野真治",
+        title = "検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用",
+        journal = "電子情報通信学会VLSI設計技術研究会",
+        month = "March",
+        year = 2008
+}
+
+@article{akira:2008a,
+        author = "神里 晃 and 宮國 渡 and 杉山 千秋 and 河野 真治",
+        title = "CからCellアーキテクチャを利用したCbCへの変換",
+        journal = "電子情報通信学会VLSI設計技術研究会",
+        month = "March",
+        year = 2008
+}
+
+@article{akira:2006a,
+        author = "神里 晃 and 河野 真治",
+        title = "Continuation based CによるPS3 Cell のシミュレーション",
+        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会",
+        month = "May",
+        year = 2006
+}
+
+
+@mastersthesis{akira:master,
+        author = "神里 晃",
+        title = "Cell を用いたゲームフレームワークの提案",
+        school = "琉球大学理工学研究科情報工学専攻",
+        month = "Feb",
+        year = 2008
+}
+
+
+@mastersthesis{gongo:master,
+        author = "宮國 渡",
+        title = "Cell用の Fine-Grain Task Manager の実装",
+        school = "琉球大学理工学研究科情報工学専攻",
+        month = "Feb",
+        year = 2009
+}
+
+@article{gongo:2008a,
+        author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋",
+        title = "Cell 用の Fine-grain Task Manager の実装",
+        journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会",
+        month = "April",
+        year = 2008
+}
+
+@article{chiaki:thesis,
+        author = "杉山 千秋",
+        title = "SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装",
+        journal = "琉球大学工学部情報工学科 平成19年度卒業論文",
+        year = 2008
+}
+
+@article{akamine:2010a,
+        author = "赤嶺 一樹 and 河野 真治",
+        title = "Meta Engine を用いた Federated Linda の実験",
+        journal = "日本ソフトウェア科学会第 27 会大会(2010 年度)",
+        month = "Sep",
+        year = 2010
+}
+
+@mastersthesis{kaito:master,
+        author = "多賀野 海人",
+        title = "Cell Task Manager Cerium における Task を用いたパイプラインの改良",
+        school = "琉球大学理工学研究科情報工学専攻",
+        month = "Feb",
+        year = 2011
+}
+
+
+@article{yutaka:2010a,
+        author = "金城 裕 and 河野 真治",
+        title = "Fine Grain Task Manager Cerium  のチューニング",
+        journal = "日本ソフトウェア科学会第 27 会大会(2010 年度)",
+        month = "Sep",
+        year = 2010
+}
+
+@article{yutaka:2011a,
+        author = "金城 裕 and 河野 真治",
+        title = "ゲームフレームワーク Cerium TaskManager の改良",
+        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会",
+        month = "Apr",
+        year = 2011
+}
+
+@article{yutaka:2011b,
+        author = "金城 裕 and 河野 真治",
+        title = "Cerium におけるDataSegment APIの設計",
+        journal = "日本ソフトウェア科学会第 28 会大会(2011 年度)",
+        month = "Sep",
+        year = 2011
+}
+
+@article{toma:2012a,
+        author = "當眞 大千 and 河野 真治",
+        title = "Cerium Task Manager におけるマルチコア上での並列実行機構の実装",
+        journal = " 第53回プログラミング・シンポジウム",
+        month = "Jan",
+        year = 2012
+}
+
+@article{yutaka:os,
+        author = "金城裕 and 河野真治 and 多賀野海人 and 小林佑亮(琉球大学)",
+        title = "ゲームフレームワークCerium TaskManagerの改良",
+        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)",
+        month = "April",
+        year = 2011
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/cerium.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,116 @@
+\section{Cerium}
+Cerium は、当初 Cell 用の Fine-Grain Task Manager\cite{gongo:2008a} として当研究室で開発された。
+TaskManager, SceneGraph, Rendering Engine の3つの要素から構成されており、今では、PS3 および Linux, MacOS X 上で動作する。
+GPGPU の Data Parallel を含めて、同じ形式で並列プログラムを記述することができる。
+
+\subsection{Cerium TaskManager}
+TaskManager は、Task と呼ばれる分割されたプログラムを管理する。
+関数やサブルーチンを Task として扱い、Task 同士の依存関係を考慮しながら実行される。
+Task は TaskManager を使って生成する。
+Task を生成する際に、以下のような要素を設定することができる。
+
+\begin{itemize}
+  \item input data
+  \item output data
+  \item parameter
+  \item cpu type
+  \item dependency
+\end{itemize}
+
+input, output, parameter は関数でいうところの引数に相当する。
+cpy type は Task がどのようなの Device の組み合わせで実行されるかを示す。
+dependency は他の Task との依存関係を示している。
+
+\begin{figure}[!h]
+  \begin{center}
+    \includegraphics[scale=0.4]{./images/createTask.pdf}
+  \end{center}
+  \caption{Task Manager}
+  \label{fig:createTask}
+\end{figure}
+
+図:\ref{fig:createTask}は Cerium が Task を生成/実行する場合のクラスの構成である。
+TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。
+ActiveTaskList に移された Task は依存関係が存在しないのでどのような順序で実行されても問題ない。
+Task は Scheduler に転送しやすい TaskList に変換してから cpy type に対応する Scheduler に Synchronized Queue である mail を通して転送される。
+Scheduler ではパイプラインで task が処理される(図:\ref{fig:task_scheduler})。
+Task が終了すると Scheduler から TaskManager に mail を通して通知される。
+その通知に従って依存関係が処理され、再び TaskManager から Scheduler に Task が転送される。
+
+\begin{figure}[!h]
+  \begin{center}
+    \includegraphics[scale=0.4]{./images/scheduler.pdf}
+  \end{center}
+  \caption{Task Scheduler}
+  \label{fig:task_scheduler}
+\end{figure}
+
+以下に Task を生成する例題を示す。
+表:\ref{table:TaskManager_api}は Task を生成に用いる API を示している。
+input データを2つ用意し、input データの各要素同士を乗算し、output に格納する multiply という例題である。
+
+\lstinputlisting[caption=multiply,label=test]{./source/multiply.cc}
+
+\begin{table}[htpb]
+  \begin{center}
+    \small
+    \begin{tabular}[htpb]{|c|l|} \hline
+      create\_task & Task を生成する \\ \hline
+      set\_inData  & Task への入力データのアドレスを追加 \\ \hline
+      set\_outData & Task からのデータ出力先アドレスを追加 \\ \hline
+      set\_param   & Task のパラメータ \\ \hline
+      wait\_for    & Task の依存関係 \\ \hline
+      set\_cpu     & Task を実行する Device の設定 \\ \hline
+      spawn        & Task を登録する \\ \hline
+      iterate      & データ並列で実行する Task として登録する \\ \hline
+    \end{tabular}
+    \caption{Task 生成に用いる API}
+    \label{table:TaskManager_api}
+  \end{center}
+\end{table}
+
+CPU で実行される Task(OpenCL, CUDA でいう kernel) の記述は以下のようになる。
+表:\ref{table:taskAPI}は Task 側で使用する API である。
+
+\lstinputlisting[caption=task,label=test]{./source/multiply_task.cc}
+
+\begin{table}[ht]
+  \begin{center}
+    \small
+    \begin{tabular}[t]{|c|l|} \hline
+      get\_input  & 入力データのアドレスを取得 \\ \hline
+      get\_output & データ出力先のアドレスを取得 \\ \hline
+      get\_param  & パラメータを取得 \\ \hline
+    \end{tabular}
+    \caption{ Task 側で使用する API }
+    \label{table:taskAPI}
+  \end{center}
+\end{table}
+
+\subsection{Cerium におけるデータ並列}
+Cerium でデータ並列による実行をサポートするために、OpenCL の API に合わせた iterate という API を用意した。
+iterate は length を引数として受け取り、Scheduler で length の値と受け取った引数の個数を次元数として Task 数を計算し、データ並列で実行する Task として生成する。
+
+例として、CPU 数4、一次元で10個のデータに対してデータ並列実行を行なった場合、各 CPU が担当する index は表:\ref{table:dpi}のようになる。
+
+\begin{table}[h]
+  \begin{center}
+    \small
+    \begin{tabular}[t]{c||c|c|c|c} \hline
+      &CPU0& CPU1&CPU2&CPU3 \\ \hline
+      1&0&1&2&3 \\ \hline
+      2&4&5&6&7 \\ \hline
+      3&8&9& & \\ \hline
+    \end{tabular}
+    \caption{Data 並列実行時の index の割り当て}
+    \label{table:dpi}
+  \end{center}
+\end{table}
+
+各 CPU が担当する index は SchedTask に格納してある。
+データ並列で実行する Task の記述は以下のようになる。
+
+\lstinputlisting[caption=example,label=test]{./source/multiply_task_dp.cc}
+
+並列プログラムでは、並列化する Task が全部同一であるということは少なくない。
+iterate を実装したことで、Task を生成する部分をループで回す必要はなくなり、OpenCL と同様に1つの記述で異なる index を持つ Task を Multi Core CPU 上で実行することが可能になった。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/cerium_gpu.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,54 @@
+\section{Cerium の GPGPU への対応}
+本章では、まずはじめに GPU プログラミングの特徴および問題について述べ、Cerium への実装でどのように対応したかについて説明する。
+
+\subsection{GPU プログラミングの特徴および問題}
+まず Multi Core CPU に対するプログラミングと同様に性能を向上させるためには、プログラム全体を対象とした並列度を高くしなければならない。
+明示的な並列化部分はループ部分である。
+GPU は数百個のコアを有しており、ループ部分に対してデータ並列で処理を行うことで CPU より高速で演算を行うことができる。
+プログラムの大部分がループであれば、データ並列による実行だけでプログラムの性能は向上する。
+しかし、多くのプログラムはその限りではない。
+GPGPU においてネックになる部分はデータ転送である。
+GPU の Memory 空間(図:\ref{fig:gpuarch})は CPU(図:\ref{fig:cpuarch}) とは異なり、Shared Memory ではないため host と device 間でデータの共有ができない。
+データにアクセスするためには Memory 空間ごとコピーするしかない。
+これが大きなオーバーヘッドになるので、データ転送をオーバーラップする必要がある。
+今回新たに、データ転送を自動でオーバーラップするように OpenCL および CUDA を用い Scheduler を実装した。
+
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.35]{./images/gpu_arch.pdf}
+  \end{center}
+  \caption{Gpu Architecture}
+  \label{fig:gpuarch}
+\end{figure}
+
+\begin{figure}[htpd]
+  \begin{center}
+    \includegraphics[scale=0.7]{./images/cpu_arch.pdf}
+  \end{center}
+  \caption{Cpu Architecture}
+  \label{fig:cpuarch}
+\end{figure}
+
+\subsection{OpenCL および CUDA を用いた Scheduler の実装}
+Scheduler と CpuThreads に対応させる形で OpenCL を用いた GpuScheduler, GpuThreads、CUDA を用いた CudaScheduler, CudaThreads を実装した。
+TaskManager から転送された TaskList の情報をもとに device 上のメモリ領域を確保する。
+その後、OpenCL ならば CommandQueue、CUDA ならば Stream に Operation を発行していく。
+Operation は発行された順序で実行されるので、host から device へのデータ転送、kernel の実行、device から host へのデータ転送の順に発行する。
+非同期 API を用いることでデータ転送や kernel の実行を並列に行うことができる。
+通常、非同期 API を用いる場合は依存関係を考慮した同期が必要になるが転送されてくる Task の依存関係は TaskManager ですべて解消されているので Scheduler 側では順番を考えず Task を実行して問題ない。
+host から device へのデータ転送は、OpenCL では clEnqueueWriteBuffer、CUDA では cuMempcyHtoDAsync を用いて行われる。
+clEnqueueWriteBuffer は第三引数に CL\_FALSE を指定することで非同期なデータ転送を行う。
+転送されてきた TaskList からデータ並列またはタスク並列で実行するか決定する。
+データ並列で実行する場合は、OpenCL では clEnqueueTaskNDRangeKernel、CUDA では cuLaunchKernel を用いる。
+タスク並列で実行する場合は、OpenCL では clEnqueueTask、CUDA では cuLaunckKernel の引数を1に設定することで実行することができる。
+device から host へのデータ転送は、OpenCL では clEnqueuReadBuffer、CUDA では cuMemcpyDtoHAsync を用いて行われる。
+clEnqueueReadBuffer も clEnqueueWriteBuffer と同様に第三引数に CL\_FALSE を指定することで非同期実行となる。
+転送されてきた Task がすべて終了すると Synchronized Queue である mail を通して TaskManager に Task の終了を通知する。
+終了が通知されると TaskManager で依存関係が解消し、再び TaskList を転送する。
+GpuScheduler および CudaScheduler は複数の CommandQueue および Stream を持っており、パイプラインで実行される。
+
+kernel の記述は以下のようになる。
+\lstinputlisting[caption=multiply(OpenCL),label=test]{./source/Multi.cl}
+\lstinputlisting[caption=multiply(CUDA),label=test]{./source/Multiply.cu}
+
+修飾子など若干の違いはあるが、ほぼ同じ記述で書くことができるが CPU, OpenCL, CUDA のどれか1つの記述から残りのコードも生成できるようにすることが望ましい。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/conclusion.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,11 @@
+\section{まとめ}
+本研究では並列プログラミングフレームワーク Cerium を OpenCL および CUDA に対応させた。
+OpenCL および CUDA に対応させたことで Cerium は単一の記述から CPU および GPU 上での実行が可能になった。
+WordCount, FFT を例題に用い、Scheduler の測定も行なった。
+OpenCL と CUDA で異なる結果が出たことからそれぞれで最適なチューニングの方法が違うことがわかる。
+どちらもチューニングを行えば同等な結果が出ると考えられるのでプロファイラなどを用いて、実装を見直すことが今後の課題となる。
+また、Cerium は CPU と GPU の同時実に対応している。
+しかし、スケジューリングを行わず Task を CPU, GPU に対し交互に割り振っているため CPU 単体、GPU 単体で実行するより結果が悪くなる。
+Task の割り当てを最適化することで性能を向上させることが予想される。
+スケジューリングの方法として、一度 Task を CPU のみ、GPU のみで実行し、プロファイルを取ることで Task の割り当てを決定するなどが考えられる。
+%% 同時実行の話も入れて
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/cuda.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,50 @@
+\section{CUDA}
+CUDA とは、半導体メーカー NVIDIA 社が提供する GPU コンピューティング向けの総合開発環境でコンパイラ、ライブラリ、デバッガなどから構成される。プログラミング言語である CUDA C は C 言語ベースに拡張を加えたものである。
+
+CUDA には CUDA Runtime API と CUDA Driver API の2種類がある。
+Driver API は Runtime API に比べてプログラマが管理すべきリソースが多い。
+しかし、Runtime API より柔軟な処理を行うことができる。
+今回は Driver API を使用して実装した。
+
+CUDA も OpenCL と同様に、制御を行う CPU 側を host、GPU 側を device と定義している。
+また、device 上で動作するプログラムも OpenCL と同様に kernel と呼ぶ。
+
+\subsection{Stream}
+CUDA には OpenCL の CommandQueue と似たような仕組みとして Stream がある。
+Stream は host 側で発行された Operation を一連の動作として device で実行する。
+Stream に発行された Operation は発行された順序で実行されることが保証されている。
+異なる Stream に発行された Operation に依存関係が存在しない場合、Operation を並列に実行することができる。
+
+Stream は cuStreamCreate という Driver API で生成される。
+引数に Stream を指定しない API はすべて host 側をブロックする同期的な処理となる。
+複数の Stream を同時に走らせ Operation を並列に実行するためには非同期な処理を行う API を利用する必要がある。
+
+\subsection{Data Parallel Execution}
+CUDA では OpenCL の WorkItem に相当する単位を thread と定義している。
+この thread をまとめたものを block と呼ぶ。
+CUDA でデータ並列による kernel 実行をする場合、cuLaunchKernel API を使用する。
+この関数は引数として各座標の block 数と各座標の block 1つ当たりの thread 数を指定することでデータ並列で実行できる。
+
+cuLaunckKernel で kernel を実行すると各 thread に対して block ID と thread ID が割り当てられる。
+CUDA には OpenCL とは異なり、ID を取得する API は存在しない。
+代わりに、kernel に組み込み変数が準備されており、それを参照し、対応するデータに対し処理を行うことでデータ並列を実現する。
+組み込み変数は以下の通りである。
+
+\begin{itemize}
+  \item uint3 blockDim
+  \item uint3 blockIdx
+  \item uint3 threadIdx
+\end{itemize}
+
+各組み込み変数はベクター型で、blockDim.x とすると x 座標の thread 数を参照することができる。
+blockIdx.x とすると x 座標の block ID が参照でき、threadIdx.x とすると x 座標の thread ID を参照することができる。
+blockDim.x * blockIdx.x + threadIdx.x で OpenCL の get\_global\_id(0) で取得できる ID に相当する ID を算出することができる。
+例として、ある kernel で get\_global\_id(0) の返り値が13の場合、CUDA では図:\ref{fig:calculate_index}のようになる。
+
+\begin{figure}[!h]
+  \begin{center}
+    \includegraphics[scale=0.4]{./images/culculate_index.pdf}
+  \end{center}
+  \caption{Calculate Index}
+  \label{fig:calculate_index}
+\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/dummy.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,60 @@
+%%% jdummy.def
+%
+\DeclareRelationFont{JY1}{mc}{it}{}{OT1}{cmr}{it}{}
+\DeclareRelationFont{JT1}{mc}{it}{}{OT1}{cmr}{it}{}
+\DeclareFontShape{JY1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{}
+\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{}
+\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{}
+\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{}
+\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min
+    <10.95><12><14.4><17.28><20.74><24.88> min10
+    <-> min10}{}
+\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin
+    <10.95><12><14.4><17.28><20.74><24.88> tmin10
+    <-> tmin10}{}
+\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{}
+\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{}
+\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
+\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{}
+\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
+\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{}
+\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{}
+\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{}
+\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth
+    <10.95><12><14.4><17.28><20.74><24.88> goth10
+    <-> goth10}{}
+\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth
+    <10.95><12><14.4><17.28><20.74><24.88> tgoth10
+    <-> tgoth10}{}
+\endinput
+%%%% end of jdummy.def
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/cpu_arch.bb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,5 @@
+%%Title: ./cpu_arch.pdf
+%%Creator: extractbb 20120420
+%%BoundingBox: 0 0 250 207
+%%CreationDate: Fri Feb 22 14:24:38 2013
+
Binary file paper/images/cpu_arch.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/cpu_arch.xbb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,8 @@
+%%Title: ./images/cpu_arch.pdf
+%%Creator: extractbb 20090506
+%%BoundingBox: 0 0 273 225
+%%HiResBoundingBox: 0.000000 0.000000 273.000000 225.000000
+%%PDFVersion: 1.3
+%%Pages: 1
+%%CreationDate: Mon Feb 17 16:01:55 2014
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/createTask.bb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,5 @@
+%%Title: ./images/createTask.pdf
+%%Creator: extractbb 20090506
+%%BoundingBox: 0 0 512 391
+%%CreationDate: Tue Feb 25 09:13:13 2014
+
Binary file paper/images/createTask.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/culculate_index.bb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,5 @@
+%%Title: ./images/culculate_index.pdf
+%%Creator: extractbb 20090506
+%%BoundingBox: 0 0 562 226
+%%CreationDate: Tue Feb 18 19:17:52 2014
+
Binary file paper/images/culculate_index.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/culculate_index.xbb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,8 @@
+%%Title: ./images/culculate_index.pdf
+%%Creator: extractbb 20090506
+%%BoundingBox: 0 0 562 226
+%%HiResBoundingBox: 0.000000 0.000000 562.000000 226.000000
+%%PDFVersion: 1.3
+%%Pages: 1
+%%CreationDate: Tue Feb 18 19:17:55 2014
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/gpu_arch.bb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,5 @@
+%%Title: ./gpu_arch.pdf
+%%Creator: extractbb 20120420
+%%BoundingBox: 0 0 557 557
+%%CreationDate: Fri Feb 22 14:24:38 2013
+
Binary file paper/images/gpu_arch.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/gpu_arch.xbb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,8 @@
+%%Title: ./images/gpu_arch.pdf
+%%Creator: extractbb 20090506
+%%BoundingBox: 0 0 556 548
+%%HiResBoundingBox: 0.000000 0.000000 556.000000 548.000000
+%%PDFVersion: 1.4
+%%Pages: 1
+%%CreationDate: Mon Feb 17 16:02:34 2014
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/images/scheduler.bb	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,5 @@
+%%Title: ./images/scheduler.pdf
+%%Creator: extractbb 20100328
+%%BoundingBox: 0 0 505 345
+%%CreationDate: Tue Jan 10 13:32:02 2012
+
Binary file paper/images/scheduler.graffle has changed
Binary file paper/images/scheduler.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/introduction.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,19 @@
+\section{はじめに}
+GPU の普及と高性能化にともない、GPU の演算資源を画像処理以外の目的にも利用する GPGPU(GPU による汎目的計算)が注目されている。\cite{FFTonGPU}
+GPU 以外にも Cell\cite{cell}, SpursEngine, Xeon Phi など様々なプロセッサが存在する。
+それぞれのプロセッサを利用するにはそれぞれ異なる API を利用する必要があり、それらの対応に多くの時間を取られてしまいプログラムの性能改善に集中することができない。
+また、GPU や Cell などメモリ空間が異なるプロセッサはデータの転送がオーバーヘッドとなるので、データ転送を効率的に行えるかどうかで処理時間が大きく変わる。
+
+当研究室で開発・改良が行われている並列プログラミングフレームワーク Cerium\cite{cerium} は様々なプロセッサを統合して扱えるフレームワークを目指している。
+様々なプロセッサを統合して扱えるフレームワークとしてフランス国立情報学自動制御研究所(INRIA)が開発している StarPU\cite{AugThiNamWac11CCPE} がある。
+StarPU は Cerium と同じタスクベースの非同期フレームワークである。
+%%  ちゃんと論文を引用する
+タスクという単位で記述することで処理とデータを分離し、より効率的に処理を行うことができる。
+StarPU にはパイプラインでの実行機構は入ってなく、パイプライン処理を行いたい場合は自分で実装するしかない。
+しかし、パイプライン処理を書くことは非常に煩雑で難しい。
+そこで、今回 Cerium に OpenCL, CUDA を用いた Scheduler を新たに実装した。
+Scheduler は自動でデータ転送をオーバーラップし、パイプラインで処理を行うように設計した。
+
+本論文では、まず OpenCL, CUDA について説明する。
+その後、既存の Cerium の実装および新たに実装した GPU 実行の機構について説明する。
+最後に WordCount, FFT を例題として測定し、評価を行う。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjcommon.sty	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,995 @@
+% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
+%                            The Editorial Board of the IPSJ Journal
+%
+% ipsjcommon.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% (revision history deleted)
+% ipsjcommon.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
+
+%%%%%% Sectioning Commands %%%%%%
+
+% \section:	2 rows
+% others:	1 row
+%
+% Note that \paragraph and \subparagraph act as \subsubsubsection and
+% \subsubsubsubsection resp.
+%
+% The form of sectioning header is;
+%	<1 Kanji sp> \the<sect-command> [`.' if \section] <1 Kanji sp> <title>
+% Nothe that <1 Kanji sp> is that of \normalsize.
+
+\def\section{\@startsection
+	{section}{1}{\@mojihaba}{\sec@aboveskip}{\sec@belowskip}{\fs@sec\bf}}
+\let\ipsj@section\section					% 2.04(1)
+\def\subsection{\@startsection
+	{subsection}{2}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\subsubsection{\@startsection
+	{subsubsection}{3}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\paragraph{\@startsection
+	{paragraph}{4}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+\def\subparagraph{\@startsection
+	{subparagraph}{5}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}
+
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+
+\def\thesection{\arabic{section}}
+\def\sec@section@postfix{.}
+\def\thesubsection{\thesection.\arabic{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\def\theparagraph{\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph{\theparagraph.\arabic{subparagraph}}
+
+\setcounter{secnumdepth}{5}
+
+\def\appendix{\let\sec@sec\section
+	\def\section{\@startsection
+		{section}{1}{\@mojihaba}{\z@}{\z@}{\fs@subsec\bf}}%
+	\def\thesection{\appendixprefix\arabic{section}}%
+	\def\sec@section@postfix{\appendixpostfix}%
+	\stepcounter{section}\setcounter{section}{0}%
+	\@ifnextchar[%]
+		     {\sec@oappendix}{\sec@xappendix}}
+\def\sec@xappendix{\@ifstar{\let\section\sec@sec}%
+	{\sec@sec*{\ifDS@english Appendix\else\ipsj@j@app \fi}}}% 2.12(1b)
+\def\sec@oappendix[#1]{\sec@sec*{\ifDS@english Appendix: \else
+	\ipsj@j@app\hskip\jspaceskip\fi #1}}			% 2.12(1b)
+\def\appendixprefix{A.}
+\def\appendixpostfix{}
+
+\def\acknowledgment{\par
+	{\bf \ifDS@english Acknowledgments \else\ipsj@j@ack\fi}%% 2.12(1b)
+	\hskip\@mojihaba \ignorespaces}
+\let\endacknowledgment\par
+
+\newif\ifipsj@recommendation \ipsj@recommendationfalse		% 2.04(1) >>
+\def\recommendation#1{\global\ipsj@recommendationtrue
+	\ifDS@draft\else \ra@putrcvacc\fi
+	\ipsj@section*{#1}
+}
+\def\endrecommendation{\par\vskip\baselineskip\penalty\opt@magicpenalty}
+								% 2.04(1) <<
+
+% Modified \@startsection has a trick for "2-row" of \section, which must
+% work even if \section appears the top of a page.  The BEFORESKIP must be
+% inserted with respect to the previous baseline.  So, we must go back to
+% the imaginary previous baseline at the top of a page.  That is, we do;
+%	\vskip\baselineskip \vspace*{-\baselineskip}
+% which resuls;
+% 	<a> do nothing at midpage
+%	<b> go to the first baseline by \topskip, then go back to 0th
+%	    baseline by \vspace*.
+% The trick "\vskip-\prevdepth \prevdepth\z@" will assure exact vertical
+% space even when the last line has much depth.
+%
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+	\par \@tempskipa #4\relax
+	\@afterindenttrue
+	\ifdim\@tempskipa<\z@ \@tempskipa-\@tempskipa \@afterindentfalse\fi
+	\if@nobreak \everypar{}\else \addpenalty{\@secpenalty}\fi
+	\ifdim\@tempskipa>\z@
+% Here is the trick for \section.
+		\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
+		\vspace*{-\baselineskip}\vskip\@tempskipa\fi
+	\@ifstar
+	{\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+% \@sect is modified to cope with `.' for \section and MOJI-DORI
+%
+% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[TITLE]{TITLE}
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+	\def\@svsec{}\else 
+	\refstepcounter{#1}
+								% 2.00(1)>>
+	\let\@@protect\protect \def\protect{\noexpand\protect\noexpand}
+	\edef\@svsec{\csname the#1\endcsname \csname sec@#1@postfix\endcsname
+		\hskip\@mojihaba} \let\protect\@@protect\fi	% 2.00(1)<<
+	\@tempskipa #5\relax
+	\ifdim \@tempskipa<\z@ 
+        	\def\@svsechd{#6\hskip #3\relax\@svsec #8}	% 2.00(1)
+	\else
+        	\begingroup #6\relax
+		\@hangfrom{\hskip #3\relax\@svsec}%
+			{\interlinepenalty\@M \sec@mojidori{#8}\par}%
+		\endgroup
+	\fi \@xsect{#5}}
+
+% \@ssect is modified to cope with MOJI-DORI
+%
+% \@sect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{TITLE}
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+	\ifdim \@tempskipa<\z@ \def\@svsechd{#4\hskip #1\relax #5}%
+	\else \begingroup #4%
+		\@hangfrom{\hskip #1}{\interlinepenalty\@M
+			\sec@mojidori{#5}\par}\endgroup
+	\fi \@xsect{#3}}
+
+%% Modify \@xsect to avoid (buggy) \clubpenalty=10000. (H.N.)
+\def\@xsect#1{\@tempskipa #1\relax
+	\ifdim \@tempskipa<\z@
+		\glboal\@nobreakfalse \global\@noskipsectrue
+		\everypar{\global\@noskipsecfalse \hskip-\parindent
+			\begingroup \@svsechd \endgroup \unskip
+			\hskip -#1\everypar{}}%
+	\else
+		\par \nobreak
+		\vskip \@tempskipa \global\@nobreaktrue
+		\everypar{\global\@nobreakfalse
+			\if@afterindent\else {\setbox0\lastbox}\fi \everypar{}}
+	\fi\ignorespaces}
+
+% Here is a trick for MOJI-DORI of sectioning tilte.  The rule is;
+%	2 - 4 Kanji char -> 5 Kanji char
+%	otherwise    -> natural width
+%
+\def\sec@mojidori#1{\ifDS@english #1\else			% 2.12(1b)
+	\setbox0\hbox{#1}\settowidth\@tempdimb{\ipsj@j@a}%	% 2.12(1b)
+	\ifdim\wd0>4.5\@tempdimb #1\else
+	\ifdim\wd0<1.5\@tempdimb #1\else
+	\jintercharskip\fill \jasciikanjiskip\fill \jmathkanjiskip\fill
+	\leavevmode\hbox to5\@tempdimb{#1\hfil}\fi\fi\fi}
+
+%%%%%% List-like Environments %%%%%%
+%
+%		LM	RM	LW	LS	LPI	II
+% default	2K	0	0.75K	0.25K	0	0
+% \enumerate	3K	0	3K	0	0	0
+% \Enumerate	0	0	3K	0	0	3K
+% \ENUMERATE	0	0	3K	0	0	4K
+% \enumerate*	1K	0	3K	0	0	2K
+% \itemize	2K	0	2K	0	0	0
+% \Itemize	0	0	2K	0	0	2K
+% \ITEMIZE	0	0	2K	0	0	3K
+% \itemize*	1K	0	2K	0	0	1K
+% \description	2K	0	0	1K	0	-1K
+% \Description	0	0	0	1K	0	1K
+% \DESCRIPTION	0	0	0	1K	0	2K
+% \description*	1K	0	0	1K	0	0
+% \verse	3K	2K	0.75K	0.25K	-1K	-1K
+% \quotation	2K	2K	0.75K	0.25K	1K	1K
+% \quote	2K	2K	0.75K	0.25K	0	0
+%
+% where LM is \leftmargin, RM is \rightmargin, LW is \labelwidth, LS is
+% \labelsep, \LPI is \listparindent, II is \itemindent, and K is Kanji char
+% width (\@mojihaba).
+%
+% All vertical space parameters, \topsep, \partopsep, \itemsep and \parsep,
+% are 0pt.
+
+\leftmargini2\@mojihaba
+\leftmarginii2\@mojihaba
+\leftmarginiii2\@mojihaba
+\leftmarginiv2\@mojihaba
+\leftmarginv2\@mojihaba
+\leftmarginvi2\@mojihaba
+
+\def\lst@listi{\labelsep.75\@mojihaba \labelwidth.25\@mojihaba
+	\rightmargin\z@ \listparindent\z@ \itemindent\z@
+	\partopsep\z@ \parsep\z@ \topsep\z@ \itemsep\z@}
+\def\@listi{\leftmargin\leftmargini \lst@listi}
+\def\@listii{\leftmargin\leftmarginii \lst@listi}
+\def\@listiii{\leftmargin\leftmarginiii \lst@listi}
+\def\@listiv{\leftmargin\leftmarginiv \lst@listi}
+\def\@listv{\leftmargin\leftmarginv \lst@listi}
+\def\@listvi{\leftmargin\leftmarginvi \lst@listi}
+
+\@listi
+
+\def\labelenumi{(\,\theenumi\,)} 
+\def\theenumi{\arabic{enumi}} 
+\def\labelenumii{(\,\theenumii\,)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{(\,\theenumiii\,)}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{(\,\theenumiv\,)}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+	\advance\@enumdepth \@ne 
+	\edef\@enumctr{enum\romannumeral\the\@enumdepth}
+	\list{\csname label\@enumctr\endcsname}{\usecounter
+		{\@enumctr}\def\makelabel##1{##1\hss}%
+		\leftmargin3\@mojihaba \labelwidth3\@mojihaba \labelsep\z@}\fi}
+\let\endenumerate\endlist
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+	\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+	\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\hss##1\hss}%
+		\labelwidth2\@mojihaba \labelsep\z@}\fi}
+\let\enditemize\endlist
+
+\def\description{\list{}{\labelwidth\z@ \labelsep\@mojihaba
+	\itemindent\labelsep \advance\itemindent-\leftmargin
+	\def\makelabel##1{\bf ##1}}}
+\let\enddescription\endlist
+
+\let\latex@trivlist\@trivlist
+\def\lst@trivlist#1#2{\leftmargin#1\relax
+	\itemindent\labelwidth \advance\itemindent\labelsep
+	\advance\itemindent#2\relax
+	\let\@trivlist\latex@trivlist \@trivlist}
+
+\def\lst@Trivlist{\def\@trivlist{\lst@trivlist\z@\z@}}
+\def\Enumerate{\lst@Trivlist \enumerate}
+\let\endEnumerate\endlist
+\def\Itemize{\lst@Trivlist \itemize}
+\let\endItemize\endlist
+\def\Description{\lst@Trivlist \description}
+\let\endDescription\endlist
+
+\def\lst@TRIVLIST{\def\@trivlist{\lst@trivlist\z@\@mojihaba}}
+\def\ENUMERATE{\lst@TRIVLIST \enumerate}
+\let\endENUMERATE\endlist
+\def\ITEMIZE{\lst@TRIVLIST \itemize}
+\let\endITEMIZE\endlist
+\def\DESCRIPTION{\lst@TRIVLIST \description}
+\let\endDESCRIPTION\endlist
+
+\def\lst@strivlist{\def\@trivlist{\lst@trivlist\@mojihaba{-\@mojihaba}}}
+\@namedef{enumerate*}{\lst@strivlist \enumerate}
+\@namedef{endenumerate*}{\endlist}
+\@namedef{itemize*}{\lst@strivlist \itemize}
+\@namedef{enditemize*}{\endlist}
+\@namedef{description*}{\lst@strivlist \description}
+\@namedef{enddescription*}{\endlist}
+
+\def\verse{\let\\=\@centercr 
+	\list{}{\itemindent-\@mojihaba \listparindent\itemindent 
+	\rightmargin\leftmargin \advance\leftmargin\@mojihaba}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent\@mojihaba	\itemindent\listparindent
+	\rightmargin\leftmargin}\item[]}
+\let\endquotation\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote\endlist
+
+\def\newtheorem{\@ifstar
+	{\theo@newtheorem{\theo@it}{\ }}{\theo@newtheorem{}{\theo@sp}}}
+\def\theo@newtheorem#1#2#3{\@namedef{theo@it@#3}{#1}\@namedef{theo@sp@#3}{#2}%
+	\@ifnextchar[%]
+		     {\@othm{#3}}{\@nthm{#3}}}
+\def\@begintheorem#1#2{\DESCRIPTION \csname theo@it@\@currenvir\endcsname
+	\item[#1\csname theo@sp@\@currenvir\endcsname #2]}
+\def\@opargbegintheorem#1#2#3{\DESCRIPTION
+	\csname theo@style@\@currenvir\endcsname
+	\item[#1\csname theo@sp@\@currenvir\endcsname #2\ (#3)]}
+\let\@endtheorem\endlist					% 1.02(2)
+\ifDS@english
+\let\theo@it\it \let\theo@sp\ %
+\else
+\let\theo@it\relax \let\theo@sp\relax
+\fi
+
+%%%%%% Bibliography %%%%%%
+%
+% 1. Label format is "<nn>)".
+% 2. \leftmargin 24Q (or 2K)
+% 3. \labelsep is 6Q (or 0.5K)
+% 4. \baselineskip is 16Q(j)/15Q(e)/normal(d)
+% 5. ~ and \ is null but stretchable and (hardly) breakable.	% 2.09(1)
+
+\def\thebibliography#1{%
+	\section*{\hskip-\@mojihaba\hfill\hbox{\bib@refname}\hfill\hskip\z@}
+	\ifDS@draft \@tempdima\@mojihaba \else\@tempdima12\@Q\fi
+	\list{\arabic{enumi}\rlap{%(
+			   	  )}}%
+	     {\fs@bibliography \leftmargin2\@tempdima \labelwidth\z@
+		\labelsep\@tempdima \itemindent.5\@tempdima
+		\usecounter{enumi}\def\makelabel##1{\hss\llap{##1}}}
+	\def\newblock{\hskip .11em plus .33em minus .07em}
+	\sloppy \frenchspacing
+	\def\ {\hskip\z@ plus\fontdimen\thr@@\font \penalty5000\relax}
+								% 2.09(1)
+	\ifDS@english\else \ipsj@defcolonforbib \fi}		% 2.12(1b)(2)
+
+% (removal of \bib@refname)					% 2.12(1a)
+
+\newdimen\bib@adjustheight \bib@adjustheight-\maxdimen
+\def\endthebibliography{\endlist \par \@normalsize
+	\@tempdima\@colht \advance\@tempdima-\@colroom
+	\advance\@tempdima\pagetotal \advance\@tempdima-\prevdepth
+	\advance\@tempdima-\topskip
+	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
+	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
+	\vskip-\prevdepth \vskip\@tempdima \prevdepth\z@
+	\bib@adjustheight\@tempdimb \advance\bib@adjustheight\@tempdima
+	\global\advance\bib@adjustheight\topskip
+	\if@firstcolumn\else\global\advance\bib@adjustheight\@M pt\fi}
+
+
+%%%%%% Floats %%%%%%
+
+% You may need to change following parameters
+\setcounter{topnumber}{4}
+\setcounter{bottomnumber}{4}
+\setcounter{totalnumber}{8}
+\setcounter{dbltopnumber}{4}
+\def\topfraction{.9}
+\def\bottomfraction{.9}
+\def\textfraction{.1}
+\def\dbltopfraction{.9}
+\def\floatpagefraction{.9}
+\def\dblfloatpagefraction{.9}
+
+\newcounter{figure}
+\newcounter{table}
+\def\thefigure{\@arabic\c@figure}
+\def\thetable{\@arabic\c@table}
+\def\fps@figure{tbp}
+\def\fps@table{tbp}
+\def\ftype@figure{1}
+\def\ftype@table{2}
+\def\fnum@figure{\fname@figure\thefigure}
+\def\fnum@table{\fname@table\thetable}
+\ifDS@english
+\def\fname@figure{Fig.\,}					% 2.06(1)
+\def\fname@Figure{Figure~}
+\def\fname@table{Table~}
+\def\fname@figures{Figs.\,}					% 2.12(8)>>
+\def\fname@Figures{Figures~}
+\def\fname@tables{Tables~}					% 2.12(8)<<
+\else
+\def\fname@figure{\ipsj@j@fig\fref@nobreak}		% 1.06(1), 2.12(1b)
+\let\fname@Figure\fname@figure
+\def\fname@table{\ipsj@j@tab\fref@nobreak}		% 1.06(1), 2.12(1b)
+\let\fname@figures\fname@figure					% 2.12(8)>>
+\let\fname@Figures\fname@figure
+\let\fname@tables\fname@table					% 2.12(8)<<
+\fi
+\def\fnum@efigure{Fig.\,\thefigure}				% 2.06(1)
+\def\fnum@etable{Table~\thetable}
+
+% 1.06(3) >>
+\def\figure{\let\cap@afterskip\relax \let\flt@fontsize\relax \@float{figure}}
+\def\endfigure{\end@float}
+\@namedef{figure*}{\let\cap@afterskip\relax \let\flt@fontsize\relax
+	\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+%% Default font for table env. is \footnotesize (H.N.)
+\def\table{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
+	\@float{table}}
+\def\endtable{\end@float}
+\@namedef{table*}{\let\cap@beforeskip\relax \let\flt@fontsize\fs@table
+	\@dblfloat{table}}					% 2.01(2)
+\@namedef{endtable*}{\end@dblfloat}
+% 1.06(3) <<
+
+\let\latex@float\@float
+\let\latex@dbflt\@dbflt
+\def\@float{\cap@linewidth\hsize \cap@hsize\hsize \latex@float}
+\def\@dbflt{\cap@linewidth.8\textwidth \cap@hsize.667\textwidth \latex@dbflt}
+\let\latex@xfloat\@xfloat					% 1.06(3)
+\def\@xfloat#1[#2]{\latex@xfloat#1[#2]\flt@fontsize}
+								% 1.06(3)
+\def\end@float{\flt@endfloat
+	\ifdim\bib@adjustheight=-\maxdimen\else
+		\advance\bib@adjustheight\@tempdima
+		\global\advance\bib@adjustheight\baselineskip \fi
+	\ifnum\@floatpenalty <\z@
+		\@nameuse{@largefloatcheck}%			% 2.00(2)
+		\@cons\@currlist\@currbox
+	\ifdim \ht\@currbox >\textheight 
+		\ht\@currbox\textheight \fi
+	\ifnum\@floatpenalty < -\@Mii 
+        	\penalty -\@Miv 
+		\@tempdima\prevdepth \vbox{} \prevdepth\@tempdima
+		\penalty\@floatpenalty
+	\else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@esphack
+	\fi\fi}
+\def\end@dblfloat{\if@twocolumn \flt@endfloat
+	\ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+	\ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi}
+\def\flt@endfloat{\par \boxmaxdepth\dp\strutbox			% 2.12(7c)
+	\global\@minipagefalse \@nameuse{outer@nobreak}\egroup	% 2.00(2)
+	\@nameuse{color@endbox}\@normalsize			% 2.00(2)
+	\@tempdima\ht\@currbox \advance\@tempdima\dp\@currbox
+	\divide\@tempdima\baselineskip \@tempcnta\@tempdima
+	\advance\@tempcnta\@ne \@tempdima\@tempcnta\baselineskip
+	\global\setbox\@currbox\vbox to\@tempdima{\box\@currbox\vfil}}
+								% 2.10(1)
+% 2.12(7a,b)>>
+\let\ipsj@cflb\@cflb
+\let\ipsj@comflelt\@comflelt
+\def\@cflb{\let\ipsj@botfigrule\botfigrule \let\botfigrule\vfil 
+	\let\@comflelt\ipsj@comfleltbot \ipsj@cflb
+	\let\@comflelt\ipsj@comflelt \let\botfigrule\ipsj@botfigrule}
+\def\ipsj@comfleltbot#1{%
+	\setbox#1\vbox to\ht#1{\vfil\unvbox#1\unskip}\ipsj@comflelt{#1}}
+% 2.12(7a,b)<<
+
+\def\cap@beforeskip{\nointerlineskip\vskip5pt}
+\def\cap@afterskip{\nointerlineskip\vskip5pt}
+\long\def\@caption#1[#2]#3{\par\begingroup
+	\fs@caption \cap@beforeskip
+	\@makecaption{{\bf \csname fnum@#1\endcsname}}{\ignorespaces#3}\par
+	\ifDS@english \cap@afterskip \fi
+	\endgroup}
+\def\ecaption{\@dblarg{\@ecaption\@captype}}
+\long\def\@ecaption#1[#2]#3{\par
+	\begingroup \fs@caption
+	\@makecaption{\csname fnum@e#1\endcsname}{\ignorespaces #3}\par
+	\cap@afterskip
+	\endgroup}
+
+\newif\ifcap@sw
+\newdimen\cap@linewidth
+\newdimen\cap@hsize
+\newcount\cap@prevgraf
+\newbox\cap@box
+\let\latex@label\label
+\long\def\@makecaption#1#2{\begingroup \gdef\cap@label{}\let\label\@gobble
+	\setbox0\hbox{#1\hskip\jspaceskip}
+	\advance\cap@linewidth-\wd0 \advance\cap@hsize-\wd0
+	\cap@makepar\cap@linewidth{#2}{\def\label##1{{%		    %1.03(1)
+		\def\protect{\noexpand\protect\noexpand}	    %1.03(1)
+		\xdef\cap@label{\cap@label\protect\label{##1}}}}}   %1.03(1)
+	\cap@swtrue
+	\ifnum\cap@prevgraf=\@ne
+		\setbox1\vbox{\unvcopy1\cap@getbox1
+			\ifhbox1 \global\setbox\cap@box\hbox{\unhbox1}
+			\ifdim\wd\cap@box>\cap@linewidth\else
+				\global\cap@swfalse \fi\fi}
+		\ifcap@sw\else
+			\cap@put{\vtop{\box\cap@box\hbox{}}}
+		\fi\fi
+	\ifcap@sw \cap@makepar\cap@hsize{#2}\relax
+	\ifnum\cap@prevgraf=\tw@
+		\setbox1\vbox{\unvcopy1\cap@getbox2\cap@getbox3
+			\ifhbox2\ifhbox3
+				\setbox2\hbox{\unhbox2}\setbox3\hbox{\unhbox3}
+				\ifdim\wd2>\cap@hsize\else
+				\ifdim\wd3>\cap@hsize\else
+				\global\cap@swfalse
+				\global\setbox\cap@box\vtop{\box3\box2\hbox{}}
+				\fi\fi\fi\fi}\fi
+	\ifcap@sw \setbox1\vtop{\hsize\cap@hsize
+		\@parboxrestore #2\par\hbox{}}\cap@put{\box1}
+	\else\cap@put{\box\cap@box}\fi
+	\fi
+	\endgroup \cap@label}
+\long\def\cap@makepar#1#2#3{\setbox1\vbox{\hsize#1\@parboxrestore
+	\rightskip\@flushglue \hfuzz\maxdimen
+	\exhyphenpenalty\z@ \finalhyphendemerits\z@
+	\let\@@par\cap@par \let\par\cap@par \global\cap@prevgraf\z@
+	#3#2\cap@par}}
+\let\cap@@par\@@par
+\def\cap@par{\cap@@par\global\advance\cap@prevgraf\prevgraf \prevgraf\z@}
+\def\cap@put#1{\hbox to\hsize{\hss\box0#1\hss}
+	\vskip-\baselineskip\prevdepth\z@}
+\def\cap@getbox#1{\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
+	\unskip\unkern\unpenalty\advance\@tempcnta\m@ne}\setbox#1\lastbox}
+
+\def\figref{\fref@ref\fname@figure}
+\def\Figref{\fref@ref\fname@Figure}
+\def\tabref{\fref@ref\fname@table}
+\let\Tabref\tabref
+\def\fref@ref#1{\@ifstar{\fref@sref{#1}}{\fref@iref\bf{#1}}}
+\def\fref@iref#1#2#3{{\@ifundefined{fref@r@#3}%
+	{#1#2\fref@doref{#3}\global\@namedef{fref@r@#3}{}}{#2\fref@doref{#3}}}}
+\def\fref@sref#1#2{#1\fref@doref{#2}}
+\def\fref@doref#1{{\let\null\relax\ref{#1}}}			% 1.06(2)
+\def\fref@nobreak{\nobreak\ifASCII\else\hskip\@@jasciikanjiskip\fi}
+								% 1.06(1)
+\def\figsref{\fref@refs\fname@figures}				% 2.12(8)>>
+\def\Figsref{\fref@refs\fname@Figures}
+\def\tabsref{\fref@refs\fname@tables}
+\let\Tabsref\tabsref
+\def\fref@refs#1{\@ifstar{\fref@irefs\relax{#1}}{\fref@irefs\bf{#1}}}
+\def\fref@irefs#1#2#3{\def\fref@list{#3}\@tempswafalse \@tempcnta\z@
+	\@for\fref@elem:=\fref@list\do{%
+		\@ifundefined{fref@r@\fref@elem}{\@tempswatrue}{}%
+		\advance\@tempcnta\@ne}%
+	\ifx#1\relax \@tempswafalse\fi
+	\ifDS@english {\if@tempswa #1\fi #2}\let\fref@temp\relax
+	\else \def\fref@temp{#2}\fi
+	\@for\fref@elem:=\fref@list\do{%
+		\if@tempswa \fref@iref{#1}{\fref@temp}{\fref@elem}%
+		\else \fref@temp\fref@doref{\fref@elem}\fi
+		\advance\@tempcnta\m@ne
+		\ifnum\@tempcnta=\@ne \fref@and
+		\else\ifnum\@tempcnta>\@ne \fref@comma \fi\fi}}
+\ifDS@english
+\def\fref@and{ and~}
+\def\fref@comma{, }
+\else
+\def\fref@and{\ipsj@j@comma}
+\let\fref@comma\fref@and
+\fi
+
+\ifDS@printer
+\def\figures{{\bf\fname@figures}}
+\def\Figures{{\bf\fname@Figures}}
+\def\tables{{\bf\fname@tables}}
+\let\Tables\tables
+\def\Ref{\fref@iref\bf\relax}
+\fi								% 2.12(8)<<
+
+\def\fig@extraspace{3mm}					%1.04(4)
+\def\figspace#1{\vskip#1\vskip\fig@extraspace}			%1.04(4)
+
+%%%%%% Footnote %%%%%%
+
+%% The following codes are from pfnote.sty, by H. Nakashima of Kyoto Univ.,
+%% to reset footnote counter at the begining of every page. (H.N.)
+
+% 1.04(2c)>>
+\def\footnote{\@ifnextchar[%]
+	{\@xfootnote}{{\PF@adjustfnote \stepcounter{\@mpfn}%
+		\def\protect{\noexpand\protect\noexpand}%
+		\xdef\@thefnmark{\thempfn}}\@footnotemark\@footnotetext}}
+\def\footnotemark{\@ifnextchar[%]
+	{\@xfootnotemark}{{\PF@adjustfnote \stepcounter{footnote}%
+		\def\protect{\noexpand\protect\noexpand}%
+		\xdef\@thefnmark{\thefootnote}}\@footnotemark}}
+% 1.04(2c)<<
+
+\newcount\PF@fnotectr\global\PF@fnotectr=\z@
+\newcount\PF@page\global\PF@page=-\@M
+\def\PF@thepage{\number\c@page}
+\def\PF@adjustfnote{\global\advance\PF@fnotectr\@ne
+	\expandafter\ifx\csname PF@fn\number\PF@fnotectr\endcsname\relax
+		\global\c@footnote\z@\else
+	\expandafter\@tempcnta\csname PF@fn\number\PF@fnotectr\endcsname\relax
+	\ifnum\@tempcnta=\PF@page\else
+		\global\PF@page\@tempcnta \global\c@footnote\z@ \fi\fi
+	\@tempcnta\c@footnote \multiply\@tempcnta\@M
+	\advance\@tempcnta\PF@fnotectr
+	\if@filesw{\let\PF@thepage\relax
+		\xdef\@gtempa{\write\@auxout{\string\PF@fnpage
+		{\number\@tempcnta}{\PF@thepage}}}}%
+		\@gtempa\fi}
+% 1.04(2a)<<
+
+% 1.04(2a)>>
+\def\PF@fnpage#1#2{\@tempcnta#1\relax \@tempcntb\@tempcnta \divide\@tempcnta\@M
+	\expandafter\xdef\csname PF@fnpage#2\endcsname{\number\@tempcnta}
+	\multiply\@tempcnta\@M \advance\@tempcntb-\@tempcnta	
+	\global\@namedef{PF@fn\number\@tempcntb}{#2}}
+% 1.04(2a)<<
+%% End of quote from pfnote.sty. (H.N.)
+
+\long\def\@makefntext#1{\leftskip20\@Q
+	\noindent\llap{\@makefnmarkforfn\hskip-\scriptspace\hskip5\@Q}#1}
+								% 1.04(2e)
+\def\@makefnmarkstar{$\@thefnmark$}				% 2.12(3)
+\def\@makefnmarkdagger{$\@thefnmark$}
+\def\@makefnmarkast{$\@thefnmark$}				% 2.12(3)
+\let\@makefnmarkforfn\@makefnmarkstar
+
+\def\@makefnmark{\smash{$^{\@thefnmark}$}}			% 2.12(3)
+								% 1.04(2d)
+						% smashed to make it
+						% zero height
+
+\def\thefootnote{\ifnum\c@footnote>0\relax{\star}\number\c@footnote\fi}
+								% 2.12(3)
+
+%%%%%% Citation %%%%%%
+
+%% The following codes for \cite are from overcite.sty by D. Arseneau, but
+%% modified for Trans. IPSJ (H.N.)
+%     O V E R C I T E . S T Y
+%
+%     version 3.2  (Mar 1993)
+%
+%     Compressed, sorted lists of superscript numerical citations.
+%     see also CITE.STY and DRFTCITE.STY
+%
+%     Copyright (C) 1989-1993 by Donald Arseneau
+%     These macros may be freely transmitted, reproduced, or modified for
+%     non-commercial purposes provided that this notice is left intact.
+%
+\def\cite{\protect\@p@cite}
+\def\@p@cite{\let\@citeY\@citey \@p@@cite}
+\def\Cite{\protect\@p@Cite}
+\def\@p@Cite{\let\@citeY\@Citey \@p@@cite}
+\def\@p@@cite{\@ifnextchar[%]
+		          {\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\def\@citex[#1]#2{\@citeY{\@p@citen{#2}}\if@tempswa\space[#1]\fi}
+\def\@citey#1{\leavevmode\unskip\kern\z@$\let\@cite@tiestyle\ipsj@j@citescript
+%     								% 2.06(2)
+								% 2.12(4)
+	\def\@cite@punct{,}\m@th^{\hbox{\scriptsize#1}}$\spacefactor\@m}
+\def\@Citey#1{\let\@cite@tiestyle\ipsj@j@citetext		% 2.12(4)
+								% 1.04(1)>>
+	\ifDS@english \def\@cite@punct{,\space\penalty\@highpenalty}
+	\else\def\@cite@punct{\ipsj@j@comma}\fi#1\spacefactor\@m}
+								% 1.04(1)<<
+								% 2.12(1b)
+\def\@p@citen#1{%
+	\edef\@tempa{\@ignspaftercomma,#1, \@end, }%
+	\edef\@tempa{\expandafter\@ignendcommas\@tempa\@end}%
+	\if@filesw \immediate\write\@auxout{\string\citation{\@tempa}}\fi
+	\@tempcntb\m@ne \let\@h@ld\relax \let\@citea\@empty
+	\let\@celt\relax \def\@cite@list{}%			% 2.06(3)
+	\@for\@citeb:=\@tempa\do{\@make@cite@list}%
+	\def\protect{\noexpand\protect\noexpand}%
+	\@tempcnta\m@ne \let\@celt\@compress@cite \@cite@list
+	\let\protect\relax \@h@ld}
+\def\@ignspaftercomma#1, {\ifx\@end#1\@empty\else
+	#1,\expandafter\@ignspaftercomma\fi}
+\def\@ignendcommas,#1,\@end{#1}
+
+%(
+\let\@cite@rp)
+\chardef\@cite@escape`\\
+\def\@make@cite@list{%
+    \expandafter\let\expandafter\@B@citeB\csname b@\@citeb\endcsname
+    \ifx\@B@citeB\relax
+	\@citea {\bf ?}\@cite@rp \let\@citea\@cite@punct
+	\@latex@warning{Citation `\@citeb' on page \thepage\space undefined}%
+								% 2.00(3)
+	\global\@namedef{b@\@citeb}{{\bf ?}}%
+    \else
+	\ifcat \@cite@escape\ifnum\z@<0\@B@citeB \@cite@escape\else A\fi
+	    \@tempcnta\@B@citeB \relax
+	    \ifnum \@tempcnta>\@tempcntb
+		\edef\@cite@list{\@cite@list \@celt{\@B@citeB}}%
+		\@tempcntb\@tempcnta
+	     \else
+		\edef\@cite@list{\expandafter\@sort@celt\@cite@list\@gobble @}%
+		\fi
+	\else \@citea \@B@citeB \@cite@rp \let\@citea\@cite@punct
+    \fi\fi}
+
+\def\@sort@celt#1#2{\ifx \@celt #1% parameters are \@celt {num}
+	\ifnum #2<\@tempcnta % number goes later in list
+	    \@celt{#2}\expandafter\expandafter\expandafter\@sort@celt
+	\else \@celt{\number\@tempcnta}\@celt{#2}\fi\fi}
+
+\def\@compress@cite#1{\advance\@tempcnta\@ne
+	\ifnum #1=\@tempcnta
+		\ifx\@h@ld\relax \edef\@h@ld{\@citea #1\@cite@rp}%
+		\else \edef\@h@ld{\@cite@tie{\protect\@cite@tiestyle}%
+								% 2.12(4)
+			\penalty\@highpenalty #1\@cite@rp}\fi
+	\else \@h@ld \@citea #1\@cite@rp
+		\let\@h@ld\relax
+	\fi \@tempcnta#1\relax \let\@citea\@cite@punct}
+
+%% End of quote from overcite.sty. (H.N.)
+
+\def\multicite{\protect\@p@multicite}
+\def\@p@multicite#1#2{\@citey{\@p@citen{#1}%
+	\@cite@tie\ipsj@j@citescript \@p@citen{#2}}}		% 2.12(4)
+\def\multiCite{\protect\@p@multiCite}
+\def\@p@multiCite#1#2{\@Citey{\@p@citen{#1}\@cite@tie\relax	% 2.12(4)
+	\penalty\@highpenalty \@p@citen{#2}}}
+
+
+%%%%%% Box Height Adjustment and Displayed Math %%%%%%
+
+\newbox\adj@boxa \newbox\adj@boxb
+\newdimen\adj@height
+\@tempdima\baselineskip \advance\@tempdima-\topskip
+\edef\adj@minaboveclearance{\the\@tempdima}
+\@tempdima\baselineskip \advance\@tempdima-1ex
+\edef\adj@maxaboveclearance{\the\@tempdima}
+
+\def\adj@setbhd#1{\setbox0\hbox{#1}				% 2.12(1c)>>
+	\@tempdima\baselineskip \advance\@tempdima-\ht0 \advance\@tempdima\dp0
+	\edef\adj@bhd{\the\@tempdima}}				% 2.12(1c)<<
+
+% 2.01(1) >>
+\def\adjustvboxheight{\ifinner \let\@tempa\relax
+	\let\endadjustvboxheight\relax \let\@endadjustvboxheight\relax
+	\else \let\@tempa\@adjustvboxheight \fi \@tempa}
+\def\@adjustvboxheight{\par\penalty\z@
+	\global\setbox\adj@boxa\vbox\bgroup\relax		% 1.01(3)
+	\let\@footnotetext\@mpfootnotetext			% 2.02(1)
+%								% 2.05(1)
+	\hsize\columnwidth}
+% 2.01(1) <<
+\def\endadjustvboxheight{\adj@closebox \adj@putbox
+	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
+%								% 2.02(1)
+	\global\@ignoretrue\@endparenv}
+\def\adj@closebox{\egroup \normalsize \boxmaxdepth\@maxdepth	% 1.01(1,3)
+	\setbox\adj@boxa\vbox{\unvbox\adj@boxa}			% 1.01(3)
+	\adj@height\ht\adj@boxa
+	\advance\adj@height\adj@minaboveclearance\relax
+	\@tempdima\adj@height \divide\adj@height\baselineskip
+	\@tempcnta\adj@height \adj@height\@tempcnta\baselineskip
+	\ifdim\adj@height<\@tempdima \advance\adj@height\baselineskip\fi}
+\def\adj@putbox{\vskip-\prevdepth \prevdepth\z@ \vskip\baselineskip
+	\vspace*{-\baselineskip}\advance\@tempdima-\adj@height
+	\@tempdima-\@tempdima \advance\@tempdima\adj@minaboveclearance\relax
+	\@tempdimb\dp\adj@boxa
+	\ifdim\@tempdima>\adj@maxaboveclearance\relax
+		\advance\@tempdima-\@tempdimb \advance\@tempdima\adj@bhd\relax
+		\divide\@tempdima\tw@
+		\vbox to\adj@height{\vskip\@tempdima \box\adj@boxa \vss}
+	\else	\vbox to\adj@height{\vfil\box\adj@boxa\vskip-\@tempdimb}\fi}
+
+\newcount\adj@deadcycle
+\@namedef{adjustvboxheight*}{\adjustvboxheight}
+\@namedef{endadjustvboxheight*}{\@endadjustvboxheight}
+\def\@endadjustvboxheight{\global\adj@deadcycle10\relax
+	\@iendadjustvboxheight
+	\ifvoid\@mpfootins\else\insert\footins{\unvbox\@mpfootins}\fi
+%								% 2.05(2)
+	\global\@ignoretrue\@endparenv}
+\def\@iendadjustvboxheight{\adj@closebox
+	\ifnum\adj@deadcycle<\@ne
+	\ipsj@error{I cannot adjust too tall/deep box}{\@ehd}\fi    % 2.00(3)
+	\global\advance\adj@deadcycle\m@ne
+	\ifdim\pagegoal=\maxdimen
+		\@tempdimb\@colht \advance\@tempdimb-\topskip
+		\advance\@tempdimb\baselineskip
+	\else \@tempdimb\pagegoal
+		\advance\@tempdimb-\pagetotal \advance\@tempdimb-\pagedepth
+		\advance\@tempdimb\prevdepth \fi		% 1.01(4a)
+	\let\next\relax
+	\ifdim\adj@height<\@tempdimb \adj@putbox \else
+	\ifdim\adj@height=\@tempdimb \adj@putbox \else
+	\divide\@tempdimb\baselineskip \@tempcnta\@tempdimb	% 1.01(4b)>>
+	\@tempdimb\@tempcnta\baselineskip
+	\advance\@tempdimb-\adj@minaboveclearance\relax		% 1.01(4b)<<
+	\setbox\adj@boxa\vbox{\allowbreak\unvbox\adj@boxa}
+	\vbadness\@M \splittopskip\z@ \splitmaxdepth\@maxdepth	%1.01(1)
+	\setbox\@tempboxa\vsplit\adj@boxa to\@tempdimb
+	\setbox\adj@boxb\copy\adj@boxa
+	\setbox\@tempboxa\vbox{\unvbox\@tempboxa}
+	\@tempdimb\ht\@tempboxa \advance\@tempdimb\dp\@tempboxa
+	\ifdim\@tempdimb>\z@
+		\setbox\adj@boxa\vbox\bgroup\unvbox\@tempboxa
+		\adj@closebox \adj@putbox \newpage
+	\else \newpage \fi
+	\setbox\adj@boxa\vbox\bgroup\unvbox\adj@boxb
+	\let\next\@iendadjustvboxheight \fi\fi \next}
+
+\def\adj@eqindent{2\@mojihaba}
+\def\[{\adjustvboxheight\advance\@totalleftmargin\adj@eqindent\relax
+	\hbox to\hsize\bgroup\hskip\@totalleftmargin$\displaystyle}
+\def\]{$\hfill\egroup\endadjustvboxheight\@doendpe\ignorespaces} % 2.03(1)
+\def\equation{\refstepcounter{equation}\[}
+\def\endequation{\hfill\@eqnnum$\egroup\endadjustvboxheight}
+\def\theequation{\arabic{equation}}
+\def\@eqnnum{{\rm (\theequation)\hskip\@mojihaba}} 
+
+\def\adj@eqnlineskip{3pt}
+\def\adj@eqnlineskiplimit{2pt}
+\def\eqnarray{\futurelet\@tempa\adj@eqnarray}
+\def\adj@eqnarray{\ifx\@tempa[%]
+	\let\next\adj@ieqnarray\else\let\next\adj@xeqnarray\fi\next}
+\def\adj@ieqnarray[#1]{\@ifundefined{adj@xeqnarray#1}%
+	{\ipsj@warning{Unknown eqnarray option `#1'}\adj@xeqnarray}% 2.00(3)
+	{\@nameuse{adj@xeqnarray#1}}}
+\def\adj@xeqnarray{\adjustvboxheight
+	\advance\@totalleftmargin\adj@eqindent\relax
+	\stepcounter{equation}\let\@currentlabel=\theequation
+	\global\@eqnswtrue
+	\global\@eqcnt\z@\tabskip\z@\let\\=\@eqncr
+	\lineskip\adj@eqnlineskip \lineskiplimit\adj@eqnlineskiplimit \jot\z@
+	\halign to \hsize\bgroup\@eqnsel\hskip\@totalleftmargin
+		\hfil$\displaystyle{##}$&\global\@eqcnt\@ne	% 1.01(2)
+		\hfil$\displaystyle{}\mathrel{##}{}$\hfil
+		&\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+		\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\adj@xeqnarrays{\let\endadjustvboxheight\@endadjustvboxheight
+	\adj@xeqnarray}
+\@namedef{adj@xeqnarrays!}{\par\let\adjustvboxheight\relax
+	\let\endadjustvboxheight\relax \adj@xeqnarray}
+\def\endeqnarray{\@@eqncr \egroup \global\advance\c@equation\m@ne
+	\endadjustvboxheight}
+
+
+%%%%%% Miscellaneous %%%%%%
+
+%% \doublerulesep is 1pt (H.N.)
+\arraycolsep5pt \tabcolsep6pt \arrayrulewidth.4pt \doublerulesep1pt 
+\tabbingsep.5\@mojihaba
+
+\skip\@mpfootins\skip\footins
+\fboxsep3pt \fboxrule.4pt 
+
+%% We simply allow (not encourage) club and widow lines. (H.N.)
+\clubpenalty\z@ \widowpenalty\z@ \displaywidowpenalty\z@
+
+% The following redefinition influences \linebreak etc.
+\def\sloppy{\tolerance9999\hbadness9999\hfuzz.5\p@ \vfuzz.5\p@}
+
+%% For heading of TBIO papers
+\ifDS@TBIO							% 2.11(1)>>
+\def\TBIOpapercategory#1{\def\ipsj@TBIO@pcat{#1}\ignorespaces}
+\def\ipsj@TBIO@pcat{original}
+\def\ipsj@TBIO@pcat@original{Original Paper}
+\def\ipsj@TBIO@pcat@survey{Survey Paper}
+\def\ipsj@TBIO@pcat@database{Database/Software Paper}
+\def\ipsj@TBIO@pcatref{\@ifundefined{ipsj@TBIO@pcat@\ipsj@TBIO@pcat}%
+    {\ipsj@warning{TBIO paper category \ipsj@TBIO@pcat\space is undefined.}}%
+    \relax
+  \@nameuse{ipsj@TBIO@pcat@\ipsj@TBIO@pcat}}
+\fi								% 2.11(1)<<
+
+
+% 2.12(1a)>>
+\let\ipsj@j@citescript\scriptsize				% 2.12(4)>>
+\let\ipsj@j@citetext\normalsize
+\def\@cite@tie#1{\hbox{#1--}}					% 2.12(4)<<
+\def\bib@refname{References}
+\adj@setbhd{A}
+
+\ifipsj@nonjp \let\next\endinput \else \let\next\relax \fi
+\next
+
+\def\ipsj@j@a{あ}
+\def\ipsj@j@app{付録}
+\def\ipsj@j@ack{謝辞}
+\def\ipsj@j@bib{参考文献}
+\def\ipsj@j@fig{図}
+\def\ipsj@j@tab{表}
+\def\ipsj@j@comma{,}
+\def\ipsj@j@technote{テクニカルノート}
+\def\ipsj@j@invited{招待論文}
+\def\ipsj@j@sigrec{研究会推薦論文}
+\def\ipsj@j@talkabst{発表概要}
+\def\ipsj@j@presently{現在,}
+\def\ipsj@j@jipsj{情報処理学会論文誌}
+\def\ipsj@j@regpaper{論文}
+\def\ipsj@j@contactto{連絡先}
+\def\ipsj@j@abstract{概要}
+\def\ipsj@j@colon{:}
+\def\ipsj@j@year{年}
+\def\ipsj@j@month{月}
+\def\ipsj@j@day{日}
+\def\ipsj@j@lp{(}
+\def\ipsj@j@rp{)}
+\def\ipsj@j@edinch{担当編集委員}
+\def\ipsj@j@rerec{再受付}
+\def\ipsj@j@received{受付}
+\def\ipsj@j@accepted{採録}
+\def\ipsj@j@presented{発表}
+\def\ipsj@j@member{正会員}
+\def\ipsj@j@stmember{学生会員}
+\def\ipsj@j@nomember{非会員}
+
+\ifDS@english\else \ifDS@draft\else
+\sec@setskips{\ipsj@j@a}
+\fi\fi
+
+\expandafter\let\csname c@巻数\endcsname\c@volume
+\expandafter\let\csname c@号数\endcsname\c@number
+\expandafter\let\csname c@月数\endcsname\c@number
+\expandafter\let\csname c@年数\endcsname\c@year
+
+\def\ipsj@sig@PRO@j{プログラミング}
+\def\ipsj@sig@TOM@j{数理モデル化と応用}
+\def\ipsj@sig@TOD@j{データベース}
+\def\ipsj@sig@HPS@j{ハイパフォーマンスコンピューティングシステム}
+\def\ipsj@sig@CVIM@j{コンピュータビジョンとイメージメディア}
+\def\ipsj@sig@ACS@j{コンピューティングシステム}			% 2.09(2)
+
+\def\ra@nengo{平成}	%% Change here when ...
+\let\受付\received
+\let\採録\accepted
+\let\発表\presented						% 2.07(7)
+\let\再受付\rereceived
+
+\def\々{\hskip\jintercharskip\hbox to\jspaceskip{\hfil 々\hfil}%% 2.12(5)
+	\hskip\jintercharskip}
+
+\ifDS@english\else \ifDS@draft\else
+{\fs@sec \@tempdima7\jspaceskip
+\xdef\bib@refname{\hbox to\the\@tempdima{\jintercharskip\fill\ipsj@j@bib}}}
+\adj@setbhd\ipsj@j@a
+\fi\fi
+
+\def\ipsj@j@colon@command{{\nobreak				% 2.12(2)>>
+	\hbox to.7\jspaceskip{:\hss}\allowbreak
+	\@tempdima.3\jspaceskip \hskip\@tempdima minus\@tempdima
+	\allowbreak
+	\hskip\z@ minus-\@tempdima}\ignorespaces}
+\def\ipsj@defcolonforbib{\let\:\ipsj@j@colon@command}
+\ifDS@printer \ipsj@defcolonforbib \fi				% 2.12(2)<<
+
+
+%%%%%% Kinsoku Parameters %%%%%%
+
+% 1.04(3)>>
+\ifASCII
+\postbreakpenalty`\`=\@M
+\prebreakpenalty`'=\@M
+\prebreakpenalty`)=\@M
+\postbreakpenalty`(=\@M
+\prebreakpenalty`]=\@M
+\postbreakpenalty`[=\@M
+\prebreakpenalty`\}=\@M
+\postbreakpenalty`\{=\@M
+
+\prebreakpenalty`・=\@M
+\prebreakpenalty`:=\@M
+\prebreakpenalty`;=\@M
+\prebreakpenalty`?=\@M
+\prebreakpenalty`!=\@M
+
+\prebreakpenalty\jis"212D=\@M		% ´
+\postbreakpenalty\jis"212E=\@M		% `
+\postbreakpenalty\jis"2146=\@M		% ‘
+\prebreakpenalty\jis"2147=\@M		% ’
+\postbreakpenalty\jis"2148=\@M		% “
+\prebreakpenalty\jis"2149=\@M		% ”
+
+\prebreakpenalty`)=\@M
+\postbreakpenalty`(=\@M
+\prebreakpenalty`}=\@M
+\postbreakpenalty`{=\@M
+\prebreakpenalty`]=\@M
+\postbreakpenalty`[=\@M
+\postbreakpenalty`‘=\@M
+\prebreakpenalty`’=\@M
+
+\postbreakpenalty\jis"214C=\@M		%〔
+\prebreakpenalty\jis"214D=\@M		% 〕
+\postbreakpenalty\jis"2152=\@M		% 〈
+\prebreakpenalty\jis"2153=\@M		% 〉
+\postbreakpenalty\jis"2154=\@M		% 《
+\prebreakpenalty\jis"2155=\@M		% 》
+\postbreakpenalty\jis"2156=\@M		% 「
+\prebreakpenalty\jis"2157=\@M		% 」
+\postbreakpenalty\jis"2158=\@M		% 『
+\prebreakpenalty\jis"2159=\@M		% 』
+\postbreakpenalty\jis"215A=\@M		% 【
+\prebreakpenalty\jis"215B=\@M		% 】
+
+\prebreakpenalty`ー=\@M						% 2.12(6)
+\prebreakpenalty`〜=\@M						% 2.12(6)
+
+\prebreakpenalty`ぁ=\@M
+\prebreakpenalty`ぃ=\@M
+\prebreakpenalty`ぅ=\@M
+\prebreakpenalty`ぇ=\@M
+\prebreakpenalty`ぉ=\@M
+\prebreakpenalty`っ=\@M
+\prebreakpenalty`ゃ=\@M
+\prebreakpenalty`ゅ=\@M
+\prebreakpenalty`ょ=\@M
+\prebreakpenalty\jis"246E=\@M		% ゎ
+\prebreakpenalty`ァ=\@M
+\prebreakpenalty`ィ=\@M
+\prebreakpenalty`ゥ=\@M
+\prebreakpenalty`ェ=\@M
+\prebreakpenalty`ォ=\@M
+\prebreakpenalty`ッ=\@M
+\prebreakpenalty`ャ=\@M
+\prebreakpenalty`ュ=\@M
+\prebreakpenalty`ョ=\@M
+\prebreakpenalty\jis"256E=\@M		% ヮ
+\prebreakpenalty\jis"2575=\@M		% ヵ
+\prebreakpenalty\jis"2576=\@M		% ヶ
+
+\fi
+% 1.04(3)<<
+% 2.12(1a)<<
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjdrafts.sty	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,392 @@
+% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
+%                            The Editorial Board of the IPSJ Journal
+%
+% ipsjdrafts.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% (revision history deleted)
+% ipsjdrafts.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
+
+%%%%%% Fonts %%%%%%
+% All font loading are removed.
+
+\ifipsj@nonjp\else						% 2.12(1a)
+\ifASCII
+\let\latex@setsize\@setsize
+\def\@setsize#1#2#3#4{\latex@setsize{#1}{#2}{#3}{#4}\jspaceskip1zw}
+
+\newcount\jfsize
+\let\setjglues\relax
+\let\jintercharskip\kanjiskip
+\let\jasciikanjiskip\xkanjiskip
+\let\jmathkanjiskip\xkanjiskip
+\newdimen\jspaceskip
+
+\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}}
+\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}}
+\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}}
+\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}}
+
+\def\@asciiwarning#1{\ipsj@warning{\string#1\space		% 2.00(1)
+	is not supported in ASCII version}}
+
+\if@LaTeX@eN							% 2.00(2)>>
+\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\fi								% 2.00(2)<<
+
+\def\dg{\gt}							% 1.06(1)
+\def\dm{\mc}							% 1.06(1)
+
+\else	% This is necessary even in 2e.
+\ifx\sixdm\undefined \jfont\sixdm=dm6 \fi			% 1.01(1)
+								% 1.06(2)
+\fi \fi
+
+\if@LaTeX@eN							% 2.00(2)>>
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
+\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
+\fi								% 2.00(2)<<
+
+%%%%%% Basic Font Size Macros %%%%%%
+% Nothing at all.
+
+
+%%%%%% Font Size Macros %%%%%%
+
+\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip
+	\@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}%
+		{\@setsize{#1}{#2}{#3}{#4}}}
+
+% \baselineskip's are almost 1.25 times those defined in NTT jart12.
+
+\def\@normalsize{\@setsize\normalsize{20pt}\xiipt\@xiipt}
+\def\small{\fs@setsize\small{17pt}\xipt\@xipt}
+\def\footnotesize{\fs@setsize\footnotesize{14pt}\xpt\@xpt}
+\def\scriptsize{\@setsize\scriptsize{11.875pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8.75pt}\vipt\@vipt}
+\def\large{\@setsize\large{20pt}\xivpt\@xivpt}			% 1.06(3)
+\def\Large{\@setsize\Large{25pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\let\huge\LARGE
+\let\Huge\LARGE
+
+\if@LaTeX@e							% 2.00(3)>>
+\let\normalsize\@normalsize
+\fi								% 2.00(3)<<
+
+\let\fs@sec\large
+\let\fs@subsec\normalsize
+\let\fs@bibliography\normalsize
+\let\fs@caption\normalsize
+\let\fs@table\normalsize
+\let\fs@footnote\footnotesize
+{\tiny \xdef\fn@fontv{\ifipsj@nonjp \the\font \else		% 2.12(1a)
+	\ifASCII \the\jfont \else \sixdm \fi\fi}}
+\let\fn@fontvi\fn@fontv
+
+\@normalsize 
+
+\ifipsj@nonjp\else						% 2.12(1a)
+\ifASCII\else							% 1.06(2) >>
+\ifx\setjglue\undefined\else					% 2.04(1)
+\def\@tempc{\edef\@tempa{\the\ja}
+	\edef\@tempa{\expandafter\string\@tempa}
+	\expandafter\@tempb\@tempa\@nil
+	\expandafter\defjintercharskip\csname\@tempa\endcsname}
+\let\@tempd\@namedef
+{\catcode`j=12\catcode`a=12\gdef\@tempb#1#2ja\@nil{\@tempd{@tempa}{#2}}}
+\dg\@tempc{0pt}{1.4pt}{0.14pt}
+\dm\@tempc{0pt}{1.4pt}{0.14pt}
+\setjglues
+\fi\fi\fi							% 1.06(2) <<
+
+\@tempdima.55\baselineskip
+\edef\sec@aboveskip{\the\@tempdima}
+\@tempdima.45\baselineskip
+\edef\sec@belowskip{\the\@tempdima}
+
+\ifipsj@nonjp\else						% 2.12(1a)
+\if@LaTeX@e\else						% 2.04(2)
+\let\latex@bf\bf						% 1.06(1)
+\def\bf{\dg\latex@bf}						% 1.06(1)
+\fi\fi								% 2.04(2)
+
+
+%%%%%% Page Layout Parameters %%%%%%
+
+\newdimen\@mojihaba
+\ifipsj@nonjp							% 2.12(1a)>>
+	\@mojihaba11.54659pt
+	\let\jspaceskip\@mojihaba
+\else
+	\@mojihaba\jspaceskip
+\fi								% 2.12(1a)<<
+
+% No heads
+\headheight\z@
+\headsep\z@
+
+\setbox0\hbox{$\displaystyle X^X$}
+\topskip\ht0
+
+% 1 page = 32 lines
+\textheight31\baselineskip \advance\textheight\topskip \advance\textheight100sp
+
+% \topmargin is (A4height-\textheight)/2 - 1in
+\topmargin296mm \advance\topmargin-\textheight \divide\topmargin\tw@
+\advance\topmargin-1in
+\ifASCII\if@LaTeX@e\ifipsj@nonjp\else
+	\@@topmargin\topmargin \fi\fi\fi		% 2.00(4),2.12(1a)
+
+\footskip 1.5\baselineskip
+
+% 1 page = 35 Kanji chars
+\ifDS@english							% 1.06(4) >>
+\textwidth404.13048pt
+\else
+\textwidth35\@mojihaba
+\fi								% 1.06(4) <<
+
+% \oddsidemargin is (A4width-\textwidth)/2 - 1in
+\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@
+\advance\oddsidemargin-1in
+
+% As jart12
+\footnotesep10pt
+\skip\footins 10.8pt plus 4pt minus 2pt 
+\def\footnoterule{\kern-3\p@ \hrule width.4\columnwidth \kern2.6\p@}
+
+\floatsep \baselineskip \textfloatsep \baselineskip 
+\intextsep \baselineskip \@maxsep \baselineskip
+\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip
+\@dblmaxsep \baselineskip
+\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil 
+\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil
+
+\parskip\z@ \parindent \@mojihaba
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty 
+
+
+%%%%%% Title and Authors %%%%%%
+%
+% Format of title, author names and abstract.
+%
+%	\leftline{\LARGE <<paper-category>>}
+%	\vfill
+%	\beign{center}\LARGE\bf <Japanese title>\end{center}
+%	\vfill
+%	\begin{center}\LARGE\bf <Engilish title>\end{center}
+%	\vfill\vfill
+%	\newpage
+%	\large <Japanese author names>
+%	\vfill
+%	<<contact info>>
+%	\begin{itemize}\item[]\large <Contact address>\end{itemize}
+%	\vfill\vfill
+%	\newpage
+%	\normalsize <Japanese abstract>
+%	\normalsize <English abstract>
+
+\def\maketitle{\@maketitle}
+
+% default title header
+
+\def\title{\@dblarg{\@xtitle}}
+\def\@xtitle[#1]#2{\gdef\@title{#2}}
+\def\@title{\leavevmode\mkt@warning\title}
+\long\def\author#1{\long\gdef\@author{#1}}
+\def\@author{\mkt@warning\author}
+
+\newbox\@abstractbox
+
+\def\abstract{\global\let\@abstract\relax
+	\global\setbox\@abstractbox\vtop\bgroup}
+\def\endabstract{\par\hbox{}\egroup}
+\def\@abstract{\mkt@warning{abstract env}}
+
+%% We need English title, author name(s) and abstract. (H.N.)
+%% English author names are simply ignored.
+\def\etitle#1{\gdef\@etitle{#1}}
+\def\@etitle{\leavevmode\mkt@warning\etitle}
+\long\def\eauthor#1{}
+
+\newbox\@eabstractbox
+\def\eabstract{\global\let\@eabstract\relax
+	\global\setbox\@eabstractbox\vtop\bgroup}
+\let\endeabstract\endabstract
+\def\@eabstract{\mkt@warning{eabstract env}}
+
+\ifDS@english \let\abstract\eabstract \let\@eabstract\@abstract \fi
+
+% Contact address is no longer required even in draft.
+\def\contact{\long\def\mkt@contact}
+\def\mkt@contact{}						% 2.12(4)
+
+\def\@maketitle{\newpage\thispagestyle{empty}
+	\leftline{\LARGE
+		\ifDS@TBIO \ipsj@TBIO@pcatref			% 2.11(1)
+		\else\ifDS@english \ifDS@technote Technical Note\else
+			Regular Paper\fi
+		\else \ifDS@technote \ipsj@j@technote		% 2.12(1b)
+			       \else \ipsj@j@regpaper\fi\fi\fi}
+	\vfill
+	\begin{center}\LARGE\bf\@title\end{center}
+	\ifDS@english\else 
+		\vfill
+		\begin{center}\LARGE\bf\@etitle\end{center}\fi
+	\@thanks
+	\vfill\vfill
+%								% 2.12(4)>>
+%	\ifDS@anonymous\else					% 2.10(1)>>
+%	    \newpage\thispagestyle{empty}
+%	    \begingroup\large\vspace*{\fill}\rightskip0pt plus1fil
+%	    \parindent\z@\parskip.5\baselineskip\hangindent2em\hangafter\@ne
+%	    \def\par{{\@@par}}
+%	    \mkt@makeauthor
+%	    \par\vfill
+%	    \noindent
+%	    \ifDS@english Contact To:\else \ipsj@j@contactto \fi% 2.12(1b)
+%	    \endgroup
+%	    \begin{itemize}\large\item[]\mkt@contact\end{itemize}
+%	    \vfill\vfill
+%	\fi							% 2.10(1)<<
+%								% 2.12(4)<<
+	\newpage \setcounter{page}{1}\def\thepage{\roman{page}}
+	\ifDS@english\else \@abstract \centerline{\bf \ipsj@j@abstract}
+%								% 2.12(1b)
+		\vskip-\prevdepth\vskip\baselineskip\vskip-\ht\@abstractbox
+		\unvbox\@abstractbox\prevdepth\z@ \fi
+	\centerline{\bf Abstract}
+	\vskip-\prevdepth \vskip\baselineskip\vskip-\ht\@eabstractbox
+	\@eabstract \unvbox\@eabstractbox
+	\newpage \def\thepage{\arabic{page}}\setcounter{page}{1}}
+
+\def\mkt@makeauthor{\let\member\mkt@member \let\nomember\mkt@nomember
+	\let\stmember\mkt@stmember
+	\expandafter\mkt@imakeauthor\@author\and\@nil\and}
+\def\mkt@imakeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax
+	\else #1\par\let\next\mkt@imakeauthor\fi\next}
+
+% Macros to specify author's affiliation easily.
+\ifDS@english
+\def\paffilabel#1#2{\affilabel{#1}{Presently with #2}}
+\else
+\def\paffilabel#1#2{\affilabel{#1}{\ipsj@j@presently #2}}
+\fi
+% Ignore English affiliation even if given.
+\def\affilabel#1#2{\@ifundefined{affi@r@#1}%
+		{\expandafter\xdef\csname affi@r@#1\endcsname
+			{\affi@cuteng#2\\\@nil}}
+		{\ipsj@warning{Affiliation label `#1' multiply defined}}}
+								% 2.00(1)
+\def\affiref#1{\@ifundefined{affi@r@#1}%
+		{\ipsj@warning{%				% 2.00(1)
+			Affiliation reference `#1' undefined}\hbox{(???)}}
+		{\setbox\@tempboxa\hbox{(\csname affi@r@#1\endcsname)}%
+			\@tempdima\wd\@tempboxa \advance\@tempdima2em\relax
+			\ifdim\@tempdima>\hsize
+				\newline\unhbox\@tempboxa
+			\else\ \box\@tempboxa\fi}}
+\def\affi@cuteng#1\\#2\@nil{#1}
+
+% Membership of aurthor is required in draft.
+\ifDS@english
+\def\mkt@member#1{\ \hbox{[Regular Member\##1]}}
+\def\mkt@nomember{\ \hbox{[Non Member]}}
+\def\mkt@stmember#1{\ \hbox{[Student Member\##1]}}
+\else
+\def\mkt@member#1{\ \hbox{[\ipsj@j@member\##1]}}
+\def\mkt@nomember{\ \hbox{[\ipsj@j@nomember]}}
+\def\mkt@stmember#1{\ \hbox{[\ipsj@j@stmember\##1]}}
+\fi
+
+%%%%%% Page Header and Footer %%%%%% 
+
+\mark{{}{}} 
+
+% The following counters are not used, but may appear.
+\let\c@volpage\c@page						% 2.00(5)
+\def\thevolpage{\thepage}					% 2.00(5)
+\newcounter{volpageoffset} % You must set this to appropriate value
+\newcounter{volume}						% 2.12(1b)>>
+\newcounter{number}
+\newcounter{year}						% 2.12(1b)<<
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+	\def\@oddhead{\@checklines}\let\@evenhead\@oddhead
+	\def\@oddfoot{\rm \hfil\thepage\hfil}\let\@evenfoot\@oddfoot}
+
+\def\transaction#1#2#3{}					% 2.11(2)
+\long\def\copyrightnotice#1{}					% 2.11(2)
+
+% \checklines enables to draw a horizontal rule onto each baselines.
+
+\newif\if@checklines \@checklinesfalse
+\def\checklines{\@checklinestrue}
+\def\@checklines{\if@checklines \rlap{\smash{\vtop{
+	\hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip
+	\hrule\vskip-.4pt
+	\@tempcnta31\relax\@@checklines}}}\hfil\fi}
+\def\@@checklines{\ifnum\@tempcnta>\z@
+	\vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne
+	\let\next\@@checklines\else\let\next\relax\fi\next}
+
+\pagestyle{plain}
+\pagenumbering{arabic}
+
+\ifDS@english\else
+\def\today{\the\year\ipsj@j@year \the\month\ipsj@j@month \the\day\ipsj@j@day}
+								% 2.12(1b)
+\fi
+
+
+%%%%%% Output Routine %%%%%%
+% Nothing at all.
+
+
+%%%%%% Biography %%%%%%
+% Almost nothing.
+
+\def\received#1#2#3{}						% 2.12(1b)>>
+\def\accepted#1#2#3{}
+\def\rereceived#1#2#3{}						% 2.11(2)>>
+% definition of \released is removed				% 2.12(2)
+\def\edInCharge#1{}						% 2.11(2)<<
+%								% 2.12(1b)<<
+
+\def\biography{\let\member\@gobble \let\nomember\@gobble \let\stmember\@gobble
+	\ifDS@english \let\author\@gobble \fi			% 2.12(3)
+	\let\adjust\@gobble \setbox0\vbox\bgroup
+	\tolerance\@M \hbadness\@M \hfuzz\maxdimen}
+\def\endbiography{\egroup\setbox0\hbox{}}
+
+
+%%%%%% Miscellaneous %%%%%%
+
+\raggedbottom
+
+\input{ipsjcommon.sty}
+
+% Redefine \acknowledgment to put it separately.
+\newbox\ack@box
+\let\@acknowledgment\acknowledgment
+
+\def\acknowledgment{\global\setbox\ack@box\vtop\bgroup\@acknowledgment}
+\def\endacknowledgment{\par\egroup}
+
+%								% 2.12(4)>>
+%\let\id@enddocument\enddocument
+%\def\enddocument{\clearpage
+%	\ifDS@anonymous\else \unvbox\ack@box \fi		% 2.10(1)
+%	\id@enddocument}
+%								% 2.12(4)<<
+
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjpapers.cls	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,16 @@
+% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
+%                            The Editorial Board of the IPSJ Journal
+%
+% ipsjpapers.cls 13-Mar-07 by Hiroshi Nakashima (ver 2.12)
+% (revision history deleted)
+% ipsjpapers.cls  1-Apr-96 by Hiroshi Nakashima (ver 2.00)
+
+\ifx\pfmtname\undefined
+\NeedsTeXFormat{LaTeX2e}
+\else
+\NeedsTeXFormat{pLaTeX2e}
+\fi
+
+\ProvidesClass{ipsjpapers}[2007/06/15 ver 2.12]
+\input{ipsjpapers.sty}
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjpapers.sty	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,1919 @@
+% Copyright (C) 1995-2007 by Hiroshi Nakashima, Yasuki Saito and
+%                            The Editorial Board of the IPSJ Journal
+%
+% ipsjpapers.sty 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% (revision history deleted)
+% ipsjpapers.sty 24-Apr-95 by Hiroshi Nakashima (ver 1.0)
+% ipsjpapers.sty 30-Nov-93 by Hiroshi Nakashima
+% ipsjpapers.sty 3-Feb-93 by Yaski Saito
+% compsoft.sty 22-April-92 by Yaski Saito
+% compsoft.sty 18-July-90 by Hideki Isozaki 
+% j-article.sty 10-Feb-89 from report.sty 16-Mar-88
+
+%%%%%% LaTeX Version %%%%%%
+
+% 2.00(1) >>
+%% \ifASCII is true if ASCII version Japanese TeX, which doesn't have
+%% \jintercharskip (H.N.)
+\newif\ifipsj@nonjp \ipsj@nonjpfalse				% 2.12(1a)
+\newif\ifASCII \ASCIIfalse
+\ifx\jintercharskip\undefined \ASCIItrue
+\ifx\kanjiskip\undefined \ipsj@nonjptrue			% 2.12(1a)
+\fi\fi
+\newif\if@LaTeX@e \@LaTeX@efalse				% 1.06(1)
+\newif\if@LaTeX@eN \@LaTeX@eNfalse				% 2.00(1)
+\def\@tempa{LaTeX2e}						% 1.06(1)
+\ifx\fmtname\@tempa \@LaTeX@etrue				% 1.06(1)
+\ifx\xpt\undefined \@LaTeX@eNtrue \fi\fi			% 2.00(1)
+% 2.00(1) <<
+
+
+
+%%%%%% Document Styles %%%%%%
+
+% 2.00(2) >>
+\newif\ifDS@printer \DS@printerfalse
+\newif\ifDS@english \DS@englishfalse
+\newif\ifDS@technote \DS@technotefalse
+\newif\ifDS@preface \DS@prefacefalse
+\newif\ifDS@draft \DS@draftfalse
+\newif\ifDS@techrep \DS@techrepfalse				% 1.05(2)
+\newif\ifDS@sigrecommended \DS@sigrecommendedfalse		% 2.04(1)
+\newif\ifDS@invited \DS@invitedfalse				% 2.06(1)
+\newif\ifDS@abstract \DS@abstractfalse				% 2.07(7)
+\newif\ifDS@private \DS@privatefalse				% 2.07(8)
+\newif\ifDS@anonymous \DS@anonymousfalse			% 2.10(1)
+\newif\ifDS@TBIO \DS@TBIOfalse					% 2.11(1)
+\newif\ifDS@online \DS@onlinefalse				% 2.12(4a)
+
+\if@LaTeX@eN
+\DeclareOption{printer}{\DS@printertrue}			% 2.09(1)
+								% 2.12(2)
+\DeclareOption{english}{\DS@englishtrue}
+\DeclareOption{technote}{\DS@technotetrue}
+\DeclareOption{preface}{\DS@prefacetrue}
+\DeclareOption{draft}{\DS@drafttrue}
+\DeclareOption{techrep}{\DS@techreptrue}
+\DeclareOption{sigrecommended}{\DS@sigrecommendedtrue}		% 2.04(1)
+\DeclareOption{invited}{\DS@invitedtrue}			% 2.06(1)
+\DeclareOption{abstract}{\DS@abstracttrue}			% 2.07(7)
+\DeclareOption{private}{\DS@privatetrue}			% 2.07(8)
+\DeclareOption{anonymous}{\DS@anonymoustrue}			% 2.10(1)
+\DeclareOption{TBIO}{\DS@TBIOtrue \DS@englishtrue}		% 2.11(1)
+\DeclareOption{online}{\DS@onlinetrue \DS@printertrue \DS@englishtrue}
+								% 2.12(4a)
+\DeclareOption{10pt}{\def\@ptsize{0}}
+\DeclareOption{11pt}{\def\@ptsize{1}}
+\DeclareOption{12pt}{\def\@ptsize{2}}
+\ExecuteOptions{10pt}
+\ProcessOptions
+\def\ipsj@warning{\ClassWarning{ipsjpapers}}			% 2.00(3)
+\def\ipsj@error{\ClassError{ipsjpapers}}			% 2.00(3)
+\newskip \old@latex@skip					% 2.00(14)
+\let\@maxsep\old@latex@skip					% 2.00(14)
+\let\@dblmaxsep\old@latex@skip					% 2.00(14)
+
+\else
+\expandafter\ifx\csname ver@ipsjpapers.cls\endcsname\relax
+\typeout{Document Style `ipsjpapers' (ver 2.12) <15 Jun 2007>.}	% 2.05(1)
+\fi % \ifx
+
+\def\ds@printer{\relax}						% 2.09(1)
+\def\ds@english{\DS@englishtrue}
+\def\ds@technote{\DS@technotetrue}
+\def\ds@preface{\DS@prefacetrue}
+\def\ds@draft{\DS@drafttrue}
+\def\ds@techrep{\DS@techreptrue}				% 1.05(2)
+\def\ds@sigrecommended{\DS@sigrecommendedtrue}			% 2.04(1)
+\def\ds@invited{\DS@invitedtrue}				% 2.06(1)
+\def\ds@abstract{\DS@abstracttrue}				% 2.07(7)
+\def\ds@private{\DS@privatetrue}				% 2.07(8)
+\def\ds@anonymous{\DS@anonymoustrue}				% 2.10(1)
+\def\ds@TBIO{\DS@TBIOtrue \DS@englishtrue}			% 2.11(1)
+\def\ds@online{\DS@onlinetrue \DS@printertrue \DS@englishtrue}	% 2.12(4a)
+
+% 1.04(3)>>
+\def\@ptsize{0}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}} 
+% 1.04(3)<<
+
+\@options
+\let\ipsj@warning\@warning					% 2.00(3)
+\let\@latex@warning\@warning					% 2.00(3)
+\def\ipsj@error#1#2{\errhlp{#2}\errmessge{#1}}			% 2.00(3)
+\fi % \if@LaTeX@eN
+% 2.00(2) <<
+
+\ifx\@classoptionslist\undefined\else				% 2.03(1) >>
+\def\ipsj@draft@option{draft}
+\def\ipsj@remove@draft@option{\def\@tempb{}%
+	\@for\@tempa:=\@classoptionslist\do{%
+		\ifx\@tempa\ipsj@draft@option\else
+		\edef\@tempb{\@tempb,\@tempa}\fi}%
+	\ifx\@tempb\@empty \def\@classoptionslist{}\else
+	\expandafter\ipsj@remove@draft@ption\@tempb\@nil\fi}
+\def\ipsj@remove@draft@ption,#1\@nil{%
+	\def\@classoptionslist{#1}}
+\ipsj@remove@draft@option
+\fi % \ifx							% 2.03(1) <<
+
+\ifipsj@nonjp \DS@englishtrue \fi				% 2.12(1a)
+
+%%%%%% Basics %%%%%%
+
+\newdimen\@Q \@Q=0.25mm
+
+\lineskip\z@ \normallineskip\z@ 
+\lineskiplimit\z@ \normallineskiplimit\z@
+\abovedisplayskip\z@ \belowdisplayskip\z@
+\abovedisplayshortskip\z@ \belowdisplayshortskip\z@
+
+\def\baselinestretch{1}
+\jot\z@ 
+
+\ifDS@draft\def\next{\input{ipsjdrafts.sty}\endinput}\else\let\next\relax\fi
+\next
+
+\@twosidetrue
+
+%%%%%% Fonts %%%%%%
+% \finvedm(dg)		dm5		\vpt	\tiny		fn-mark
+% \sixdm(dg)		dm6		\vipt	\scriptsize
+% \sevendm(dg)		dm7		\vipt	\footnotesize	f-note, capt
+%	10Q = 7.11304pt -> w(min7) = 6.73550pt
+% \eightdm(dg)		dm8		\viiipt	\small		abst, header
+%	11Q = 7.82434pt -> w(min8) = 7.69772pt
+% \eightdm(dg)half	dm9		\ixpt	\normalsize	main text
+%	12Q = 8.53564pt -> w(min9) = 8.65994
+% \tendm(dg)		dm10		\xpt	\large		sec title
+%	13Q = 9.24695pt -> w(min10) = 9.62216pt
+% \tendm(dg)half	dm10*1095	\xipt	\Large		author names
+%	15Q =10.66956pt -> w(min10*1095) = 10.53625pt
+% (\twlvdm)		(dm12)		\xiipt	\LARGE		e-title
+% \twelvedm(dg)half	dm12*1095	\xivpt	\huge		title
+%			min10*1440
+%	18Q =12.80347pt -> w(min10*1440) = 13.8559pt
+%
+% Note that cm fonts follows LaTeX standard. (e.g. \viiipt -> cmr8, etc.)
+
+% 2.00(4)>>
+\if@LaTeX@e
+\ifASCII
+\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)>>
+	\edef\@tempa{\ifipsj@nonjp \the\font \else \the\jfont \fi}  % 2.12(1b)
+	\expandafter\global\expandafter\let\expandafter#1\@tempa}}  % 2.00(5)<<
+
+\iffalse	% ASCII LaTeX2e printer settings is removed	% 2.12(2a)
+\else		% ASCII LaTeX2e non-printer
+\ifipsj@nonjp							% 2.12(1b)>>
+\ipsj@declare@font\fn@fontv\rmfamily\@vpt
+\ipsj@declare@font\fn@fontvi\rmfamily\@vpt
+\ipsj@declare@font\fn@fontvii\rmfamily\@vpt
+% no declaration for \fn@fontxv					% 2.12(1b)<<
+\else % \ifipsj@nonjp
+\ipsj@declare@font\fn@fontv\mcfamily\@vpt
+\ipsj@declare@font\fn@fontvi\mcfamily\@vpt
+\ipsj@declare@font\fn@fontvii\mcfamily\@vpt
+\ipsj@declare@font\fn@fontxv\gtfamily\@xipt
+\fi\fi %\ifipsj@nonjp\iffalse
+
+\else % \ifASCII = NTT LaTeX2e
+\def\ipsj@declare@font#1#2#3{{\fontsize{#3}{\z@}#2\selectfont	    % 2.00(5)
+	\xdef#1{\expandafter\noexpand\csname\jf@ntn@me\endcsname}}} % 2.00(5)
+\ipsj@declare@font\fn@fontv\dm\@vpt
+\ipsj@declare@font\fn@fontvi\dm\@vpt
+\ipsj@declare@font\fn@fontvii\dm\@vpt
+\ipsj@declare@font\fn@fontxv\dg\@xipt
+\fi % \ifASCII
+% 2.00(4) <<
+
+\else % \if@LaTeX@e = LaTeX 2.09				% 2.00(4)
+%% Fonts for ASCII TeX. (H.N.)
+\ifASCII
+\iffalse	% ASCII LaTeX 2.09 printer settings is removed	% 2.12(2a)
+\else \ifipsj@nonjp\else					% 2.12(1b)
+\font\fivedm		min5
+\font\fivedg		goth5
+\font\sixdm		min6
+\font\sixdg		goth6
+\font\sevendm		min7
+\font\sevendg		goth7
+\font\eightdm		min8
+\font\eightdg		goth8
+\font\eightdmhalf	min9
+\font\eightdghalf	goth9
+\font\tendm		min10
+\font\tendg		goth10
+\font\tendmhalf		min10 scaled\magstephalf
+\font\tendghalf		goth10 scaled\magstephalf
+\font\twelvedm		min10 scaled\magstep1
+\font\twelvedg		goth10 scaled\magstep1
+\font\twelvedmhalf	min10 scaled\magstep2
+\font\twelvedghalf	goth10 scaled\magstep2
+\let\fn@fontv\fivedm
+\let\fn@fontvi\fivedm
+\let\fn@fontvii\fivedm
+\let\fn@fontxv\tendghalf
+
+\fi\fi % \ifipsj@nonjp\iffalse
+
+%% ASCII doesn't have \old@Npt. (H.N.)
+\let\old@@vpt\vpt
+\let\old@@vipt\vipt
+\let\old@@viipt\viipt
+\let\old@@viiipt\viiipt
+\let\old@@ixpt\ixpt
+\let\old@@xpt\xpt
+\let\old@@xipt\xipt
+\let\old@@xiipt\xiipt
+\let\old@@xivpt\xivpt
+
+\ifipsj@nonjp							% 2.12(1b)>>
+\def\old@vpt{\old@@vpt}
+\def\old@vipt{\old@@vipt}
+\def\old@viipt{\old@@viipt}
+\def\old@viiipt{\old@@viiipt}
+\def\old@ixpt{\old@@ixpt}
+\def\old@xpt{\old@@xpt}
+\def\old@xipt{\old@@xipt}
+\def\old@xiipt{\old@@xiipt}
+\def\old@xivpt{\old@@xivpt}					% 2.12(1b)<<
+\else % \ifipsj@nonjp
+\def\old@vpt{\old@@vpt\jspaceskip1zw\relax}
+\def\old@vipt{\old@@vipt\jspaceskip1zw\relax}
+\def\old@viipt{\old@@viipt\jspaceskip1zw\relax}
+\def\old@viiipt{\old@@viiipt\jspaceskip1zw\relax}
+\def\old@ixpt{\old@@ixpt\jspaceskip1zw\relax}
+\def\old@xpt{\old@@xpt\jspaceskip1zw\relax}
+\def\old@xipt{\old@@xipt\jspaceskip1zw\relax}
+\def\old@xiipt{\old@@xiipt\jspaceskip1zw\relax}
+\def\old@xivpt{\old@@xivpt\jspaceskip1zw\relax}
+\fi % \ifipsj@nonjp
+								% 2.00(6)
+								% 1.06(2)
+
+%% ASCII doesn't have \dg nor \dm. (H.N.)
+\ifipsj@nonjp\else						% 2.12(1b)
+\def\dg{\protect\pdg}
+\def\dm{\protect\pdm}
+%% Redefine \gt and \mc
+\def\gt{\protect\pdg}
+\def\mc{\protect\pdm}
+\let\pdm\relax
+\fi % \ifipsj@nonjp
+
+\else % \ifASCII
+%% Fonts for NTT jTeX
+%% \magstephalf and \magstep1 may cause trouble in older versions.
+
+\jfont\fivedm=dm5
+\jfont\fivedg=dg5
+\jfont\sixdm=dm6
+\jfont\sixdg=dg6
+\jfont\sevendm=dm7
+\jfont\sevendg=dg7
+\jfont\eightdm=dm8
+\jfont\eightdg=dg8
+\jfont\eightdmhalf=dm9
+\jfont\eightdghalf=dg9
+\jfont\tendm=dm10
+\jfont\tendg=dg10
+\jfont\tendmhalf=dm10 scaled 1095
+\jfont\tendghalf=dg10 scaled 1095
+\jfont\twelvedm=dm12
+\jfont\twelvedg=dg12
+\jfont\twelvedmhalf=dm12 scaled 1095
+\jfont\twelvedghalf=dg12 scaled 1095
+\let\fn@fontv\fivedm
+\let\fn@fontvi\fivedm
+\let\fn@fontvii\fivedm
+\let\fn@fontxv\tendghalf
+								% 1.06(3)
+\fi % \ifASCII
+\fi % \if@LaTeX@e
+
+\ifx\jfsize\undefined \newcount\jfsize \fi			% 1.06(2)
+
+\ifASCII						% 1.06(3),2.00(6)>>
+\ifipsj@nonjp\else						% 2.12(1b)
+\let\setjglues\relax
+\let\jintercharskip\kanjiskip
+\let\jasciikanjiskip\xkanjiskip
+\let\jmathkanjiskip\xkanjiskip
+\newdimen\jspaceskip
+
+\def\defjintercharskip#1#2#3#4{\@asciiwarning{\defjintercharskip}}
+\def\defjasciikanjiskip#1#2#3#4{\@asciiwarning{\defjasciicharskip}}
+\def\defmathkanjiskip#1#2#3#4{\@asciiwarning{\defmathcharskip}}
+\def\defjspaceskip#1#2#3#4{\@asciiwarning{\defjspaceskip}}
+							
+\def\@asciiwarning#1{\ipsj@warning{\string#1\space		% 2.00(3)
+	is not supported in ASCII version}}
+							% 1.06(3),2.00(6)<<
+\fi % \ifipsj@nonjp
+\else % \ifASCII						% 2.00(7)>>
+\if@LaTeX@e
+\ipsj@declare@font\fn@eightdmhalf\dm\@ixpt
+\ipsj@declare@font\fn@eightdghalf\dg\@ixpt
+\else
+\def\fn@eightdmhalf{\eightdmhalf}
+\def\fn@eightdghalf{\eightdghalf}
+\fi % \if@LaTeX@e
+\ifx\setjglues\undefined\else
+\expandafter\defjintercharskip\fn@eightdmhalf{0pt}{1.4pt}{0.5pt}
+\expandafter\defjintercharskip\fn@eightdghalf{0pt}{1.4pt}{0.5pt}
+\expandafter\defjasciikanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
+\expandafter\defjasciikanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
+\expandafter\defjmathkanjiskip\fn@eightdmhalf{2pt}{1pt}{1pt}
+\expandafter\defjmathkanjiskip\fn@eightdghalf{2pt}{1pt}{1pt}
+\fi % \if@LaTeX@e						% 2.00(7)<<
+\fi % \ifASCII							% 2.00(4)
+
+\if@LaTeX@e							% 2.00(8)>>
+\if@LaTeX@eN
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
+\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
+\ifASCII \ifipsj@nonjp\else					% 2.12(1b)
+\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\fi\fi\fi % \ifipsj@nonjp\ifASCII\if@LaTeX@eN
+
+\ifASCII \ifipsj@nonjp\else					% 2.12(1b)
+\def\dm{\mc}
+\def\dg{\gt}
+\fi\fi\fi % \ifipsj@nonjp\ifASCII\if@LaTeX@e			% 2.00(8)<<
+
+%%%%%% Basic Font Size Macros %%%%%%
+
+\if@LaTeX@e					% 1.06(4),2.00(9),2.04(3)>>
+\def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}\ipsj@setjspaceskip}
+\let\ipsj@setjspaceskip\relax			% 2.12(1b)>>
+\ifASCII \ifipsj@nonjp\else
+\def\ipsj@setjspaceskip{\jspaceskip1zw\relax}
+\fi\fi % \ifipsj@nonjp\ifASCII			% 2.12(1b)<<
+						% 1.06(4),2.00(9),2.04(3)<<
+
+%% \vipt etc. are redefined to use appropriate Japanese fonts.
+\else % \if@LaTeX@e						% 2.00(9)
+\ifipsj@nonjp\else						% 2.12(1b)
+\def\vpt{\old@vpt\fivedm\let\pdg\fivedg\let\pdm\fivedm\jfsize=5\relax}
+\def\vipt{\old@vipt\sixdm\let\pdg\sixdg\let\pdm\sixdm\jfsize=6\relax}
+\def\viipt{\old@viipt\sevendm\let\pdg\sevendg\let\pdm\sevendm\jfsize=7\relax}
+\def\viiipt{\old@viiipt\eightdm\let\pdg\eightdg\let\pdm\eightdm\jfsize=8\relax}
+\def\ixpt{\old@ixpt\eightdmhalf\let\pdg\eightdghalf\let\pdm\eightdmhalf
+	\jfsize=9\relax \@ixptboldmath}				% 1.02(2)
+\def\xpt{\old@xpt\tendm\let\pdg\tendg\let\pdm\tendm\jfsize=10\relax}
+\def\xipt{\old@xipt\tendmhalf\let\pdg\tendghalf\let\pdm\tendmhalf\jfsize=11
+	\relax}
+\def\xiipt{\old@xiipt\twelvedm\let\pdg\twelvedg\let\pdm\twelvedm
+	\jfsize=12\relax}
+\def\xivpt{\old@xivpt\twelvedmhalf\let\pdg\twelvedghalf\let\pdm\twelvedmhalf
+	\jfsize=14\relax}
+\fi\fi % \ifipsj@nonjp\if@LaTeX@e				% 2.00(9)
+
+\if@LaTeX@e							% 1.06(5)
+\let\@ixptboldmath\relax					% 1.06(5)
+\else								% 1.06(5)
+% 1.02(2) >>
+\iffalse	% printer setting removed			% 2.12(2a)
+\else
+\def\@ixptboldmath{%
+	\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+		\textfont\@ne\ninmi 
+		\textfont\tw@\ninsy \textfont\lyfam\ninly
+		\@boldfalse}\@boldfalse
+% 1.03(1) >>
+	\def\boldmath{\@ifundefined{ninmib}{\global\font\ninmib\@mbi 
+		\global\font\ninsyb\@mbsy\relax
+		\global\font\ninlyb\@lasyb\relax
+		\@addfontinfo\@ixpt
+			{\def\boldmath{\everymath{\mit}\everydisplay{\mit}%
+				\@prtct\@nomathbold
+				\textfont\@ne\ninmib \textfont\tw@\ninsyb 
+				\textfont\lyfam\ninlyb \@prtct\@boldtrue}}}{}%
+	\@ixpt\boldmath}}
+% 1.03(1) <<
+\fi % \iffalse
+% 1.02(2) <<
+\fi % \if@LaTeX@e						% 1.06(5)
+
+
+%%%%%% Font Size Macros %%%%%%
+
+\def\fs@setsize#1#2#3#4{\normalsize\dimen@\normalbaselineskip
+	\@ifstar{\@setsize{#1}{\dimen@}{#3}{#4}}%
+		{\@setsize{#1}{#2}{#3}{#4}}}
+
+% s = (3*b - (h' + d') - (h + d))/2
+% s_a = s + h' + d - b
+% s_b = s + h + d' - b
+\def\sec@setskips#1{\setbox0\hbox{\fs@sec\bf#1}\setbox1\hbox{#1}
+	\@tempdima3\baselineskip
+	\advance\@tempdima-\ht0 \advance\@tempdima-\dp0
+	\advance\@tempdima-\ht1 \advance\@tempdima-\dp1
+	\divide\@tempdima\tw@ \advance\@tempdima-\baselineskip
+	\@tempdimb\@tempdima
+	\advance\@tempdima\ht0 \advance\@tempdima\dp1
+	\advance\@tempdimb\ht1 \advance\@tempdimb\dp0
+	\edef\sec@aboveskip{\the\@tempdima}
+	\edef\sec@belowskip{\the\@tempdimb}}
+
+\ifDS@english
+% size		pt	\baselineskip	  size		\?pt	\baselineskip
+% \normalsize	10	16Q		  \large	11	18Q (*)
+% \small	 9	15Q		  \Large	12	22Q
+% \footnotesize	 8	13Q		  \LARGE	14	26Q (*)
+% \scriptsize	 6	8pt (*)		  \huge		18	30Q (*)
+% \tiny		 5	6pt (*)		  \Huge		18	30Q (*)
+% * : not measured
+
+\def\@normalsize{\@setsize\normalsize{16\@Q}\xpt\@xpt}
+\def\small{\fs@setsize\small{15\@Q}\ixpt\@ixpt}
+\def\footnotesize{\fs@setsize\footnotesize{13\@Q}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\Large{18\@Q}\xipt\@xipt}
+\def\Large{\@setsize\LARGE{22\@Q}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{26\@Q}\xivpt\@xivpt}
+\def\huge{\@setsize\Huge{30\@Q}\xviipt\@xviipt}
+\let\Huge\huge
+
+\ifDS@techrep							% 1.05(2)>>
+\def\@normalsize{\@setsize\normalsize{17\@Q}\xpt\@xpt}
+\fi								% 1.05(2)<<
+
+\if@LaTeX@e							% 2.00(10)>>
+\let\normalsize\@normalsize
+\fi								% 2.00(10)<<
+
+\let\fs@footnote\footnotesize
+\let\fs@caption\footnotesize
+\let\fs@table\footnotesize
+\let\fs@eabst\footnotesize
+\let\fs@header\footnotesize
+\let\fs@footer\footnotesize
+\let\fs@bibliography\small
+\let\fs@subsec\normalsize
+\let\fs@sec\normalsize
+\let\fs@type\large
+\let\fs@eauthor\large
+\let\fs@title\Large
+
+\@normalsize
+
+\sec@setskips{A}
+
+\else % \ifDS@english
+% size		pt	\baselineskip	  size		\?pt	\baselineskip
+% \normalsize	 9	19Q		  \large	10	19Q
+% \small	 8	14Q		  \Large	11	22Q
+% \footnotesize	 7	14Q		  \LARGE	12	18Q
+% \scriptsize	 6	8pt (*)		  \huge		14	26Q
+% \tiny		 5	6pt (*)		  \Huge		14	26Q
+% * : not measured
+
+\def\@normalsize{\@setsize\normalsize{19\@Q}\ixpt\@ixpt}
+\def\small{\fs@setsize\small{14\@Q}\viiipt\@viiipt}
+\def\footnotesize{\fs@setsize\footnotesize{14\@Q}\viipt\@viipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{19\@Q}\xpt\@xpt}
+\def\Large{\@setsize\Large{22\@Q}\xipt\@xipt}
+\def\LARGE{\@setsize\LARGE{18\@Q}\xiipt\@xiipt}
+\def\huge{\@setsize\Huge{26\@Q}\xivpt\@xivpt}
+\let\Huge\huge
+
+\ifDS@techrep							% 1.05(2)>>
+\def\@normalsize{\@setsize\normalsize{17\@Q}\ixpt\@ixpt}
+\fi								% 1.05(2)<<
+
+\if@LaTeX@e							% 2.00(10)>>
+\let\normalsize\@normalsize
+\fi								% 2.00(10)<<
+
+\let\fs@footnote\footnotesize
+\let\fs@caption\footnotesize
+\let\fs@table\footnotesize
+\let\fs@abst\small
+\def\fs@eabst{\small\baselineskip13\@Q}
+\let\fs@header\small
+\let\fs@footer\small
+\let\fs@subsec\normalsize
+\def\fs@bibliography{\normalsize\baselineskip16\@Q}
+\let\fs@sec\large
+\let\fs@type\fn@fontxv
+\let\fs@author\Large
+\def\fs@eauthor{\Large\baselineskip20\@Q}			% 2.12(7)
+\let\fs@etitle\LARGE
+\let\fs@title\huge
+
+\@normalsize 
+								% 2.00(7)
+\ifx\setjglues\undefined\else
+\setjglues
+\fi
+
+% \sec@setskips{<A of hiragana>} is moved to ipsjcommon		% 2.12(1c)
+\fi % \ifDS@englisth
+
+\if@LaTeX@e\else \ifipsj@nonjp\else			% 2.00(11),2.12(1b)
+\let\latex@bf\bf						% 1.06(6)
+\def\bf{\latex@bf \dg}						% 1.06(6)
+\fi\fi								% 2.00(11)
+
+
+%%%%%% Page Layout Parameters %%%%%%
+
+\newdimen\@mojihaba
+\ifipsj@nonjp \let\jspaceskip\@mojihaba	\fi			% 2.12(1b)
+
+\ifDS@printer							% 2.12(2b) >>
+\voffset=-20mm
+\hoffset=-14mm
+\fi								% 2.12(2b) <<
+
+\headheight 12\@Q
+
+% We want to allow a line containing $\displaystyle X^X$ to be a first line.
+\setbox0\hbox{$\displaystyle X^X$}
+\topskip\ht0
+
+\ifdim\maxdepth<\dp\strutbox \maxdepth\dp\strutbox \@maxdepth\maxdepth\fi
+
+\@tempswafalse							% 1.05(2)>>
+\ifDS@english \ifDS@techrep \else \@tempswatrue \fi\fi
+\if@tempswa							% 1.05(2)<<
+\topmargin 138\@Q \advance\topmargin-1in
+
+% \textheight = 53\baselineskip + \topskip + epsilon(100sp)
+\textheight53\baselineskip \advance\textheight\topskip \advance\textheight100sp
+
+% \headsep = 24Q - \topskip
+\headsep28\@Q \advance\headsep-\topskip				% 2.02(2)
+
+% Only first page has page number (footer) at the bottom
+\footskip 27\@Q
+
+\@mojihaba13\@Q
+
+\else % \if@tempswa
+\topmargin 131\@Q \advance\topmargin-1in
+
+% \textheight = 45\baselineskip + \topskip + epsilon(100sp)
+\textheight45\baselineskip \advance\textheight\topskip \advance\textheight100sp
+
+\ifDS@techrep							% 1.05(2)>>
+\textheight50\baselineskip \advance\textheight\topskip \advance\textheight100sp
+\fi % \ifDS@techrep						% 1.05(2)<<
+
+% \headsep = 28Q - \topskip
+\headsep28\@Q \advance\headsep-\topskip
+
+% Only first page has page number (footer) at the bottom
+\footskip24\@Q
+
+\@mojihaba12\@Q
+\fi % \if@tempswa
+
+\columnsep30\@Q
+
+% \textwidth - \columnwidth = 24 * 12Q * 2 + \columnsep = 606Q
+\textwidth606\@Q
+\columnseprule0pt
+
+\oddsidemargin210mm \advance\oddsidemargin-\textwidth \divide\oddsidemargin\tw@
+\advance\oddsidemargin-1in \evensidemargin\oddsidemargin
+
+\skip\footins\baselineskip \advance\skip\footins-.5\@mojihaba
+% \footnotesep = \baselineskip - depth(\strutbox)
+{\fs@footnote
+	\footnotesep\baselineskip
+	\global\advance\footnotesep-\dp\strutbox}
+
+\def\footnoterule{{\fs@footnote\kern-\dp\strutbox \hrule \kern-.4\p@
+	\kern\dp\strutbox}}
+
+\floatsep \baselineskip \textfloatsep \baselineskip 
+\intextsep \baselineskip \@maxsep \baselineskip
+\dblfloatsep \baselineskip \dbltextfloatsep \baselineskip
+\@dblmaxsep \baselineskip
+\@fptop 0pt plus 1fil \@fpsep 0pt plus 2fil \@fpbot 0pt plus 1fil 
+\@dblfptop 0pt plus 1fil \@dblfpsep 0pt plus 2fil \@dblfpbot 0pt plus 1fil
+
+\parskip\z@ \parindent\@mojihaba
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty 
+
+
+%%%%%% Title and Authors %%%%%%
+%
+% Format of title, author names and abstract.
+%
+%	\huge\bf <Japanese title>
+%	\vskip 32Q
+%	\Large <Japanese author names>
+%	\vskip 32Q
+%	\small <Japanese abstract>
+%	\vskip 34Q
+%	\LARGE\bf <English title>
+%	\vskip 28Q
+%	\Large\sc <English author names>
+%	\vskip 28Q
+%	\small <English abstract>
+%	\vskip 25Q
+
+% 2.07(3)>>
+\def\ipsj@ohcheck#1#2#3{\fs@header\hskip12\@Q#1\qquad#2\qquad#3\hskip12\@Q}
+\def\ipsj@ohcvolno{Vol.~00\hskip12\@Q No.~SIG\ 00(\ipsj@sig@code\ 00)}
+
+\newif\ifipsj@trans \ipsj@transfalse				% 2.12(4f)
+\def\maketitle{\let\ipsj@oddhead@t\ipsj@oddhead@a
+	\ifipsj@trans
+	    \settowidth\@tempdima{%
+		\ipsj@ohcheck\ipsj@ohcvolno\@titlestring\ipsj@ohcvolno}%
+	    \ifdim\@tempdima>\textwidth
+		\let\ipsj@oddhead@t\ipsj@oddhead@b
+		\settowidth\@tempdima{%
+		    \ipsj@ohcheck\ipsj@ohcvolno\@titlestring{000}}%
+		\ifdim\@tempdima>\textwidth
+			\ipsj@warning{%				% 2.00(3)
+			\string\title\space for headding is too wide}%
+	    \fi \fi
+	\else
+	    \settowidth\@tempdima{\fs@header
+		\hskip12\@Q Vol.~00\hskip12\@Q No.~00\qquad\@titlestring\qquad
+		Vol.~00\hskip12\@Q No.~00\hskip12\@Q}
+	    \ifdim\@tempdima>\textwidth
+		\ipsj@warning{%					% 2.00(3)
+		\string\title\space for headding is too wide}%
+	\fi \fi
+	\par\twocolumn[\@maketitle]\thispagestyle{myheadings}\@thanks}
+% 2.07(3)<<
+
+% default title header
+
+\def\title{\@dblarg{\@xtitle}}
+\def\@xtitle[#1]#2{\gdef\@title{#2}%
+	{\def\protect{\noexpand\protect\noexpand}%
+		\ifDS@english\def\\{\unskip\ \ignorespaces}%
+		\else\def\\{\unskip\ignorespaces}\fi
+		\xdef\@titlestring{#1}}}			% 2.07(3)
+
+\def\@title{\mkt@warning\title}\def\@titlestring{}
+\long\def\author#1{\long\gdef\@author{#1}}
+\def\@author{\mkt@warning\author}
+
+\newbox\@abstractbox
+%% Introduce \@titlewidth because we now use this dimen repeatedly. (H.N.)
+%% \@titlewidth = 44 * 11Q = 484Q
+\newdimen\@titlewidth \@titlewidth 484\@Q
+
+\def\abstract{\global\let\@abstract\relax
+	\global\setbox\@abstractbox\hbox\bgroup
+		\begin{minipage}[b]{\@titlewidth}\fs@abst\parindent11\@Q}
+\def\endabstract{\end{minipage}\egroup}
+\def\@abstract{\mkt@warning{abstract env}}
+
+%% We need English title, author name(s) and abstract. (H.N.)
+\def\etitle#1{\gdef\@etitle{#1}}
+\def\@etitle{\mkt@warning\etitle}
+\long\def\eauthor#1{\long\gdef\@eauthor{#1}}
+\def\@eauthor{\mkt@warning\eauthor}
+
+\newbox\@eabstractbox
+\def\eabstract{\global\let\@eabstract\relax
+	\global\setbox\@eabstractbox\hbox\bgroup
+		\begin{minipage}[b]{\@titlewidth}\fs@eabst\parindent11\@Q}
+\let\endeabstract\endabstract
+\def\@eabstract{\mkt@warning{eabstract env}}
+
+\ifDS@english
+\let\author\eauthor \let\abstract\eabstract
+\let\@eauthor\@author \let\@eabstract\@abstract
+\fi
+
+\def\mkt@warning#1{\ipsj@warning{Missing \string#1}}		% 2.00(3)
+
+\newdimen\mkt@prevdepth
+\newbox\mkt@titlebox
+\def\@maketitle{\setbox\mkt@titlebox\vbox{
+	\ifDS@english \ifDS@preface
+		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
+	\else
+		\hbox{}\vskip26\@Q \vskip-\headsep \vskip-\baselineskip
+		\leftline{\fs@type\it
+		  	\ifDS@TBIO \ipsj@TBIO@pcatref		% 2.11(2)
+			\else\ifDS@technote Technical Note
+                        \else\ifDS@invited Invited Paper        % 2.06(1)
+			\else\ifDS@sigrecommended		% 2.04(1)
+				Recommended Paper		% 2.04(1)
+			\else\ifDS@abstract			% 2.07(7)
+				Abstract			% 2.07(7)
+			\else\ifDS@techrep\else			% 2.02(1)
+				Regular Paper\fi\fi\fi\fi\fi\fi}% 2.06(1)
+%								% 2.04(1)
+		\vskip32\@Q \vskip-\baselineskip \fi
+	\else							% 2.04(1) >>
+	\@tempswafalse	\ifDS@technote\@tempswatrue\fi
+			\ifDS@sigrecommended\@tempswatrue\fi
+                        \ifDS@invited\@tempswatrue\fi           % 2.06(1)
+			\ifDS@abstract\@tempswatrue\fi		% 2.07(7)
+	\if@tempswa
+		\vskip18\@Q \vskip-\headsep
+		\leftline{\vbox to28\@Q{\hrule height.8pt\vss
+			\hbox{\hskip7\@Q \fs@type
+				\ifDS@technote \ipsj@j@technote	% 2.12(1c)>>
+                                \else\ifDS@invited
+					\ipsj@j@invited		% 2.06(1)
+				\else\ifDS@sigrecommended
+					\ipsj@j@sigrec		% 2.06(1)
+				\else \ipsj@j@talkabst		% 2.07(7)
+				\fi\fi\fi			% 2.12(1c)<<
+				\hskip7\@Q}\vss\hrule height.8pt}}
+%								% 2.04(1) <<
+		\vskip40\@Q \vskip-\baselineskip
+	\else
+		\hbox{}\vskip60\@Q \vskip-\headsep \vskip-\baselineskip
+	\fi\fi
+	\@tempswafalse \ifDS@english\else\ifDS@preface\@tempswatrue\fi\fi
+	\mkt@maketitle{\fs@title\bf}\@title\title
+	\affi@labels
+	\ifDS@english\else
+	\vskip-\mkt@prevdepth \nointerlineskip\vskip32\@Q
+	\centerline{\vbox{\centering\hsize\@titlewidth\fs@author
+		\mkt@makeauthor}}
+	\ifDS@preface\else
+	\vskip-\prevdepth \nointerlineskip\vskip32\@Q
+	\centerline{\@abstract\box\@abstractbox}
+	\vskip-\prevdepth \nointerlineskip\vskip34\@Q
+	\mkt@maketitle{\fs@etitle\bf}\@etitle\etitle
+	\fi\fi
+	\if@tempswa\else
+	\vskip-\mkt@prevdepth \nointerlineskip\vskip28\@Q
+	\centerline{\vbox{\centering\hsize\@titlewidth\fs@eauthor\sc
+		\mkt@makeeauthor}}
+	\fi
+	\ifDS@preface\else
+	\vskip-\prevdepth \nointerlineskip\vskip28\@Q
+	\centerline{\@eabstract\box\@eabstractbox}
+	\fi
+	\vskip-\prevdepth \nointerlineskip\vskip25\@Q}
+	\@tempdimb\ht\mkt@titlebox \advance\@tempdimb\dp\mkt@titlebox
+	\@tempcnta\@tempdimb \@tempcntb\baselineskip
+	\divide\@tempcnta\@tempcntb \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\box\mkt@titlebox
+	\ifdim\@tempdima=\z@\else\advance\@tempdima\baselineskip
+		\vskip\@tempdima\fi}
+
+%% \mkt@maketitle puts Japanese/English title, whose lines should be
+%% properly broken with \\ by the user.  The result is flushed to left, then
+%% centered with respect to the longest line. (H.N.)
+\def\mkt@maketitle#1#2#3{\setbox\@tempboxa\vtop{
+	\def\\{\unskip\egroup\hbox\bgroup\ignorespaces}
+		#1\hbox\bgroup#2\unskip\egroup
+		\global\mkt@prevdepth\prevdepth}
+	\@tempdima\textwidth\advance\@tempdima-4\@mojihaba
+	\ifdim\wd\@tempboxa>\@tempdima
+		\ipsj@warning{%					% 2.00(3)
+			\string#3 is too wide. Break line(s) by \string\\}\fi
+	\centerline{\box\@tempboxa}}
+
+% Assignment of Japanese author names to lines:
+% 1 -> 1, 2 -> 2, 3 -> 3, 4 -> 2+2, 5 -> 3+2, 6 -> 3+3, 7 -> 3+2+2, 8 -> 3+3+2,
+% ...
+% Rule for N authors (N > 2, q := N div 3)
+%	N mod 3 = 0 -> 3 * q
+%	N mod 3 = 1 -> 3 * (q - 2) + 2 + 2
+%	N mod 3 = 2 -> 3 * (q - 1) + 2
+
+\newcount\mkt@cnta\newcount\mkt@cntb
+\newcount\mkt@sname\newcount\mkt@gname
+\newbox\mkt@boxa
+\newdimen\mkt@namewidth
+\def\mkt@makeauthor{\let\member\@gobble \let\nomember\relax
+	\let\stmember\@gobble	% Those are not necessary in final manuscript.
+	\def\@makefnmark{\smash{\rlap{$^{\affi@thefnmark}$}}}%	% 2.12(7)
+	\gdef\affi@thefnmark{}\leavevmode\let\+\ignorespaces
+	\settowidth\@tempdima{\ifipsj@nonjp x\else\ipsj@j@a \fi}% 2.12(1c)
+	\mkt@namewidth7\@tempdima\@tempcnta\z@
+	\expandafter\mkt@countauthor\@author\and\@nil\and
+	\ifnum\@tempcnta=\@ne\let\mkt@anhbox\mkt@anhboxc\mkt@makesingleauthor
+	\else
+		\@tempcntb\@tempcnta \divide\@tempcntb\thr@@
+		\multiply\@tempcntb\thr@@ \advance\@tempcntb-\@tempcnta
+		\ifnum\@tempcntb=\m@ne\relax\@tempcntb\tw@\else\@tempcntb\z@\fi
+		\mkt@cnta\thr@@
+		\let\mkt@anhbox\mkt@anhboxl
+		\expandafter\mkt@makemultiauthor\@author\and\and\fi}
+\def\mkt@countauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil\let\next\relax
+	\else\advance\@tempcnta\@ne \let\next\mkt@countauthor\fi\next}
+
+% If single author, author name has 9 KC width instead of 7.
+\def\mkt@makesingleauthor{\divide\mkt@namewidth7\multiply\mkt@namewidth9\relax
+	\expandafter\mkt@putauthor\@author\+ \@nil}
+
+\def\mkt@makemultiauthor#1\and{\ifnum\@tempcnta=\z@\unskip\let\next\relax\else
+	\leavevmode
+	\advance\mkt@cnta\m@ne \advance\@tempcnta\m@ne
+	\ifnum\mkt@cnta=\z@\mkt@maleft{#1}\mkt@cnta\thr@@\else
+	\ifnum\@tempcnta=\@tempcntb\mkt@maleft{#1}\mkt@cnta\tw@\else
+	\mkt@putauthor#1\+ \@nil\let\mkt@anhbox\mkt@anhboxc\fi\fi
+	\let\next\mkt@makemultiauthor\fi\next}
+\def\mkt@maleft#1{\let\mkt@anhbox\mkt@anhboxr\mkt@putauthor#1\+ \@nil
+	\par\let\mkt@anhbox\mkt@anhboxl}
+
+% Japanese author name format:
+%	Non Japanese : As is.
+%	Japanese w/o s/g delimitor : As is with warning.
+%	Japanese (s+g>6) : As is.
+%	Japanese (s+g<7) : Give 1-KC space to s/g delimitor, then insert
+%		infinit stretch between each character pair, assuming the
+%		s/g delimitor as a charcter, to make the name have 7-KC
+%		width.   An exception is 2s + 2g case, in which s/g
+%		delimitor has 0 width in order to have the result
+%		"S_S_G_G".
+
+\def\mkt@putauthor#1 #2\@nil{%
+	\ifipsj@nonjp \mkt@anhbox{#1 #2}\else
+	\setbox\@tempboxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
+		\jintercharskip\z@#1#2}%
+	\setbox\mkt@boxa\hbox{\let\affiref\@gobble \let\mkt@warning\@gobble
+		\jintercharskip1cm#1#2}%
+	\ifdim\wd\@tempboxa=\wd\mkt@boxa \mkt@anhbox{#1 #2}\else
+						% probably no Kanjis
+	\def\@tempa{#2}\ifx\@tempa\empty	% without space btwn s/g-name
+		{\let\affiref\@gobble \def\+{}%
+			\ipsj@warning{Author name #1 doesn't have a space}}%
+								% 2.00(3)
+		\mkt@anhbox{#1}\else
+	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
+	\mkt@cntb\mkt@sname \advance\mkt@cntb\mkt@gname
+	\ifnum\mkt@cntb>6\relax\mkt@anhbox{#1\ #2}\else
+	\jintercharskip\fill%
+	\@tempskipa\@tempdima plus2fill\relax
+	\ifnum\mkt@sname=\tw@ \ifnum\mkt@gname=\tw@ \@tempskipa\fill\fi\fi
+	\hbox to\mkt@namewidth{#1\hskip-\lastskip
+		\hskip\@tempskipa#2\hskip-\lastskip\@makefnmark}\fi\fi\fi
+	\fi
+	\gdef\affi@thefnmark{}\hskip\columnsep}
+
+% When an author name is formatted "as is", the following macros are used
+% according to their position (left, right, or center).
+\def\mkt@anhboxl#1{\hbox to\mkt@namewidth{\hss#1\@makefnmark}}
+\def\mkt@anhboxr#1{\hbox to\mkt@namewidth{#1\@makefnmark\hss}}
+\def\mkt@anhboxc#1{\setbox\@tempboxa\hbox{#1\@makefnmark}%
+	\ifdim\wd\@tempboxa>\mkt@namewidth\box\@tempboxa
+	\else\hbox to\mkt@namewidth{\hss\box\@tempboxa\hss}\fi}	% 2.08(1)
+
+\def\mkt@getnamewidth#1#2{\setbox\@tempboxa\hbox{\let\affiref\@gobble#2}%
+	\@tempdimb\wd\@tempboxa
+	\advance\@tempdimb.5\@tempdima #1\@tempdimb \mkt@cntb\@tempdima
+	\divide#1\mkt@cntb}
+
+% English author name format
+%	1 -> <name-1>^*
+%	2 -> <name-1>^* and~<name-2>^*
+%	3 or more -> <name-1>,^* <name-2>,^* ... <name-n-1>^* and~<name-n>^*
+% (be careful the position of comma).
+%
+% No special tricks for assignment names to line.  Names are simply put in a
+% \centering paragraph.
+
+\def\mkt@makeeauthor{\let\member\@gobble \let\nomember\relax
+	\let\stmember\@gobble	% Those are not necessary in final manuscript.
+	\leavevmode\let\mkt@and\relax\gdef\affi@thefnmark{}%
+	\def\@thefnmark{\affi@thefnmark}%
+	\expandafter\mkt@imakeeauthor\@eauthor\and\@nil\and}
+\def\mkt@imakeeauthor#1\and#2\and{\def\@tempa{#2}\ifx\@tempa\@nnil
+		#1\@makefnmark\let\next\relax
+	\else
+		\def\@tempb{#1}\def\next{\mkt@iimakeeauthor#2\and}%
+	\fi\next}
+\def\mkt@iimakeeauthor#1\and{\def\@tempa{#1}\ifx\@tempa\@nnil
+		\@makefnmark\ {\rm{and}~}\gdef\affi@thefnmark{}\hbox{\@tempb}%
+		\@makefnmark\let\next\relax
+	\else
+		\mkt@and\hbox{\@tempb}\let\mkt@and\mkt@andmid
+		\let\next\mkt@iimakeeauthor
+	\fi\def\@tempb{#1}\next}
+\def\mkt@andmid{,\@makefnmark\ \gdef\affi@thefnmark{}}
+
+% Macros to specify author's affiliation easily.
+% 2.12(7)>>
+\newcounter{affi@footnote} \c@affi@footnote\z@
+\newcounter{affi@pfootnote} \c@affi@pfootnote\z@
+\def\affilabel{\affi@deflabels\affi@affilabel}
+\def\paffilabel{\affi@deflabels\affi@paffilabel}
+\def\affi@deflabels#1#2#3{{\def\protect{\noexpand\protect\noexpand}%
+	\let\affi@affilabel\relax \let\affi@paffilabel\relax \let\\\relax
+	\xdef\affi@labels{\affi@labels#1{#2}{#3}}}}
+\def\affi@labels{}
+\def\affi@affilabel{\begingroup \affi@label{affi@footnote}\@makefnmarkdagger}
+\def\affi@paffilabel#1#2{\begingroup
+	\def\protect{\noexpand\protect\noexpand}%
+	\def\\{\noexpand\\Presently with \ignorespaces}%
+	\edef\@tempa{\ifDS@english Presently with \else		% 1.04(1d)
+		\ipsj@j@presently\fi#2}%			% 2.12(1c)
+	\affi@label{affi@pfootnote}\@makefnmarkast{#1}\@tempa}
+\def\affi@label#1#2#3#4{\stepcounter{#1}%
+	\@ifundefined{affi@r@#3}%
+		{\expandafter\xdef\csname affi@r@#3\endcsname{%
+			\csname the#1\endcsname}}%
+		{\ipsj@warning{Affiliation label `#3' multiply defined}}%
+								% 2.00(3)
+	\let\affi@footnotetext\relax\let\\\relax
+	\def\protect{\noexpand\protect\noexpand}%
+	\xdef\@thanks{\@thanks
+		\affi@footnotetext
+			{\csname the#1\endcsname}{\protect#2}{#4}}\endgroup}
+
+\def\affiref#1{\@ifundefined{affi@r@#1}%
+		{\ipsj@warning{Affiliation reference `#1' undefined}% 2.00(3)
+			\def\@tempa{?}}%
+		{\def\@tempa{\csname affi@r@#1\endcsname}}%
+	{\def\protect{\noexpand\protect\noexpand}%
+	\ifx\affi@thefnmark\empty \xdef\affi@thefnmark{\@tempa}\else
+	\xdef\affi@thefnmark{\affi@thefnmark,\hskip\z@\@tempa}\fi}}
+\def\affi@footnotetext#1#2#3{{\def\@thefnmark{#1}%
+	\def\@makefnmarkforfn{#2}\@footnotetext{#3}}}
+
+\def\theaffi@footnote{{\dagger}\number\c@affi@footnote}
+\def\theaffi@pfootnote{{\ast}\number\c@affi@pfootnote}
+
+\def\thanks#1{\begingroup
+	\stepcounter{affi@pfootnote}\let\thempfn\theaffi@pfootnote
+	\let\@thefnmark\thempfn \@makefnmark
+	\let\affi@footnotetext\relax\let\\\relax
+	\def\protect{\noexpand\protect\noexpand}%
+	\xdef\@thanks{\@thanks
+		\affi@footnotetext{\thempfn}{\protect\@makefnmarkast}{#1}}%
+	\endgroup}
+% 2.12(7)<<
+
+% \contact is necessary only for drafts.
+\long\def\contact#1{}
+
+
+%%%%%% Page Header and Footer %%%%%% 
+
+\mark{{}{}} 
+
+\newcounter{volpageoffset} % You must set this to appropriate value
+\setcounter{volpageoffset}{1} % for each issue!
+\ifDS@printer							% 2.12(4d)>>
+\def\LastPageNumber{\gdef\ipsj@last@page}
+\fi								% 2.12(4d)<<
+
+% 2.00(16)>>
+\let\latex@document\document
+\def\document{\latex@document
+	\ifDS@private\else
+	\ifDS@online \global\c@page\ipsj@olh@page		% 2.12(4)
+	\else \global\c@page\c@volpageoffset \fi \fi}		% 2.07(8)
+\let\c@volpage\c@page		% for backward compatibility
+\def\thevolpage{\thepage}	% for backward compatibility
+% 2.00(16)<<
+
+\newcounter{volume}						% 2.12(1c)>>
+\newcounter{number}
+\let\c@month\c@number						% 2.07(4)
+\newcounter{year}						% 2.12(1c)<<
+
+\ifDS@printer							% 2.12(4b)>>
+\def\SetOnlineHeaderInfo#1#2#3#4{%	% <vol><year><month><page>[<lastpage>]
+	\def\ipsj@olh@vol{#1}%
+	\def\ipsj@olh@year{#2}%
+	\def\ipsj@olh@month{#3}%
+	\def\ipsj@olh@page{#4}%
+	\@ifnextchar[%]
+		\ipsj@olh@setlastpage\relax}
+\def\ipsj@olh@setlastpage[#1]{\def\ipsj@olh@lastpage{#1}}
+\fi								% 2.12(4b)<<
+
+% 2.07(4)>>
+\ifDS@online							% 2.12(4b)
+\def\@thevolno{Vol.~\ipsj@olh@vol}				% 2.12(4b)
+\else
+\def\@thevolno{Vol.~\arabic{volume}\hskip\@mojihaba No.~%	% 2.12(1c)>>
+	\ifipsj@trans SIG\ \ipsj@sig@numa(\ipsj@sig@code\ \ipsj@sig@numb)%
+	\else \arabic{number}\fi}				% 2.12(1c)<<
+\fi
+% 2.07(4)<<
+% 2.00(15)>>
+% 2.12(1c)(4b)>>
+\def\@monthyear{%
+	\ifDS@online \ipsj@monthyear\ipsj@olh@month\ipsj@olh@year
+	\else \c@year1959 \advance\c@year\c@volume
+		\ipsj@monthyear\c@number\c@year \fi}
+\def\ipsj@monthyear#1#2{\ifcase#1\or Jan.\or Feb.\or Mar.\or Apr.\or May\or
+		June\or July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\else\fi
+	\hskip.5\@mojihaba \number#2}
+% 2.12(1c)(4b)<<
+% 2.00(15)<<
+
+% 2.07(2)>>
+\def\transaction#1#2#3{\ipsj@transtrue
+	\def\ipsj@sig@code{#1}\def\ipsj@sig@numa{#2}\def\ipsj@sig@numb{#3}%
+	\expandafter\let\expandafter\ipsj@sig@title
+		\csname ipsj@sig@#1@\ifDS@english e\else j\fi\endcsname
+	\ifx\ipsj@sig@title\relax
+		\ipsj@warning{Transaction code #1 is unknown}\fi
+	\let\ipsj@oddhead@s\ipsj@oddhead@a
+	\ifDS@online\else					% 2.12(4c)
+	\settowidth\@tempdima{%
+	    \ipsj@ohcheck\ipsj@ohcvolno\hdr@tipsj\ipsj@ohcvolno}%
+	\ifdim\@tempdima>\textwidth
+	    \let\ipsj@oddhead@s\ipsj@oddhead@b
+	    \settowidth\@tempdima{\c@month3\relax	% "Mar." is longest
+		\ipsj@ohcheck\ipsj@ohcvolno\hdr@tipsj\@monthyear}%
+	    \ifdim\@tempdima>\textwidth
+		\let\ipsj@oddhead@s\ipsj@oddhead@c
+	\fi \fi \fi}
+
+\def\ipsj@sig@PRO@e{Programming}
+\def\ipsj@sig@TOM@e{Mathematical Modeling and Its Applications}
+\def\ipsj@sig@TOD@e{Databases}
+\def\ipsj@sig@HPS@e{High Performance Computing Systems}
+\def\ipsj@sig@CVIM@e{Computer Vision and Image Media}
+\def\ipsj@sig@ACS@e{Advanced Computing Systems}			% 2.09(2)
+\def\ipsj@sig@TBIO@e{Bioinformatics}				% 2.11(3)
+\def\ipsj@sig@SLDM@e{System LSI Design Methodology}		% 2.12(8)
+% 2.07(2)<<
+
+\def\copyrightnotice{\long\def\ipsj@cnotice}
+
+% 1.05(2)>>
+\ifDS@techrep
+\def\ps@headings{\let\@mkboth\markboth
+	\def\@oddhead{\@checklines\hss}\let\@evenhead\@oddhead
+	\def\@oddfoot{}\def\@evenfoot{}}
+\let\ps@myheadings\ps@headings
+
+\else\ifDS@private						% 2.07(8)>>
+\def\ps@headings{\let\@mkboth\markboth
+	\def\@oddhead{\@checklines\hfil\thepage\hskip12\@Q}%
+	\def\@evenhead{\@checklines\hskip12\@Q\thepage\hfil}
+	\def\@oddfoot{}\def\@evenfoot{}}
+\def\ps@myheadings{\ps@headings
+	\def\@oddhead{\@checklines
+		\smash{\parbox[b]{.75\textwidth}{\@nameuse{ipsj@cnotice}}}%
+		\hfil\thepage\hskip12\@Q}%
+	\let\@evenhead\@oddhead}
+								% 2.07(8)<<
+\else
+% 1.05(2)<<
+\def\ps@headings{\let\@mkboth\markboth
+	\def\@oddfoot{}
+	\def\@evenfoot{}
+	\def\@evenhead{\fs@header \@checklines
+		\hskip12\@Q\rlap{\thepage}\hss			% 2.07(3)
+		\hdr@tipsj\hss\llap{\@monthyear}\hskip12\@Q}
+	\def\@oddhead{\fs@header \@checklines
+		\ipsj@oddhead@t\@titlestring\thepage}		% 2.07(3)
+	\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+	\def\@oddhead{\fs@header \@checklines
+		\ipsj@oddhead@s\hdr@tipsj\@monthyear}		% 2.07(3)
+	\def\@oddfoot{\fs@footer\hfil\thepage\hfil}
+	\let\@evenhead\@oddhead
+	\let\@evenfoot\@oddfoot
+	\def\sectionmark##1{}\def\subsectionmark##1{}}
+\fi\fi								% 1.05(2)
+								% 2.07(8)
+
+% 2.12(9)>>
+\def\ipsj@lc@Rtop{\rlap{\smash{\rule[-\headsep]{0.05mm}{10mm}%
+	\rule[-\headsep]{10mm}{0.05mm}}}}
+\def\ipsj@lc@Ltop{\llap{\smash{\rule[-\headsep]{10mm}{0.05mm}%
+	\rule[-\headsep]{0.05mm}{10mm}}}}
+\def\ipsj@lc@Lbot{\llap{\smash{\raisebox{-\textheight}{%
+	\raisebox{-\headsep}{\rule{10mm}{0.05mm}\rule[-10mm]{0.05mm}{10mm}}}}}}
+\def\ipsj@lc@Rbot{\rlap{\smash{\raisebox{-\textheight}{%
+	\raisebox{-\headsep}{\rule[-10mm]{0.05mm}{10mm}\rule{10mm}{0.05mm}}}}}}
+
+\def\ps@layoutcheck{\ps@headings
+	\let\ipsj@lc@evenhead\@evenhead
+	\def\@evenhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
+		\ipsj@lc@evenhead
+		\ipsj@lc@Rtop \ipsj@lc@Rbot}%
+	\let\ipsj@lc@oddhead\@oddhead
+	\def\@oddhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
+		\ipsj@lc@oddhead
+		\ipsj@lc@Rtop \ipsj@lc@Rbot}%
+	\let\ipsj@lc@myheadings\ps@myheadings
+	\def\ps@myheadings{\ipsj@lc@myheadings
+		\let\ipsj@lc@fpoddhead\@oddhead
+		\def\@oddhead{\ipsj@lc@Lbot \ipsj@lc@Ltop
+			\ipsj@lc@fpoddhead
+			\ipsj@lc@Rtop \ipsj@lc@Rbot}%
+		\let\@evenhead\@oddhead}}
+% 2.12(9)<<
+
+% 2.07(3)>>
+\def\ipsj@oddhead@a#1#2{\hskip12\@Q \rlap{\@thevolno}\hss#1\hss
+	\llap{#2}\hskip12\@Q}
+\def\ipsj@oddhead@b#1#2{\hskip12\@Q \@thevolno\qquad#1\hss
+	\llap{#2}\hskip12\@Q}
+\def\ipsj@oddhead@c#1#2{\hskip12\@Q \@thevolno\hss#1\hss#2\hskip12\@Q}
+\let\ipsj@oddhead@t\ipsj@oddhead@a
+\let\ipsj@oddhead@s\ipsj@oddhead@a
+% 2.07(3)<<
+
+\def\ipsj@online@trans{IPSJ Digital Courier}			% 2.12(4c)
+\def\ipsj@online@journal{IPSJ Digital Courier}			% 2.12(4c)
+% 2.02(2),2.07(4)>>
+\ifDS@english
+\def\hdr@tipsj{\smash{%
+	\ifDS@online						% 2.12(4c)>>
+		\ifipsj@trans
+			\ipsj@online@trans
+		\else
+			\ipsj@online@journal\fi			% 2.12(4c)<<
+	\else
+		\ifipsj@trans
+			IPSJ Transactions on \ipsj@sig@title
+		\else
+			IPSJ Journal\fi
+	\fi}}
+\else
+\def\hdr@tipsj{\smash{\ipsj@j@jipsj				% 2.12(1c)>>
+	\ifipsj@trans \ipsj@j@colon \ipsj@sig@title \fi}}	% 2.12(1c)<<
+\fi
+% 2.02(2),2.07(4)<<
+
+% \checklines enables to draw a horizontal rule onto each baselines.
+
+\newif\if@checklines \@checklinesfalse
+\def\checklines{\@checklinestrue}
+\def\@checklines{\if@checklines \rlap{\smash{\vtop{\normalsize
+	\hbox{} \vskip\headsep \hrule width\textwidth\vskip-.4pt \vskip\topskip
+	\hrule\vskip-.4pt
+	\ifDS@techrep\@tempcnta50\else				% 1.05(2)
+	\ifDS@english\@tempcnta53\else\@tempcnta45\fi\fi	% 1.05(2)
+	\relax\@@checklines}}}\fi
+	\ifDS@english\@tempcnta-7\else\@tempcnta\z@\fi\relax
+% 1.05(2)>>
+	% register marks are removed				% 2.12(2d)
+% 1.05(2)<<
+	}
+\def\@@checklines{\ifnum\@tempcnta>\z@
+	\vskip\normalbaselineskip \hrule\vskip-.4pt \advance\@tempcnta\m@ne
+	\let\next\@@checklines\else\let\next\relax\fi\next}
+
+\pagestyle{headings}
+\pagenumbering{arabic}
+
+\ifDS@english\else
+\def\today{\the\year\ipsj@j@year \the\month\ipsj@j@month \the\day\ipsj@j@day}
+								% 2.12(1c)
+\fi
+
+
+%%%%%% Output Routine %%%%%%
+
+% To balance the final page,
+% following code is borrowed from nicetwocolumn style
+
+% you can refrain from balancing by falsifying following switch!
+%% Initial value of \if@lastpagebalancing is false.  It may be turned true by
+%% biography processing macros. (H.N.)
+
+\newif\if@lastpagebalancing \@lastpagebalancingfalse
+\newif\if@finalpageoutput \@finalpageoutputfalse
+% incorporate balanced output to \enddocument
+\let\latex@enddocument\enddocument
+\def\enddocument{\@finalpageoutputtrue
+	\if@lastpagebalancing
+		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
+	\ifDS@preface
+		\global\let\@outputdblcol\opt@balanceoutputdblcol\fi
+	\ifDS@abstract						% 2.07(7)>>
+		\hbox{}\newpage
+		\ifDS@english	\rightline{(Presented \ra@presented)}
+		\else		\expandafter\ra@putpresented\ra@presented \fi
+		\fi						% 2.07(7)<<
+%								% 2.12(4d)>>
+	\if@filesw \write\@auxout{\string\gdef\string\ipsj@lastpage
+		{\number\c@page}}\fi				% 2.12(4d)<<
+	\latex@enddocument}
+
+\newbox\@leftcolumnfootnote \newbox\@rightcolumnfootnote
+\newif\if@leftfootnoteexist \@leftfootnoteexistfalse 
+\newif\if@rightfootnoteexist \@rightfootnoteexistfalse
+\newif\ifopt@floatexist \opt@floatexistfalse
+
+% 2.00(12) \color@{begin/end}group ignored
+\def\enlargethispage{\ipsj@warning{\string\enlargepage is ignored}}
+								% 2.00(3,12)
+\def\@makecol{\vbadness10000 \lineskiplimit\normallineskiplimit	% 1.05(1)
+	\setbox\@outputbox\box\@cclv
+	\if@firstcolumn
+		\ifvoid\footins \global\@leftfootnoteexistfalse
+		\else
+			\global\@leftfootnoteexisttrue
+			\@tempdima\dp\footins
+			\global\setbox\@leftcolumnfootnote\vbox{
+				\unvbox\footins\vskip-\@tempdima}
+		\fi
+		\ifx\@botlist\@empty\else\global\opt@floatexisttrue\fi
+	\else
+		\ifvoid\footins \global\@rightfootnoteexistfalse
+		\else
+			\global\@rightfootnoteexisttrue
+			\@tempdima\dp\footins
+			\global\setbox\@rightcolumnfootnote\vbox{
+				\unvbox\footins	\vskip-\@tempdima}
+		\ifx\@toplist\@empty\else\global\opt@floatexisttrue\fi
+		\fi
+	\fi
+	\xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+	\global\maxdepth\@maxdepth}
+
+% 2.01(1) >>
+\let\latex@vtryfc\@vtryfc
+\def\@vtryfc{\if@firstcolumn \global\@leftfootnoteexistfalse
+	\else \global\@rightfootnoteexistfalse \fi \latex@vtryfc}
+% 2.01(1) <<
+
+% 1.01(1,2) >>
+\let\latex@addtobot\@addtobot
+\def\@addtobot{\latex@addtobot\global\maxdepth\@maxdepth}
+\let\latex@combinefloats\@combinefloats
+\def\@combinefloats{\ifx\@botlist\@empty\else \dimen@\dp\@outputbox
+	\setbox\@outputbox\vbox{\unvbox\@outputbox \vskip-\dimen@}\fi
+	\latex@combinefloats}
+% 1.01(1,2) <<
+
+\newskip\opt@baselineskip
+\def\@outputdblcol{
+	\if@firstcolumn \global\@firstcolumnfalse
+		\global\setbox\@leftcolumn\box\@outputbox
+		\global\opt@baselineskip\baselineskip
+	\else \global\@firstcolumntrue \global\opt@floatexistfalse
+	\global\bib@adjustheight-\maxdimen
+	\setbox\@leftcolumn\vbox to\@colht{\boxmaxdepth\@maxdepth   % 1.01(3)
+		\unvbox\@leftcolumn
+		\if@leftfootnoteexist\vfil
+			\footnoterule\box\@leftcolumnfootnote\fi}
+	\setbox\@outputbox\vbox to\@colht{\boxmaxdepth\@maxdepth    % 1.01(3)
+		\unvbox\@outputbox
+		\if@rightfootnoteexist\vfil
+			\footnoterule\box\@rightcolumnfootnote\fi}
+	\global\maxdepth\@maxdepth
+	\if@finalpageoutput
+	\if@leftfootnoteexist\else\if@rightfootnoteexist\else
+		\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn}%
+		\setbox\@outputbox\vbox{\unvbox\@outputbox}
+		\ifdim\ht\@leftcolumn<\ht\@outputbox
+			\setbox\@leftcolumn\vbox to\ht\@outputbox{
+				\unvbox\@leftcolumn}%
+		\else
+			\setbox\@outputbox\vbox to\ht\@leftcolumn{
+				\unvbox\@outputbox}%
+		\fi
+	\fi\fi\fi
+	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+		{\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+		\hbox to\columnwidth{\box\@outputbox \hss}}}
+	\@combinedblfloats
+	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}%
+	\endgroup
+	\fi}
+
+\let\opt@outputdblcol\@outputdblcol
+\chardef\opt@boxa\z@
+\chardef\opt@boxb\@ne
+\chardef\opt@boxc\tw@
+\def\opt@magicpenalty{1234}
+\def\opt@balanceoutputdblcol{\let\next\opt@ibalanceoutputdblcol
+	\if@firstcolumn \let\next\opt@outputdblcol
+	\else	\ifopt@floatexist \opt@warning \let\next\opt@outputdblcol
+		\else\ifx\@deferlist\@empty\else
+			\opt@warning \let\next\opt@outputdblcol\fi\fi\fi
+	\next}
+\def\opt@ibalanceoutputdblcol{%
+	\setbox\@leftcolumn\vbox{\unvbox\@leftcolumn
+		\ifnum\lastpenalty=\opt@magicpenalty\relax\else
+		\@tempcnta10\relax\@whilenum\@tempcnta>0\do{%
+			\unskip\unskip\unkern\unpenalty
+			\advance\@tempcnta\m@ne}\fi}
+	\advance\opt@baselineskip-\dp\@leftcolumn
+	\ifdim\dp\@leftcolumn=\z@ \ifdim\opt@baselineskip=\baselineskip
+		\@tempdima\ht\@leftcolumn \advance\@tempdima-\topskip
+		\divide\@tempdima\baselineskip
+		\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+		\advance\@tempdima\topskip
+		\advance\@tempdima-\ht\@leftcolumn
+		\advance\opt@baselineskip\@tempdima \fi\fi
+	\advance\opt@baselineskip-\topskip
+	\setbox\@outputbox\vbox{\unvbox\@outputbox}
+	\ifdim\ht\@outputbox=\topskip \ifdim\dp\@outputbox=\z@
+	\setbox\opt@boxa\vbox{\unvcopy\@outputbox\unskip
+		\global\setbox\opt@boxb\lastbox
+		\global\dimen@\lastskip}
+	\ifvoid\opt@boxb\else\ifdim\ht\opt@boxb=\z@
+		\ifdim\dp\opt@boxb=\z@\ifdim\dimen@=\topskip
+		\@firstcolumntrue\fi\fi\fi\fi\fi\fi
+	\setbox\opt@boxa\copy\@outputbox
+	\setbox\@outputbox\vbox{\unvcopy\@leftcolumn
+		\if@firstcolumn\else
+		\vskip\opt@baselineskip
+		\penalty\interlinepenalty\unvbox\@outputbox\fi}
+	\@tempdima\ht\@outputbox \advance\@tempdima\topskip
+	\divide\@tempdima\tw@ \advance\@tempdima100sp
+	\splittopskip\topskip \splitmaxdepth\@maxdepth
+	\ifdim\bib@adjustheight<\@M pt
+		\opt@split\@outputbox\opt@boxb\@tempdima
+		\ifdim\ht\opt@boxb<\bib@adjustheight
+			\opt@split\@leftcolumn\opt@boxc\bib@adjustheight
+			\opt@split\opt@boxc\opt@boxb\@tempdima
+			\if@firstcolumn
+				\opt@adjust\opt@boxc{\unvbox\@leftcolumn}
+			\else\opt@adjust\opt@boxc{\ifvoid\@leftcolumn\else
+				\unvbox\@leftcolumn\vskip\opt@baselineskip\fi
+				\unvbox\opt@boxa}\fi\fi
+	\else
+		\advance\bib@adjustheight-\@M pt
+		\opt@split\opt@boxa\opt@boxc\bib@adjustheight
+		\setbox\@outputbox\vbox{\unvbox\@leftcolumn
+			\vskip\opt@baselineskip\unvbox\opt@boxc}
+		\opt@split\@outputbox\opt@boxb\@tempdima
+		\opt@adjust\@outputbox{\unvbox\opt@boxa}
+	\fi
+	\if@leftfootnoteexist
+		\setbox\opt@boxb\vbox to\@colht{\box\opt@boxb\vfill
+			\footnoterule\box\@leftcolumnfootnote}\fi
+	\if@rightfootnoteexist
+		\setbox\@outputbox\vbox to\@colht{\box\@outputbox\vfill
+			\footnoterule\box\@rightcolumnfootnote}\fi
+	\ifdim\ht\@outputbox>\ht\opt@boxb
+		\setbox\opt@boxb\vbox to\ht\@outputbox{\unvbox\opt@boxb}
+	\else
+		\setbox\@outputbox\vbox to\ht\opt@boxb{\unvbox\@outputbox}
+	\fi
+	\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+		{\box\opt@boxb \hss}\hfil \vrule width\columnseprule\hfil
+		\hbox to\columnwidth{\box\@outputbox \hss}}}
+	\global\@firstcolumntrue \@combinedblfloats
+	\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+	\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup}
+
+\if@LaTeX@eN							% 2.00(3)>>
+\def\opt@warning{\ClassWarning{ipsjpapers}{%
+	Single column floats still remain on biography\MessageBreak
+	processing.\MessageBreak
+	Do \string\verbbiography\space for manual balcing}}
+\else
+\def\opt@warning{\@warning{Single column floats still remain on biography
+	processing.^^J\space\space\space\space\space
+	\space\space\space\space\space\space\space\space\space\space
+	Do \string\verbbiography\space for manual balancing}}
+\fi								% 2.00(3)<<
+\def\opt@split#1#2#3{\setbox#2\vsplit#1to#3\setbox#2\vbox{\unvbox#2}}
+\def\opt@adjust#1#2{\@tempdima\ht#1 \advance\@tempdima-\topskip
+	\@tempdimb\@tempdima \divide\@tempdima\baselineskip
+	\@tempcnta\@tempdima \@tempdima\@tempcnta\baselineskip
+	\advance\@tempdima-\@tempdimb
+	\ifdim\@tempdima<\z@ \advance\@tempdima\baselineskip \fi
+	\advance\@tempdima\baselineskip \advance\@tempdima-\dp#1 
+	\advance\@tempdima-\topskip
+	\setbox\@outputbox\vbox{\ifvoid#1\else\unvbox#1\vskip\@tempdima\fi#2}}
+
+\let\latex@outputpage\@outputpage
+% \opt@finalgap:	vertical space above the \hrule at the end of paper.
+% \opt@finallinewidth:	width of the \hrule at the end of paper.
+\@tempdima2\baselineskip		% This might be changed
+\edef\opt@finalgap{\the\@tempdima}
+\def\opt@finallinewidth{220\@Q}		% This might be changed
+\ifDS@techrep \let\opt@finallinewidth\z@ \fi			% 1.05(2)
+
+\def\@outputpage{\if@finalpageoutput
+	\setbox\@outputbox\vbox{\unvbox\@outputbox}
+	\@tempdima\dp\@outputbox
+	\@tempdimb\ht\@outputbox \advance\@tempdimb\opt@finalgap\relax
+	\ifdim\@tempdimb>\textheight\else
+	\setbox\@outputbox\vbox{\unvbox\@outputbox\vskip-\@tempdima
+		\nointerlineskip\vbox to\z@{\vskip\opt@finalgap
+			\hbox to\textwidth{\hss
+			\vrule height0.4pt width\opt@finallinewidth\hss}
+		\vss}}\fi\fi
+	\ifASCII\if@LaTeX@e\ifipsj@nonjp\else
+		\@@topmargin\topmargin \fi\fi\fi	    % 2.00(13),2.12(1b)
+	\latex@outputpage}
+
+%%%%%% Biography %%%%%%
+
+% If you want to control the allocation of biographies manually, do
+% \verbbiography and insert \adjust{<vertical materials>} just before
+% \member (or its relatives).  For example;
+% 	\verbbiography
+%	\begin{biography}
+%	\member{...} ...
+%	\adjust{\protect\newpage}
+%	\member{...} ...
+%	\adjust{\protect\vspace{1.3cm}}
+%	\member{...} ...
+%	\end{biography}
+% will make page break just after the biography of the 1st author, and will
+% insert a vertical space of 1.3cm just after that of the 2nd.  It is
+% strongly recommended to \protect any control sequence in the argument of
+% \adjust.
+
+% \received and \accepted define the dates of receipt/acceptance.
+% They are put at the end of manuscript (just before biographies) by
+% \ra@putrcvacc.
+
+% 2.12(1c)>>
+% \def\ra@nengo is moved to the tail				% 2.12(1c)
+\ifDS@english
+\def\received#1#2#3{\def\ra@received{\ra@date{#1}{#2}{#3}}\ignorespaces}
+\def\accepted#1#2#3{\def\ra@accepted{\ra@date{#1}{#2}{#3}}\ignorespaces}
+								% 2.07(5)
+% \rereceived is moved below					% 2.12(5)
+\def\presented#1#2#3{\def\ra@presented{\ra@date{#1}{#2}{#3}}\ignorespaces}
+								% 2.07(7)
+\ifDS@printer							% 2.12(4e)>>
+\def\ReleasedToOnline#1#2#3{\ifDS@online
+	\def\ra@released{\ra@date{#1}{#2}{#3}}\fi}
+\fi								% 2.12(4e)<<
+\def\ra@received{??? ??, ????}
+\def\ra@accepted{??? ??, ????}
+\def\ra@presented{??? ??, ????}					% 2.07(7)
+\def\ipsj@TOD@editor{(Editor in Charge:\quad{\it\ipsj@TOD@ename\/})}
+								% 2.07(6)
+								% 2.12(6)
+
+\ifDS@TBIO							% 2.11(4)>>
+\def\ipsj@TOD@editor{(Communicated by\quad{\it\ipsj@TOD@ename\/})}% 2.12(6)
+\fi								% 2.11(4)<<
+\else
+\def\received#1#2#3{\def\ra@received{#1&#2&#3&}\ignorespaces}
+\def\accepted#1#2#3{\def\ra@accepted{#1&#2&#3&}\ignorespaces}
+								% 2.07(5)
+% \rereceived is moved below					% 2.12(5)
+\def\presented#1#2#3{\def\ra@presented{#1&#2&#3&}\ignorespaces}	% 2.07(7)
+\def\ra@received{?&?&?&}
+\def\ra@accepted{?&?&?&}
+\def\ra@presented{?&?&?&}					% 2.07(7)
+\def\ipsj@TOD@editor{\ipsj@j@lp\ipsj@j@edinch
+	\quad\ipsj@TOD@ename\ipsj@j@rp}				% 2.07(6)
+								% 2.08(2)
+								% 2.12(6)
+\fi
+% aliasing of \received etc. is moved to the tail.
+
+% 2.12(1c)<<
+
+\let\ra@elt\relax						% 2.12(5)>>
+\def\rereceived#1#2#3{\ifx\ra@rereceived\undefined
+		\def\ra@rereceived{\ra@elt{}{#1}{#2}{#3}}\def\ra@rerecnum{1}%
+	\else
+		\@tempcnta\ra@rerecnum \advance\@tempcnta\@ne
+		\edef\ra@rerecnum{\number\@tempcnta}%
+		\edef\ra@rereceived{\ra@rereceived
+			\ra@elt{(\ra@rerecnum)}{#1}{#2}{#3}}%
+	\fi \ignorespaces}					% 2.12(5)<<
+
+\def\edInCharge#1{\def\ipsj@TOD@ename{#1}\ignorespaces}		% 2.07(6)
+
+\def\ra@putrcvacc{\rightline{\vtop{\normalsize\tabskip\z@
+	\ifDS@english
+	    \llap{(Received \ra@received)}
+	    \def\ra@elt##1##2##3##4{%				% 2.12(5)>>
+		\llap{(Revised##1 \ra@date{##2}{##3}{##4})}}
+	    \ifx\ra@rereceived\undefined \else \ra@rereceived \fi
+								% 2.12(5)<<    
+	    \llap{(Accepted \ra@accepted)}
+	    \ifx\ra@released\undefined\else			% 2.12(4e)
+		\llap{(Released \ra@released)}\fi		% 2.12(4e)
+	    \hbox{}
+	\else							% 2.12(1c)>>
+	    \def\ra@elt##1##2##3##4{##2&##3&##4&\ipsj@j@rerec##1)\cr}%
+								% 2.12(5)
+	    \halign{(\ra@nengo\hskip\jasciikanjiskip
+		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@year
+			\hskip\jasciikanjiskip&
+		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@month
+			\hskip\jasciikanjiskip&
+		\hfil##\hfil\hskip\jasciikanjiskip \ipsj@j@day
+			&##\hfil\cr				% 2.07(5)>>
+		\ra@received \ipsj@j@received)\cr
+		\ifx\ra@rereceived\undefined \else \ra@rereceived \fi
+								% 2.12(5)
+		\ra@accepted \ipsj@j@accepted)\cr\multispan3\cr}\fi}%
+								% 2.07(5)<<
+								% 2.12(1c)<<
+	\hskip\@mojihaba}
+	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}
+	\ifDS@printer \ifDS@english				% 2.12(4d)>>
+		\ifipsj@trans
+			\ifDS@online \noindent \ipsj@refer@trans \par \fi
+		\else
+			\ifDS@online\else \noindent \ipsj@refer@online \par \fi
+	\fi \fi \fi						% 2.12(4d)<<
+	\ifipsj@recommendation\else				% 2.04(2)
+		\ifx\ipsj@TOD@ename\undefined\else		% 2.07(6)>>
+			\nobreak\vskip\baselineskip
+			\hbox{\ipsj@TOD@editor}\fi		% 2.07(6)<<
+		\vskip\baselineskip\penalty\opt@magicpenalty\fi}% 2.04(2)
+\def\ra@date#1#2#3{\ifcase#2\or
+	January\or February\or March\or April\or May\or June\or
+	July\or August\or September\or October\or November\or December\fi
+	\space#3, #1}
+\def\ra@jdate#1#2#3{#1&#2&#3&}
+\def\ra@putpresented#1&#2&#3&{\rightline{%			% 2.12(1c)>>
+	(\ra@nengo\hskip\jasciikanjiskip			% 2.07(7)>>
+	#1\hskip\jasciikanjiskip \ipsj@j@year \hskip\jasciikanjiskip
+	#2\hskip\jasciikanjiskip \ipsj@j@month \hskip\jasciikanjiskip
+	#3\hskip\jasciikanjiskip \ipsj@j@day\ipsj@j@presented)}}
+								% 2.07(7)<<
+								% 2.12(1c)<<
+
+% 2.12(4d)>>
+\def\ipsj@space{\hskip\z@ plus\fontdimen\thr@@\font \penalty5000\relax}
+\def\ipsj@refer@trans{%
+	(Paper version of this article can be found in the IPSJ Transactions on
+	\csname ipsj@sig@\ipsj@sig@code @e\endcsname,
+	Vol.\ipsj@space\number\c@volume,
+	No.\ipsj@space SIG\ipsj@sig@numa\ipsj@space
+	(\ipsj@sig@code\ipsj@space\ipsj@sig@numb),
+	pp.\ipsj@space\number\c@volpageoffset--\penalty5000\relax
+	\ipsj@thelastpage\c@volpageoffset\ipsj@last@page.)}
+\def\ipsj@refer@online{%
+	(Online version of this article can be found in the
+	IPSJ Digital Courier,
+	Vol.\ipsj@space\ipsj@olh@vol,
+	pp.\ipsj@space\ipsj@olh@page--\penalty5000\relax
+	\ipsj@thelastpage\ipsj@olh@page\ipsj@olh@lastpage.)}
+\def\ipsj@thelastpage#1#2{\begingroup
+	\@tempcnta#1\relax
+	\ifDS@online \@tempcntb\ipsj@olh@page
+	\else \@tempcntb\c@volpageoffset\fi
+	\ifx#2\undefined
+		\ifx\ipsj@lastpage\undefined \def\@tempa{???}%
+		\else \advance\@tempcntb-\ipsj@lastpage
+			\advance\@tempcnta-\@tempcntb
+			\def\@tempa{\number\@tempcnta}%
+		\fi
+	\else \def\@tempa{#2}%
+	\fi
+	\@tempa \endgroup}
+% 2.12(4d)<<
+
+\newbox\bio@picbox
+% The following define the height and width of a picture for biography, and
+% the indentation of the first 6 lines.  They might be changed.
+\def\bio@picheight{100\@Q}
+\def\bio@picwidth{80\@Q}
+
+\newif\ifbio@showpicbox
+\bio@showpicboxtrue
+% Do \bio@showpicboxfalse if you don't want to put a frame box at the
+% position for picture.
+\ifDS@english
+\def\bio@lineheight{9\@Q}
+\def\bio@piclines{7}
+\def\bio@indent{91\@Q}
+\def\bio@hangafter{7}
+\else
+\def\bio@lineheight{8\@Q}
+\def\bio@piclines{6}
+\def\bio@indent{96\@Q}
+\def\bio@hangafter{5}
+\fi
+
+% \verbbiography forces verbatim output of biography (i.e. not ballanced).
+\newif\ifbio@verb \bio@verbfalse
+\def\verbbiography{\global\bio@verbtrue}
+% The environment biography saves texts for biographies into the list of
+% \inserts (for floats).
+\def\biography{\ifipsj@recommendation\else\par\ra@putrcvacc\fi	% 2.04(2)
+	\def\member{\bio@member{}{\ipsj@j@member}}%		%2.12(3a)(1c)>>
+	\def\nomember{\bio@member{}{}}%
+	\def\stmember{\bio@member{}{\ipsj@j@stmember}}%
+	\def\xmember{\bio@member{}}%
+	\ifDS@printer
+		\def\Kmember{\bio@Kmember{\ipsj@j@member}}%
+		\def\Knomember{\bio@Kmember{}}%
+		\def\Kstmember{\bio@Kmember{\ipsj@j@stmember}}
+		\let\Kxmember\bio@Kmember
+	\fi							%2.12(3a)(1c)<<
+	\ifDS@english \let\author\nomember			% 2.12(3d)>>
+		\ifDS@printer \let\Kauthor\Knomember \fi
+	\fi							% 2.12(3d)<<
+	\let\adjust\bio@adjust
+	\ifbio@showpicbox
+	\setbox\bio@picbox\hbox{\hbox to\z@{\vrule\hskip-0.4pt%
+		\vtop to\bio@picheight{\vskip\z@\hrule width\bio@picwidth
+			\vfil\hrule}\hskip-0.4pt\vrule\hss}}
+	\else
+	\setbox\bio@picbox\hbox{}
+	\fi
+	\@tempdima\bio@piclines\baselineskip \advance\@tempdima\bio@lineheight
+	\dp\bio@picbox\@tempdima
+	\let\bio@egroup\relax\let\+\ignorespaces\let\@elt\relax
+	\def\bio@list{}\global\bio@th\z@}
+
+\def\bio@Kmember#1#2#3{\bio@member{#3}{#1}{#2}}			% 2.12(3a)
+\def\bio@member#1#2#3{\bio@egroup\let\bio@egroup\bio@@egroup	% 2.12(3b)>>
+	\@next\@currbox\@freelist\relax
+		{\@latexerr{Too many unprocessed floats and biographies}\@ehb}%
+	\def\@tempa{#3}\def\@tempb{#1}%
+	\global\setbox\@currbox\hbox\bgroup
+	    \@tempswatrue
+	    \ifx\@tempb\@empty
+		\ifDS@printer \@tempswafalse
+		\else \raise\bio@lineheight\copy\bio@picbox
+		\fi
+	    \else
+		\setbox\@tempboxa\hbox to\z@{\vtop{\vskip\z@
+		    \hbox{\includegraphics
+			[width=\bio@picwidth,height=\bio@picheight]{#1.eps}}}%
+		    \hss}
+		\dp\@tempboxa\dp\bio@picbox
+		\raise\bio@lineheight\box\@tempboxa
+	    \fi							% 2.12(3b)<<
+	    \vtop\bgroup
+		\let\par\\
+		\if@tempswa \hangindent\bio@indent\hangafter-\bio@hangafter \fi
+		\ifDS@english {\bf #3\ }%
+		\else {\bf\bio@putauthor#3\+ \@nil}%
+			\def\@tempb{#2}\ifx\@tempb\@empty\else	% 2.12(3c)
+			\ipsj@j@lp#2\ipsj@j@rp\fi{\@@par}\fi	% 2.12(3c)(1c)
+	\ignorespaces}
+
+% Author name format:
+%	S + G < 5 -> fill space between S/G (like SS__G)
+%	otherwise -> 1 KC space between S/G (like SS_GG)
+\def\bio@putauthor#1 #2\@nil{%
+	\ifipsj@nonjp#1 #2\else
+	\setbox\@tempboxa\hbox{\jintercharskip\z@#1#2}%
+	\setbox\mkt@boxa\hbox{\jintercharskip1cm#1#2}%
+	\ifdim\wd\@tempboxa=\wd\mkt@boxa #1 #2\else
+	\def\@tempa{#2}\ifx\@tempa\empty
+		{\def\+{}\ipsj@warning{Author name #1 doesn't have a space}}%
+								% 2.00(3)
+		#1\else
+	\@tempdima\@mojihaba
+	\mkt@getnamewidth\mkt@sname{#1}\mkt@getnamewidth\mkt@gname{#2}%
+	\advance\mkt@sname\mkt@gname
+	\ifnum\mkt@sname<5\leavevmode\hbox to5\@mojihaba{#1\hfil#2}\else
+		#1#2\fi\fi\fi\fi}
+\def\bio@@egroup{\@@par\hbox{}\egroup\egroup\@tempdima\dp\@currbox
+	\ifdim\@tempdima>\textheight
+		\ipsj@warning{Biography of \@tempa\space is too long}% 2.00(3)
+		\bio@verbtrue \fi
+	\advance\@tempdima\baselineskip\global\advance\bio@th\@tempdima
+	\global\dimen\@currbox\@tempdima \global\count\@currbox\z@
+	{\let\protect\bio@protect\xdef\bio@list{\bio@list\@elt\@currbox}}}
+\def\bio@adjust#1{\bio@egroup\let\bio@egroup\relax
+	\ifbio@verb {\let\protect\bio@protect\xdef\bio@list{\bio@list#1}\fi}}
+\def\bio@protect{\noexpand\protect\noexpand}
+
+\def\endbiography{\bio@egroup \@tempswatrue
+	\ifx\@botlist\@empty\ifx\@deferlist\@empty \@tempswafalse \fi\fi
+	\ifbio@verb\else\if@tempswa \bio@verbtrue \opt@warning\fi\fi
+	\ifbio@verb{\let\@elt\bio@putelt \let\protect\relax \bio@list}%
+	\else\bio@putbio\fi}
+
+\newdimen\bio@colht \newdimen\bio@splitheight
+\newdimen\bio@maxgap \newdimen\bio@lastgap
+\newdimen\bio@th \newdimen\bio@lhA \newdimen\bio@hA \newdimen\bio@hB
+\newdimen\bio@lh \newdimen\bio@rh
+\newdimen\bio@tempdim
+\newif\ifbio@awful
+\newinsert\bio@pbox \count\bio@pbox\@ne
+
+\def\bio@putbio{\let\@elt\relax \let\bio@vskip\relax \allowbreak
+	\bio@colht\@colht \advance\bio@colht-\topskip
+	\advance\bio@colht\baselineskip
+	\@tempdima\bio@colht \advance\@tempdima-\@colroom
+	\advance\@tempdima\pagetotal
+	\if@firstcolumn
+	    \ifdim\@tempdima>\bio@th
+		\global\@lastpagebalancingtrue
+		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
+	    \else
+		\ifdim\pagetotal=\z@\else
+			\dimen\bio@pbox\@tempdima \advance\bio@th\@tempdima
+			\edef\bio@list{\@elt\bio@pbox\bio@list}\fi
+		\bio@splitheight\bio@colht \bio@splitpage
+		\bio@splitheight.5\bio@th
+		\let\bio@awfulput\bio@specialawfulput
+		\bio@trybalance\fi
+	\else \advance\@tempdima\bio@th
+	    \ifdim\@tempdima<\bio@colht
+		\global\@lastpagebalancingtrue
+		\ifdim\pagetotal=\z@ \global\opt@baselineskip2\baselineskip\fi
+		{\let\@elt\bio@putelt\bio@list}\vskip-\baselineskip
+	    \else
+		\let\bio@awfulput\bio@normalawfulput
+		\bio@splitheight\z@ \advance\@tempdima-\bio@th
+		\advance\bio@colht-\@tempdima \bio@splitpage
+		{\let\@elt\bio@putelt\bio@list}\bio@nextpage
+		\bio@trybalance\fi
+	\fi}
+
+\def\bio@trybalance{\bio@split 
+	\let\bio@right\bio@rightA \let\bio@left\bio@leftA
+		\def\bio@rightx{}\def\bio@leftx{}%
+		\let\bio@hX\bio@hA \bio@balance
+		\let\bio@rightxA\bio@rightx \let\bio@leftxA\bio@leftx
+	\ifbio@awful\@tempcnta\tw@\else\@tempcnta\z@\fi
+	\let\bio@right\bio@rightB \let\bio@left\bio@leftB
+		\def\bio@rightx{}\def\bio@leftx{}%
+		\let\bio@hX\bio@hB \bio@balance
+		\let\bio@rightxB\bio@rightx \let\bio@leftxB\bio@leftx
+	\ifbio@awful\advance\@tempcnta\@ne\fi
+	\ifcase\@tempcnta
+		\ifdim\bio@hA<\bio@hB \bio@balanceput\bio@leftxA\bio@rightxA
+		\else \bio@balanceput\bio@leftxB\bio@rightxB\fi
+	\or \bio@balanceput\bio@leftxA\bio@rightxA
+	\or \bio@balanceput\bio@leftxB\bio@rightxB
+	\else \bio@awfulput\fi
+	\ifx\bio@deferred\empty\vskip-\baselineskip\let\next\relax
+	\else\bio@nextpage\let\next\bio@trybalance\fi\next}
+
+\def\bio@split{\def\bio@leftA{}\def\bio@leftB{}%
+	\def\bio@rightA{}\def\bio@rightB{}%
+	\bio@lhA\z@\@tempdimb\z@ \bio@isplit}
+\def\bio@isplit{\ifx\bio@list\empty\let\next\relax\else
+	\bio@car\@tempdima\@currbox\bio@list
+	\bio@lhA\@tempdimb\advance\@tempdimb\@tempdima
+	\edef\bio@leftB{\bio@leftB\@elt\@currbox}%
+	\ifdim\@tempdimb>\bio@splitheight
+		\edef\bio@rightA{\@elt\@currbox\bio@list}%
+		\let\bio@rightB\bio@list \let\next\relax
+	\else\edef\bio@leftA{\bio@leftA\@elt\@currbox}\let\next\bio@isplit
+	\fi\fi\next}
+
+\def\bio@balanceput#1#2{{\let\@elt\bio@putelt\let\bio@vskip\bio@xvskip
+	#1\bio@newpage#2}}
+\def\bio@normalawfulput{{\let\bio@vskip\@gobble \@tempcnta\z@ 
+	\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxB
+	\ifdim\@tempdima<\bio@colht
+		\@tempdima\z@ \bio@addheight\@tempdima\bio@rightxB
+		\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
+			\let\@elt\bio@putelt
+			\bio@leftxB\bio@newpage\bio@rightxB\fi\fi
+	\ifnum\@tempcnta=\z@
+		\@tempdima\z@ \bio@addheight\@tempdima\bio@leftxA
+		\ifdim\@tempdima<\bio@colht
+			\@tempdima\z@\bio@addheight\@tempdima\bio@rightxA
+			\ifdim\@tempdima<\bio@colht \@tempcnta\@ne
+				\let\@elt\bio@putelt
+				\bio@leftxA\bio@newpage\bio@rightxA\fi\fi\fi
+% The following may be redundant.
+	\ifnum\@tempcnta=\z@
+		\let\@elt\bio@putelt\bio@listsave\fi}}
+\def\bio@specialawfulput{{\advance\bio@th-\dimen\bio@pbox
+	\ifdim\bio@th<\bio@colht\bio@newpage
+	\let\bio@newpage\relax\fi\bio@normalawfulput}}
+
+\def\bio@putelt#1{\ifnum\count#1>\z@\else\box#1
+	\nobreak\vskip-2\baselineskip\prevdepth\z@\hbox{}
+	\vskip\baselineskip\fi}
+\def\bio@xvskip#1{\vskip#1\prevdepth\z@}
+\def\bio@newpage{\vskip-\baselineskip\newpage}
+
+\def\bio@nextpage{\bio@newpage \let\bio@list\bio@deferred
+	\bio@th\z@ \bio@addheight\bio@th\bio@list
+	\bio@colht\@colht \advance\bio@colht-\topskip
+	\advance\bio@colht\baselineskip
+	\bio@splitheight\bio@colht \bio@splitpage
+	\bio@splitheight.5\bio@th
+	\let\bio@awfulput\bio@normalawfulput}
+\def\bio@splitpage{\let\bio@listsave\bio@list \bio@split
+	\@tempdima\bio@th \advance\@tempdima-\bio@lhA
+	\ifdim\@tempdima>\bio@colht
+		\let\bio@leftAsave\bio@leftA \bio@th\bio@lhA
+		\let\bio@list\bio@rightA \bio@splitheight\bio@colht
+		\bio@split \edef\bio@list{\bio@leftAsave\bio@leftA}%
+		\advance\bio@th\bio@lhA
+		\let\bio@deferred\bio@rightA
+	\else\def\bio@deferred{}\let\bio@list\bio@listsave\fi}
+
+% \bio@tolerablegap:	maximum tolerable gap between adjacent bio's.
+% \bio@tolerablestretch:maximum stretch of a column.
+
+\@tempdima10\baselineskip		% This might be changed
+\edef\bio@tolerablegap{\the\@tempdima}
+\@tempdima15\baselineskip
+\edef\bio@tolerablelastgap{\the\@tempdima}
+\def\bio@tolerablestretch{2}		% This might be changed
+
+\def\bio@balance{\let\@elt\relax \edef\bio@bstack{%
+		\@elt{{\bio@left}{\bio@right}{}{}{0pt}}}
+	\bio@xbalance}
+\def\bio@xbalance{%
+	\expandafter\bio@popstack\bio@bstack\@nil
+	\let\bio@nextA\bio@xbalance \@tempdima\z@
+	\ifx\bio@left\empty \ifx\bio@right\empty
+		\let\bio@nextA\bio@balanceend
+	\else
+		\bio@addheight\@tempdima\bio@right
+		\edef\bio@leftx{\bio@leftx\bio@vskip{\the\@tempdima}}%
+		\advance\bio@hX\@tempdima
+		\edef\bio@rightx{\bio@rightx\bio@right}\def\bio@right{}%
+		\bio@pushstack \fi\else
+	\ifx\bio@right\empty
+		\bio@addheight\@tempdima\bio@left
+		\edef\bio@rightx{\bio@rightx\bio@vskip{\the\@tempdima}}%
+		\advance\bio@hX\@tempdima
+		\edef\bio@leftx{\bio@leftx\bio@left}\def\bio@left{}%
+		\bio@pushstack \else
+	\bio@car\@tempdima\bio@leftbox\bio@left
+	\bio@car\@tempdimb\bio@rightbox\bio@right
+	\edef\bio@leftx{\bio@leftx\@elt\bio@leftbox}%
+	\edef\bio@rightx{\bio@rightx\@elt\bio@rightbox}%
+	\ifdim\@tempdima>\@tempdimb
+		\advance\bio@hX\@tempdima
+		\let\bio@da\@tempdima\let\bio@db\@tempdimb
+		\bio@ibalance\bio@left\bio@right\bio@leftx\bio@rightx
+	\else	\advance\bio@hX\@tempdimb
+		\let\bio@da\@tempdimb\let\bio@db\@tempdima
+		\bio@ibalance\bio@right\bio@left\bio@rightx\bio@leftx\fi
+	\fi\fi\bio@nextA}
+\def\bio@ibalance#1#2#3#4{\let\bio@nextB\relax
+	\ifx#2\empty 
+		\advance\bio@da-\bio@db
+		\edef#4{#4\bio@vskip{\the\bio@da}}\bio@pushstack\else
+	\bio@car\bio@tempdim\@currbox#2 \advance\bio@db\bio@tempdim
+	\ifdim\bio@da<\bio@db
+		\advance\bio@db-\bio@da
+		\let\@tempa#3\edef#3{#3\bio@vskip{\the\bio@db}}%
+		\let\@tempb#4\edef#4{#4\@elt\@currbox}%
+		\advance\bio@hX\bio@db \bio@pushstack
+		\advance\bio@hX-\bio@db
+		\edef#2{\@elt\@currbox#2}%
+		\advance\bio@tempdim-\bio@db
+		\let#3\@tempa \edef#4{\@tempb\bio@vskip{\the\bio@tempdim}}%
+		\bio@pushstack
+	\else \edef#4{#4\@elt\@currbox}\def\bio@nextB{\bio@ibalance#1#2#3#4}%
+	\fi\fi\bio@nextB}
+\def\bio@balanceend{\bio@awfulfalse \def\bio@bstack{}%
+	\bio@maxgap\z@ \bio@lastgap\z@
+	\bio@checkgap\bio@leftx \bio@checkgap\bio@rightx
+	\ifdim\bio@maxgap>\bio@tolerablegap\relax\bio@awfultrue\fi
+	\ifdim\bio@lastgap>\bio@tolerablelastgap\relax\bio@awfultrue\fi
+	\ifdim\bio@hX>\bio@tolerablestretch\bio@splitheight\bio@awfultrue\fi
+	\ifdim\bio@hX>\bio@colht\bio@awfultrue\fi}
+\def\bio@checkgap#1{{\@tempdima\z@ \@tempdimb\z@ \bio@tempdim\z@
+	\let\@elt\bio@cgelt \let\bio@vskip\bio@cgvskip #1\relax
+	\ifdim\@tempdima>\bio@maxgap \global\bio@maxgap\@tempdima \fi
+	\ifdim\bio@tempdim>\bio@lastgap \global\bio@lastgap\bio@tempdim \fi}}
+\def\bio@cgvskip#1{\advance\bio@tempdim#1\relax
+	\ifdim\bio@tempdim>\@tempdimb \@tempdimb\bio@tempdim\fi}
+\def\bio@cgelt#1{\@tempdima\@tempdimb \bio@tempdim\z@}
+\def\bio@popstack\@elt#1#2\@nil{\edef\bio@bstack{#2}\bio@ipopstack#1}
+\def\bio@ipopstack#1#2#3#4#5{\def\bio@left{#1}\def\bio@right{#2}%
+	\def\bio@leftx{#3}\def\bio@rightx{#4}\bio@hX#5\relax}
+\def\bio@pushstack{\def\bio@bstackx{}%
+	\expandafter\bio@ipushstack\bio@bstack\@elt\@nil}
+\def\bio@ipushstack\@elt#1{\def\@tempc{#1}%
+	\ifx\@tempc\@nnil \edef\bio@bstack{\bio@bstackx\bio@stackelt}%
+		\let\bio@nextC\relax \else
+	\bio@iipushstack#1\fi\bio@nextC}
+\def\bio@iipushstack#1#2#3#4#5{\ifdim#5>\bio@hX
+	\edef\bio@bstackx{\bio@bstackx\bio@stackelt
+		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
+		\let\bio@nextC\bio@pushstackend\else
+	\edef\bio@bstackx{\bio@bstackx
+		\@elt{{#1}{#2}{#3}{#4}{#5}}}%
+		\let\bio@nextC\bio@ipushstack\fi}
+\def\bio@pushstackend#1\@elt\@nil{\edef\bio@bstack{\bio@bstackx#1}}
+\def\bio@stackelt{\@elt{{\bio@left}{\bio@right}{\bio@leftx}{\bio@rightx}%
+	{\the\bio@hX}}}
+\def\bio@addheight#1#2{\def\@elt##1{\advance#1\dimen##1}#2\let\@elt\relax}
+\def\bio@car#1#2#3{\expandafter\bio@icar#3\@nil#1#2#3}
+\def\bio@icar\@elt#1#2\@nil#3#4#5{#3=\dimen#1\relax\def#4{#1}\def#5{#2}}
+
+
+%%%%%% Miscellaneous %%%%%%
+
+\flushbottom
+
+\ifDS@english
+\hbadness9999 \tolerance9999
+\else
+\hbadness5000 \tolerance5000
+\pretolerance\m@ne
+\fi
+
+\input{ipsjcommon.sty}
+
+\twocolumn
+
+\endinput
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjsort.bst	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,1285 @@
+% ipsjsort.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% ipsjsort.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
+% ipsjsort.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=					% 1.00(1)
+}
+
+STRINGS { s t }
+
+FUNCTION {is.kanji}
+{ is.kanji.str$ }					% 1.00(2), 2.00(1)
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { duplicate$ is.kanji				% 2.00(2)
+	{ "," * write$ }
+	{ ", " * write$ }
+      if$
+    }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =		% 1.00(1)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$						% 1.00(3)
+        { "{\em " swap$ * "}" * }			% 2.00(3)
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}					% 1.00(4), 2.00(4)
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
+	{ duplicate$ text.length$ #6 >
+	    { 't := }
+	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
+	  if$
+	}
+        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
+      if$
+      nameptr #1 >
+	{ namesleft #1 >
+	    { s is.kanji
+		{ "," }
+		{ ", " }
+	      if$
+	      * t * }
+	    { t "others" =
+		{ s is.kanji
+			{"ほか" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+			{"," * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {add.colon}					% 2.00(5)
+{ duplicate$ is.kanji
+    { "\:" * }						% 2.12(1)
+    { ": " * }
+  if$
+}
+
+FUNCTION {format.editors.inparen}			% 2.00(6)
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{",編" * } {", eds." *} if$
+	}
+	{ editor is.kanji
+		{",編" *}  {", ed." *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
+	}
+	{ editor is.kanji
+		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=				% 1.00(1)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+          ""						% 1.00(5)
+	}
+      if$
+    }
+    { "(" year ")" * * }				% 1.00(5)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }						% 1.00(6)
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}					% 1.00(7)
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}				% 1.00(8)
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { booktitle emphasize
+      editor empty$
+	'skip$
+	{ booktitle is.kanji
+	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
+	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "技術報告" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { " " number * * }
+  if$
+}
+
+FUNCTION {format.article.crossref}			% 2.00(8)
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ journal emphasize }				% 1.00(10)
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}			% 1.00(11)
+{ editor #1
+  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
+  format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ "ほか" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{"ほか" *} {" et al." * } if$
+	    }
+	    { editor is.kanji
+		{"・" * editor #2 "{ff}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}				% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { series emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+  volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
+    { duplicate$ is.kanji { "," } { ", "} if$ *
+      "Vol." * volume tie.or.space.connect
+    }
+  if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { journal emphasize output
+      format.vol.num.pages output			% 1.00(12)
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      format.chapter.pages output
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output					% 1.00(13)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output			% 1.00(13)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      booktitle "booktitle" required.argument
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+      format.pages output
+      format.date output				% 1.00(13)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "修士論文" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output						% 2.00(9)
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "博士論文" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  yomi empty$
+     'skip$
+     { yomi 's := }
+  if$
+
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/ipsjunsrt.bst	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,1135 @@
+% ipsjunsrt.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% ipsjunsrt.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
+% ipsjunsrt.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=					% 1.00(1)
+}
+
+STRINGS { s t }
+
+FUNCTION {is.kanji}
+{ is.kanji.str$ }					% 1.00(2), 2.00(1)
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { duplicate$ is.kanji				% 2.00(2)
+	{ "," * write$ }
+	{ ", " * write$ }
+      if$
+    }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =		% 1.00(1)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$						% 1.00(3)
+        { "{\em " swap$ * "}" * }			% 2.00(3)
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}					% 1.00(4), 2.00(4)
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
+	{ duplicate$ text.length$ #6 >
+	    { 't := }
+	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
+	  if$
+	}
+        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
+      if$
+      nameptr #1 >
+	{ namesleft #1 >
+	    { s is.kanji
+		{ "," }
+		{ ", " }
+	      if$
+	      * t * }
+	    { t "others" =
+		{ s is.kanji
+			{"ほか" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+			{"," * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {add.colon}					% 2.00(5)
+{ duplicate$ is.kanji
+    { "\:" * }						% 2.12(1)
+    { ": " * }
+  if$
+}
+
+FUNCTION {format.editors.inparen}			% 2.00(6)
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{",編" * } {", eds." *} if$
+	}
+	{ editor is.kanji
+		{",編" *}  {", ed." *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
+	}
+	{ editor is.kanji
+		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=				% 1.00(1)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+          ""						% 1.00(5)
+	}
+      if$
+    }
+    { "(" year ")" * * }				% 1.00(5)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }						% 1.00(6)
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}					% 1.00(7)
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}				% 1.00(8)
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { booktitle emphasize
+      editor empty$
+	'skip$
+	{ booktitle is.kanji
+	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
+	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "技術報告" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { " " number * * }
+  if$
+}
+
+FUNCTION {format.article.crossref}			% 2.00(8)
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ journal emphasize }				% 1.00(10)
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}			% 1.00(11)
+{ editor #1
+  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
+  format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ "ほか" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{"ほか" *} {" et al." * } if$
+	    }
+	    { editor is.kanji
+		{"・" * editor #2 "{ff}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}				% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { series emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+  volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
+    { duplicate$ is.kanji { "," } { ", "} if$ *
+      "Vol." * volume tie.or.space.connect
+    }
+  if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { journal emphasize output
+      format.vol.num.pages output			% 1.00(12)
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      format.chapter.pages output
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output					% 1.00(13)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output			% 1.00(13)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      booktitle "booktitle" required.argument
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+      format.pages output
+      format.date output				% 1.00(13)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "修士論文" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output						% 2.00(9)
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "博士論文" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/opencl.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,84 @@
+\section{Parallel Computing Platform}
+\subsection{OpenCL}
+OpenCL とは、Multi Core CPU と GPU のようなヘテロジニアスな環境を利用した並列計算を支援するフレームワークである。
+演算用のプロセッサ(本研究では GPU)上で動作するプログラム OpenCL C という言語で記述する。
+OpenCL C で記述したプログラムを GPU 上で実行させるために OpenCL Runtime API を利用する。
+OpenCL ではオペレーティングシステムなどが処理されるメイン CPU のことを host、GPGPU が可能なグラフィックボードなどのことを device と定義している。
+OpenCL Application は host 側のプログラムと device 側のプログラムが一体となって動作する。
+この device 上で動作するプログラムを特別に kernel と呼ぶ。
+
+\subsubsection{CommandQueue}
+OpenCL では、device の操作に CommandQueue を使用する。
+CommandQueue は device に Operation を送るための仕組みである。
+kernel の実行、input buffer の読み込み、output buffer への書き込みなどが Operation となる。
+
+CommandQueue に投入された Operation は投入された順序で実行される。
+CommandQueue を生成するときプロパティを指定することで Operation を投入された順序を無視して(out of order)実行することが可能になる。
+また複数の CommandQueue を生成し、device に投入することでも our of order で実行することが可能である。
+
+out of order で実行する場合、データの依存関係を設定する必要がある。各 Operation を発行する関数には event\_wait\_list と event を指定することができ、これらを利用してデータの依存関係を設定することができる。
+out of order 実行を可能にするプロパティをサポートしている device が少ないため、今回は複数の CommandQueue を用いる方法で実装を行なった。
+
+\subsubsection{OpenCL におけるデータ並列}
+3D グラフィックのような多次元のデータを処理する場合に高い並列度を保つには、データを分割して並列に実行する機能が必要である。
+これを OpenCL ではデータ並列と呼んでいる。
+OpenCL では次元数に対応する index があり、OpenCL は1つの記述から index の異なる複数の kernel を自動生成する。
+その添字を global\_id と呼ぶ。
+このとき入力されたデータは WorkItem という処理単位に分割される。
+
+OpenCL は WorkItem に対して、それぞれを識別する ID(global\_id)を割り当てる。
+kernel は get\_global\_id という API によって ID を取得し、取得した ID に対応するデータに対して処理を行うことでデータ並列を実現する。
+
+データ並列による kernel 実行の場合、clEnqueueNDRangeKernel を使用する。
+この関数の引数として WorkItem の数と次元数を指定することでデータ並列で実行することができる。
+
+\subsection{CUDA}
+CUDA とは、半導体メーカー NVIDIA 社が提供する GPU コンピューティング向けの総合開発環境でコンパイラ、ライブラリ、デバッガなどから構成される。プログラミング言語である CUDA C は C 言語ベースに拡張を加えたものである。
+
+CUDA には CUDA Runtime API と CUDA Driver API の2種類がある。
+Driver API は Runtime API に比べてプログラマが管理すべきリソースが多い。
+しかし、Runtime API より柔軟な処理を行うことができる。
+今回は Driver API を使用して実装した。
+
+CUDA も OpenCL と同様に、制御を行う CPU 側を host、GPU 側を device と定義している。
+また、device 上で動作するプログラムも OpenCL と同様に kernel と呼ぶ。
+
+\subsubsection{Stream}
+CUDA には OpenCL の CommandQueue と似たような仕組みとして Stream がある。
+Stream は host 側で発行された Operation を一連の動作として device で実行する。
+Stream に発行された Operation は発行された順序で実行されることが保証されている。
+異なる Stream に発行された Operation に依存関係が存在しない場合、Operation を並列に実行することができる。
+
+Stream は cuStreamCreate という Driver API で生成される。
+引数に Stream を指定しない API はすべて host 側をブロックする同期的な処理となる。
+複数の Stream を同時に走らせ Operation を並列に実行するためには非同期な処理を行う API を利用する必要がある。
+
+\subsubsection{CUDA におけるデータ並列}
+CUDA では OpenCL の WorkItem に相当する単位を thread と定義している。
+この thread をまとめたものを block と呼ぶ。
+CUDA でデータ並列による kernel 実行をする場合、cuLaunchKernel API を使用する。
+この関数は引数として各座標の block 数と各座標の block 1つ当たりの thread 数を指定することでデータ並列で実行できる。
+
+cuLaunckKernel で kernel を実行すると各 thread に対して block ID と thread ID が割り当てられる。
+CUDA には OpenCL とは異なり、ID を取得する API は存在しない。
+代わりに、kernel に組み込み変数が準備されており、それを参照し、対応するデータに対し処理を行うことでデータ並列を実現する。
+組み込み変数は以下の通りである。
+
+\begin{itemize}
+  \item uint3 blockDim
+  \item uint3 blockIdx
+  \item uint3 threadIdx
+\end{itemize}
+
+各組み込み変数はベクター型で、blockDim.x とすると x 座標の thread 数を参照することができる。
+blockIdx.x とすると x 座標の block ID が参照でき、threadIdx.x とすると x 座標の thread ID を参照することができる。
+blockDim.x * blockIdx.x + threadIdx.x で OpenCL の get\_global\_id(0) で取得できる ID に相当する ID を算出することができる。
+例として、ある kernel で get\_global\_id(0) の返り値が13の場合、CUDA では図:\ref{fig:calculate_index}のようになる。
+
+\begin{figure}[!h]
+  \begin{center}
+    \includegraphics[scale=0.4]{./images/culculate_index.pdf}
+  \end{center}
+  \caption{Calculate Index}
+  \label{fig:calculate_index}
+\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.aux	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,41 @@
+\relax 
+\citation{FFTonGPU}
+\citation{cell}
+\citation{cerium}
+\citation{AugThiNamWac11CCPE}
+\citation{gongo:2008a}
+\newlabel{fig:calculate_index}{{1}{3}}
+\newlabel{fig:createTask}{{2}{3}}
+\newlabel{fig:task_scheduler}{{3}{3}}
+\newlabel{test}{{1}{3}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}multiply}{3}}
+\newlabel{table:TaskManager_api}{{1}{4}}
+\newlabel{test}{{2}{4}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}task}{4}}
+\newlabel{table:taskAPI}{{2}{4}}
+\newlabel{table:dpi}{{3}{4}}
+\newlabel{test}{{3}{4}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}example}{4}}
+\newlabel{fig:gpuarch}{{4}{5}}
+\newlabel{fig:cpuarch}{{5}{5}}
+\newlabel{test}{{4}{5}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {4}multiply(OpenCL)}{5}}
+\newlabel{test}{{5}{5}}
+\@writefile{lol}{\contentsline {lstlisting}{\numberline {5}multiply(CUDA)}{5}}
+\citation{*}
+\bibstyle{ipsjunsrt}
+\bibdata{sigos}
+\bibcite{FFTonGPU}{1}
+\bibcite{cell}{2}
+\bibcite{cerium}{3}
+\bibcite{AugThiNamWac11CCPE}{4}
+\bibcite{gongo:2008a}{5}
+\newlabel{table:wordcount}{{4}{6}}
+\newlabel{table:fft}{{6.1}{6}}
+\bibcite{chiaki}{6}
+\bibcite{yutaka:os}{7}
+\bibcite{toma:2012a}{8}
+\bibcite{opencl}{9}
+\bibcite{opencl:ref}{10}
+\bibcite{cuda}{11}
+\gdef\ipsj@lastpage{7}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.bbl	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,50 @@
+\begin{thebibliography}{10}
+
+\bibitem{FFTonGPU}
+{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}:
+  性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ,情報処理学会論文誌
+  コンピューティングシステム (2008).
+
+\bibitem{cell}
+{Sony Corporation}: {Cell broadband engine architecture} (2005).
+
+\bibitem{cerium}
+: {SourceForge.JP: Cerium Rendering Engine},
+  {https//sourceforge.jp/projects/cerium/}.
+
+\bibitem{AugThiNamWac11CCPE}
+{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e}
+  Wacrenier}: {StarPU: A Unified Platform for Task Scheduling on Heterogeneous
+  Multicore Architectures}, {\em Concurrency and Computation: Practice and
+  Experience, Special Issue: Euro-Par 2009},  Vol.~23, pp.\ 187--198 (2011).
+
+\bibitem{gongo:2008a}
+宮國 渡,河野真治,神里 晃,杉山千秋\:Cell 用の Fine-grain Task Manager
+  の実装,情報処理学会 システムソフトウェアとオペレーティング・システム研究会
+  (2008).
+
+\bibitem{chiaki}
+{Chiaki SUGIYAMA}: {SceneGraph と StatePattern
+  を用いたゲームフレームワークの設計と実装} (2008).
+
+\bibitem{yutaka:os}
+ 金城裕,河野真治,多賀野海人,小林佑亮(琉球大学)\:ゲームフレームワークCerium
+  TaskManagerの改良,情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)
+  (2011).
+
+\bibitem{toma:2012a}
+當眞大千,河野真治\:Cerium Task Manager
+  におけるマルチコア上での並列実行機構の実装,第53回プログラミング・シンポジウム
+  (2012).
+
+\bibitem{opencl}
+{Aaftab Munshi, Khronos OpenCL Working Group}: {\em {The OpenCL Specification
+  Version 1.0}} (2007).
+
+\bibitem{opencl:ref}
+{Khronos OpenCL Working Group}: {\em {OpenCL 1.2 Reference Pages}} (2012).
+
+\bibitem{cuda}
+: {CUDA}, {https://developer.nvidia.com/category/zone/cuda-zone/}.
+
+\end{thebibliography}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.bib	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,82 @@
+@article{FFTonGPU,
+         author = "{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}",
+         title = "性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ",
+         journal = "情報処理学会論文誌 コンピューティングシステム",
+         month = "June",
+         year = 2008
+}
+                  
+@misc{cell,
+author = "{Sony Corporation}",
+title = "{Cell broadband engine architecture}",
+year = 2005
+}
+
+@misc{cerium,
+author = "",
+title = "{SourceForge.JP: Cerium Rendering Engine}",
+howpublished = "{https//sourceforge.jp/projects/cerium/}"
+}
+
+@Article{ AugThiNamWac11CCPE,
+author = "{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e} Wacrenier}",
+title = {{StarPU: A Unified Platform for Task Scheduling on Heterogeneous Multicore Architectures}},
+journal = {Concurrency and Computation: Practice and Experience, Special Issue: Euro-Par 2009},
+volume = 23,
+issue = 2,
+pages = {187--198},
+year = 2011,
+month = FEB,
+publisher = {John Wiley & Sons, Ltd.},
+doi = {10.1002/cpe.1631},
+url = {http://hal.inria.fr/inria-00550877},
+keywords = {StarPU}
+}
+
+@article{gongo:2008a,
+        author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋",
+        title = "Cell 用の Fine-grain Task Manager の実装",
+        journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会",
+        month = "April",
+        year = 2008
+}
+
+@journal{chiaki,
+author = "{Chiaki SUGIYAMA}",
+title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}",
+journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}",
+year = 2008
+}
+                  
+@article{yutaka:os,
+        author = "金城裕 and 河野真治 and 多賀野海人 and 小林佑亮(琉球大学)",
+        title = "ゲームフレームワークCerium TaskManagerの改良",
+        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)",
+        month = "April",
+        year = 2011
+}
+@article{toma:2012a,
+        author = "當眞 大千 and 河野 真治",
+        title = "Cerium Task Manager におけるマルチコア上での並列実行機構の実装",
+        journal = " 第53回プログラミング・シンポジウム",
+        month = "Jan",
+        year = 2012
+}
+
+@manual{opencl,
+author = "{Aaftab Munshi, Khronos OpenCL Working Group}",
+title ="{The OpenCL Specification Version 1.0}",
+year = 2007
+}
+
+@manual{opencl:ref,
+author = "{Khronos OpenCL Working Group}",
+title ="{OpenCL 1.2 Reference Pages}",
+year = 2012
+}
+
+@misc{cuda,
+title = "{CUDA}",
+howpublished = "{https://developer.nvidia.com/category/zone/cuda-zone/}"
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.blg	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,60 @@
+This is pBibTeX, Version 0.99d-j0.33 (utf8.euc) (TeX Live 2012)
+Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
+The top-level auxiliary file: sigos.aux
+The style file: ipsjunsrt.bst
+Database file #1: sigos.bib
+Warning--entry type for "chiaki" isn't style-file defined
+--line 44 of file sigos.bib
+Warning--there's no number and/or volumeFFTonGPU
+Warning--Missing required argument pages in FFTonGPU
+Warning--Missing required argument author in cerium
+Warning--there's no number and/or volumegongo:2008a
+Warning--Missing required argument pages in gongo:2008a
+Warning--there's no number and/or volumeyutaka:os
+Warning--Missing required argument pages in yutaka:os
+Warning--there's no number and/or volumetoma:2012a
+Warning--Missing required argument pages in toma:2012a
+Warning--Missing required argument author in cuda
+You've used 11 entries,
+            2207 wiz_defined-function locations,
+            581 strings with 5608 characters,
+and the built_in function-call counts, 1822 in all, are:
+= -- 114
+> -- 69
+< -- 1
++ -- 27
+- -- 16
+* -- 115
+:= -- 263
+add.period$ -- 11
+call.type$ -- 11
+change.case$ -- 0
+chr.to.int$ -- 0
+cite$ -- 21
+duplicate$ -- 122
+empty$ -- 198
+format.name$ -- 25
+if$ -- 424
+int.to.chr$ -- 0
+int.to.str$ -- 11
+missing$ -- 5
+newline$ -- 36
+num.names$ -- 9
+pop$ -- 50
+preamble$ -- 1
+purify$ -- 0
+quote$ -- 0
+skip$ -- 80
+stack$ -- 0
+substring$ -- 32
+swap$ -- 12
+text.length$ -- 11
+text.prefix$ -- 0
+top$ -- 0
+type$ -- 0
+warning$ -- 10
+while$ -- 12
+width$ -- 13
+write$ -- 74
+is.kanji.str$ -- 49
+(There were 11 warnings)
Binary file paper/sigos.dvi has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.log	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,300 @@
+This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex 2011.8.15)  22 APR 2014 21:38
+**sigos.tex
+(./sigos.tex
+pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2003/12/01> patch level 0)
+(./ipsjpapers.cls
+Document Class: ipsjpapers 2007/06/15 ver 2.12
+(./ipsjpapers.sty
+\old@latex@skip=\skip41
+\@Q=\dimen118
+\jfsize=\count81
+\jspaceskip=\dimen119
+\@mojihaba=\dimen120
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <9> on input line 546.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <6> on input line 546.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <5> on input line 546.
+\@abstractbox=\box41
+\@titlewidth=\dimen121
+\@eabstractbox=\box42
+\mkt@prevdepth=\dimen122
+\mkt@titlebox=\box43
+\mkt@cnta=\count82
+\mkt@cntb=\count83
+\mkt@sname=\count84
+\mkt@gname=\count85
+\mkt@boxa=\box44
+\mkt@namewidth=\dimen123
+\c@affi@footnote=\count86
+\c@affi@pfootnote=\count87
+\c@volpageoffset=\count88
+\c@volume=\count89
+\c@number=\count90
+\c@year=\count91
+\@leftcolumnfootnote=\box45
+\@rightcolumnfootnote=\box46
+\opt@baselineskip=\skip42
+\bio@picbox=\box47
+\bio@colht=\dimen124
+\bio@splitheight=\dimen125
+\bio@maxgap=\dimen126
+\bio@lastgap=\dimen127
+\bio@th=\dimen128
+\bio@lhA=\dimen129
+\bio@hA=\dimen130
+\bio@hB=\dimen131
+\bio@lh=\dimen132
+\bio@rh=\dimen133
+\bio@tempdim=\dimen134
+\bio@pbox=\insert233
+ (./ipsjcommon.sty
+\c@section=\count92
+\c@subsection=\count93
+\c@subsubsection=\count94
+\c@paragraph=\count95
+\c@subparagraph=\count96
+\bib@adjustheight=\dimen135
+\c@figure=\count97
+\c@table=\count98
+\cap@linewidth=\dimen136
+\cap@hsize=\dimen137
+\cap@prevgraf=\count99
+\cap@box=\box48
+\PF@fnotectr=\count100
+\PF@page=\count101
+\adj@boxa=\box49
+\adj@boxb=\box50
+\adj@height=\dimen138
+\adj@deadcycle=\count102
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <10> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 880.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <10> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 880.
+)))
+(/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
+
+(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
+\KV@toks@=\toks15
+)
+(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty
+Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)
+
+(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
+)
+(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg
+File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive
+)
+Package graphics Info: Driver file: dvipdfm.def on input line 81.
+
+(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def
+File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file
+))
+\Gin@req@height=\dimen139
+\Gin@req@width=\dimen140
+)
+(/usr/local/share/texmf/ptex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2004/03/15  ver 3.1  Verb mode for urls, etc.
+)
+(/usr/local/share/texmf-dist/tex/latex/listings/listings.sty
+\lst@mode=\count103
+\lst@gtempboxa=\box51
+\lst@token=\toks16
+\lst@length=\count104
+\lst@currlwidth=\dimen141
+\lst@column=\count105
+\lst@pos=\count106
+\lst@lostspace=\dimen142
+\lst@width=\dimen143
+\lst@newlines=\count107
+\lst@lineno=\count108
+\c@lstlisting=\count109
+\abovecaptionskip=\skip43
+\belowcaptionskip=\skip44
+\lst@maxwidth=\dimen144
+
+(/usr/local/share/texmf-dist/tex/latex/listings/lstpatch.sty
+File: lstpatch.sty 2004/10/17 1.3b (Carsten Heinz)
+)
+(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz)
+\c@lstnumber=\count110
+\lst@skipnumbers=\count111
+\lst@framebox=\box52
+)
+(/usr/local/share/texmf-dist/tex/latex/listings/listings.cfg
+File: listings.cfg 2004/09/05 1.3 listings configuration
+))
+Package: listings 2004/10/17 1.3b (Carsten Heinz)
+
+(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty
+File: lstlang1.sty 2004/09/05 1.3 listings language file
+)
+(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty
+File: lstlang1.sty 2004/09/05 1.3 listings language file
+)
+(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz)
+) (./dummy.tex)
+(./sigos.aux
+
+LaTeX Warning: Label `test' multiply defined.
+
+
+LaTeX Warning: Label `test' multiply defined.
+
+
+LaTeX Warning: Label `test' multiply defined.
+
+
+LaTeX Warning: Label `test' multiply defined.
+
+)
+\openout1 = `sigos.aux'.
+
+LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for JY1/mc/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Checking defaults for JT1/mc/m/n on input line 31.
+LaTeX Font Info:    ... okay on input line 31.
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <14.4> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 85.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <14.4> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 85.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <10.95> on input line 85.
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <8> on input line 85.
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <12> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 85.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <12> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 85.
+
+
+Class ipsjpapers Warning: \etitle is too wide. Break line(s) by \\ on input lin
+e 85.
+
+LaTeX Font Info:    External font `cmex10' loaded for size
+(Font)              <7> on input line 85.
+(./introduction.tex) (./opencl.tex
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <9> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 2.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <9> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 2.
+ [1
+
+
+] [2]
+File: ./images/culculate_index.pdf Graphic file (type eps)
+ <./images/culculate_index.pdf>
+Overfull \hbox (20.78407pt too wide) in paragraph at lines 80--81
+ [] 
+ []
+
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <7> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 82.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <7> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 82.
+) (./cerium.tex
+File: ./images/createTask.pdf Graphic file (type eps)
+ <./images/createTask.pdf>
+Overfull \hbox (0.70938pt too wide) in paragraph at lines 26--27
+ [] 
+ []
+
+
+LaTeX Warning: `!h' float specifier changed to `!ht'.
+
+File: ./images/scheduler.pdf Graphic file (type eps)
+<./images/scheduler.pdf> (./source/multiply.cc
+LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <8> not available
+(Font)              Font shape `JT1/gt/m/n' tried instead on input line 1.
+LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <8> not available
+(Font)              Font shape `JY1/gt/m/n' tried instead on input line 1.
+LaTeX Font Info:    Try loading font information for OMS+cmr on input line 2.
+
+(/usr/local/share/texmf-dist/tex/latex/base/omscmr.fd
+File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    Font shape `OMS/cmr/m/n' in size <8> not available
+(Font)              Font shape `OMS/cmsy/m/n' tried instead on input line 2.
+LaTeX Font Info:    Try loading font information for OML+cmr on input line 7.
+
+(/usr/local/share/texmf-dist/tex/latex/base/omlcmr.fd
+File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
+)
+LaTeX Font Info:    Font shape `OML/cmr/m/n' in size <8> not available
+(Font)              Font shape `OML/cmm/m/it' tried instead on input line 7.
+ [3])
+Overfull \hbox (71.1005pt too wide) in paragraph at lines 52--52
+[]\OT1/cmr/m/n/9 multiply 
+ []
+
+
+Overfull \hbox (17.26125pt too wide) in paragraph at lines 57--67
+ [] 
+ []
+
+(./source/multiply_task.cc)
+Overfull \hbox (53.93672pt too wide) in paragraph at lines 75--75
+[]\OT1/cmr/m/n/9 task 
+ []
+
+(./source/multiply_task_dp.cc)
+Overfull \hbox (70.3366pt too wide) in paragraph at lines 113--113
+[]\OT1/cmr/m/n/9 example 
+ []
+
+) (./cerium_gpu.tex [4]
+File: ./images/gpu_arch.pdf Graphic file (type eps)
+ <./images/gpu_arch.pdf>
+File: ./images/cpu_arch.pdf Graphic file (type eps)
+ <./images/cpu_arch.pdf>
+(./source/Multi.cl)
+Overfull \hbox (112.5995pt too wide) in paragraph at lines 51--51
+[]\OT1/cmr/m/n/9 multiply(OpenCL) 
+ []
+
+(./source/Multiply.cu)
+Overfull \hbox (105.65578pt too wide) in paragraph at lines 52--52
+[]\OT1/cmr/m/n/9 multiply(CUDA) 
+ []
+
+) (./benchmark.tex [5]) (./conclusion.tex) (./sigos.bbl [6]
+Overfull \hbox (58.50209pt too wide) in paragraph at lines 48--49
+[]\OT1/cmr/m/n/9 : CUDA, https://developer.nvidia.com/category/zone/cuda-
+ []
+
+) [7
+
+] (./sigos.aux)
+
+LaTeX Warning: There were multiply-defined labels.
+
+ ) 
+Here is how much of TeX's memory you used:
+ 2805 strings out of 94681
+ 37350 string characters out of 1169859
+ 170801 words of memory out of 1500000
+ 6044 multiletter control sequences out of 10000+50000
+ 18772 words of font info for 72 fonts, out of 1200000 for 2000
+ 566 hyphenation exceptions out of 8191
+ 33i,10n,68p,250b,1813s stack positions out of 5000i,500n,6000p,200000b,5000s
+
+Output written on sigos.dvi (7 pages, 53808 bytes).
Binary file paper/sigos.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/sigos.tex	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,106 @@
+\documentclass[techrep]{ipsjpapers}
+\usepackage[dvipdfm]{graphicx}
+\usepackage{url}
+\usepackage{listings}
+\lstset{%
+  language={C++},%使用言語
+  basicstyle={\small},%書体
+  commentstyle={\small\itshape},%コメントの書体
+  keywordstyle={\small\bfseries},%キーワードの書体
+  %identifierstyle={\small},%
+  %ndkeywordstyle={\small},%
+  stringstyle={\small},%文字列の書体
+  frame={trlb},%外枠
+  breaklines=true,%改行
+  columns=[l]{fullflexible},%
+  xrightmargin=0zw,%
+  xleftmargin=3zw,%
+  %numbers=none,%行番号の表示
+  %numberstyle={\scriptsize},%行番号の書体
+  %numbersep=1zw,%
+  %stepnumber=1,
+  lineskip=-0.5ex,%
+  captionpos=b,%キャプションの位置
+}
+\renewcommand{\lstlistingname}{Code}
+\input{dummy.tex} %% Font 
+
+% ユーザが定義したマクロなど.
+\makeatletter
+
+\begin{document}
+
+% 和文表題
+\title{並列プログラミングフレームワーク Cerium の\\ OpenCL, CUDA 対応}
+% 英文表題
+\etitle{Supporting OpenCL, CUDA in  Parallel programming framework Cerium}
+
+% 所属ラベルの定義
+\affilabel{1}{琉球大学大学院理工学研究科情報工学専攻 \\Interdisciplinary Information Engineering, Graduate School of Engineering and Science, University of the Ryukyus.}
+\affilabel{2}{琉球大学工学部情報工学科\\Information Engineering, University of the Ryukyus.}
+
+% 和文著者名
+\author{
+  小久保 翔平\affiref{1}\and
+  河野 真治\affiref{2}
+}
+
+% 英文著者名
+\eauthor{
+  Shohei KOKUBO\affiref{1}\and
+  Shinji KONO\affiref{2}
+}
+
+% 連絡先(投稿時に必要.製版用では無視される.)
+\contact{小久保 翔平\\
+        〒903-0213 沖縄県西原町千原1番地\\
+	琉球大学工学部情報工学科\\
+        TEL: (098)895-2221\qquad FAX: (098)895-8727\\
+        email: kokubo@cr.ie.u-ryukyu.ac.jp}
+
+% 和文概要
+\begin{abstract}
+  当研究室では、PS3, Linux 及び MacOS X 上で動作する並列プログラミングフレームワーク Cerium を提案している。
+  MacOS X 上で GPGPU を行うには、OpenCL または CUDA を用いる方法が考えられる。
+  OpenCL, CUDA の API に対応した API を Cerium に用意することでデータ並列に対応した。
+  タスク並列で実行する場合、データ転送がオーバーヘッドになる。
+  このオーバヘッドを解決するためには、kernel の実行中にデータ転送を行うことでデータ転送をオーバーラップする必要がある。
+  OpenCL では CommandQueue、CUDA では Stream を複数用いることでデータ転送や kernel の実行を並列に行うことができる。
+  複数の CommandQueue, Stream を用いて、自動で並列実行を行うスケジューラーを実装した。
+  実装したスケジューラーを WordCount、FFT を例題に測定し、考察を行う。
+\end{abstract}
+
+% 英文概要
+\begin{eabstract}
+  We are developing parallel programming framework Cerium, that is running on the PS3, Linux, Mac OS X and GPGPU.
+  As GPGPU support on Mac OS X, OpenCL or CUDA can be used in an API set.
+  Data Parallel on GPUGPU is also working on CPUs.
+  In Task Parallel, data transfer causes overhead.
+  To resolve this, pipeline data transfer is used both on GPGPU and Many Cores.
+  OpenCL and CUDA have  slightly different behavior on Data Parallel and out of order task execution.
+  In WordCount and FFT examples, we  show the different and its analysis.
+\end{eabstract}
+
+% 表題などの出力
+\maketitle
+
+% 本文はここから始まる
+
+\input{introduction}
+\input{opencl}
+\input{cerium}
+\input{cerium_gpu}
+\input{benchmark}
+\input{conclusion}
+
+\nocite{*}
+%\nocite{opencl}
+%\nocite{opencl:ref}
+%\nocite{opencl:applied}
+%\nocite{yutaka:os}
+\bibliographystyle{ipsjunsrt}
+\bibliography{sigos}
+%\bibliography{cerium,book}
+
+
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/Multi.cl	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,7 @@
+__kernel void
+multi(__global const long *params, __global const float* A, __global const float* B, __global float* C)
+{
+    // get index
+    long id = get_global_id(0);
+    C[id]=A[id]*B[id];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/multiply.cc	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,24 @@
+void
+multi_init(TaskManager *manager)
+{
+    A = new float[length];
+    B = new float[length];
+    C = new float[length];
+    for(int i=0; i<length; i++) {
+        A[i]=(float)(i+1000);
+        B[i]=(float)(i+1)/10.f;
+    }
+
+    // create task
+    HTask* multiply = manager->create_task(MULTIPLY_TASK);
+    // set cputype
+    multiply->set_cpu(spe_cpu);
+    // set indata
+    multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
+    multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
+    // set outdata
+    multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
+    multiply->set_param(0,(long)length);
+    // spawn task
+    multiply->iterate(length); 
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/multiply.cu	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,7 @@
+extern "C" {
+    __global__ void multi(long* params, float* A, float* B, float* C) {
+        // calculate index
+        int id = blockIdx.x * blockDim.x + threadIdx.x;
+        C[id]=A[id]*B[id];
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/multiply_task.cc	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,16 @@
+static int
+run(SchedTask *s)
+{
+    // get input
+    float* A = (float*)s->get_input(0);
+    float* B = (float*)s->get_input(1);
+    // get output
+    float* C = (float*)s->get_output(0);
+    // get parameter
+    long length = (long)s->get_param(0);
+
+    for(int i=0;i<length;i++)
+        C[i]=A[i]*B[i];
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/multiply_task_dp.cc	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,15 @@
+static int
+run(SchedTask *s)
+{
+    // get input
+    float* A = (float*)s->get_input(0);
+    float* B = (float*)s->get_input(1);
+    // get output
+    float* C = (float*)s->get_output(0);
+    // get index
+    long i = (long)s->x;
+
+    C[i]=A[i]*B[i];
+
+    return 0;
+}
Binary file presen/s6/images/concurrency.png has changed
Binary file presen/s6/images/createTask.png has changed
Binary file presen/s6/images/example-cat.jpg has changed
Binary file presen/s6/images/example-graph.png has changed
Binary file presen/s6/images/gpu_arch.png has changed
Binary file presen/s6/images/gpu_data_parallel.png has changed
Binary file presen/s6/images/iterate.png has changed
Binary file presen/s6/images/ndrange_arch.png has changed
Binary file presen/s6/images/parallel_exec.png has changed
Binary file presen/s6/images/scheduler.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/index.html	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,570 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset='utf-8'>
+    <title>sigos</title>
+
+    <!-- 
+         Notes on CSS media types used:
+         
+         1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+         2) screen     -> outline mode (display all slides-at-once on screen) 
+         3) print      -> print (and print preview)
+         
+         Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
+
+         Questions, comments?
+         - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow
+      -->
+
+    <!-- style sheet links -->
+    <link rel="stylesheet/less" href="themes/blank/projection.css.less"  media="screen,projection">
+    <link rel="stylesheet/less" href="themes/blank/screen.css.less"      media="screen">
+    <link rel="stylesheet/less" href="themes/blank/print.css.less"       media="print">
+
+    <link rel="stylesheet/less" href="themes/blank/blank.css.less"    media="screen,projection">
+
+    <!-- Notes about less css support
+         - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script)
+         - find more info about less.js online @ http://lesscss.org
+
+         ***** NOTE:
+         less.js browser script currently won’t work if you’re using Google Chrome
+         and the path to your page starts with "file:///" due to a known Chrome issue.
+         (In the developer/js console you will see:
+         XMLHttpRequest cannot load file:///../s6/shared/projection.css.less.
+         Cross origin requests are only supported for HTTP.)
+      -->
+
+    <!-- add js libs (less, jquery) -->
+    <script src="js/less-1.1.4.min.js"></script>
+    <script src="js/jquery-1.7.min.js"></script>
+
+    <!-- S6 JS -->
+    <script src="js/jquery.slideshow.js"></script>
+    <script src="js/jquery.slideshow.counter.js"></script>
+    <script src="js/jquery.slideshow.controls.js"></script>
+    <script src="js/jquery.slideshow.footer.js"></script>
+    <script src="js/jquery.slideshow.autoplay.js"></script>
+    <script>
+      $(document).ready( function() {
+      Slideshow.init();
+      
+      // Example 2: Start Off in Outline Mode
+      // Slideshow.init( { mode: 'outline' } );
+      
+      // Example 3: Use Custom Transition
+      // Slideshow.transition = transitionScrollUp;
+      // Slideshow.init();
+
+      // Example 4: Start Off in Autoplay Mode with Custom Transition
+      // Slideshow.transition = transitionScrollUp;
+      // Slideshow.init( { mode: 'autoplay' } );
+      } );
+    </script>
+
+    <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
+    <!--[if IE]>
+        <script src="js/jquery.microsoft.js"></script>
+        <![endif]-->
+
+  </head>
+  <body>
+    <div class="layout">
+      <div id="header"></div>
+      <div id="footer">
+        <div align="right">
+          <img src="images/concurrency.png" width="200">
+        </div>
+      </div>
+    </div>
+
+    <div class="presentation">
+
+      <!-- add slides here; example -->
+      
+      <div class='slide cover'>
+        <table width="90%" height="90%" border="0" align="center">
+          <tr>
+            <td><div align="center">
+                <h1><font color="#808db5">並列プログラミングフレームワーク Cerium の OpenCL, CUDA 対応</font></h1>
+            </div></td>
+          </tr>
+          <tr>
+            <td><div align="left">
+                Shohei KOKUBO
+                <script>
+                  var date = new Date();
+                  var year = date.getFullYear();
+                  var month = date.getMonth();
+                  var day = date.getDate();
+                  
+                  var monthList = new Array("January","February","March","April","May","June",
+                  "July","August","September","October","November","December");
+                  
+                  document.write(monthList[month]+" "+day+", "+year);
+                  
+                </script>
+                <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:300%;height:0.2em;">
+            </div></td>
+          </tr>
+        </table>
+      </div>
+      
+      <div class='slide'>
+        <h2>はじめに(1/2)</h2>
+        <p>
+          GPU, Cell, SpursEngine, Xeon Phi など様々なプロセッサが存在する。それぞれのプロセッサを利用するためには異なる API を用いる必要がある。それらの対応に多くの時間を取られてしまいプログラムの性能改善に集中することができない。
+        </p>
+        <p>
+          当研究室で開発・改良が行われている並列プログラミングフレームワーク Cerium は様々なプロセッサを統合して扱えるフレームワークを目指してる。
+        </p>
+        <p>
+          Mac OS X 上で GPGPU を行うには、OpenCL または CUDA を利用する方法が考えれる。GPGPU では通常のマルチコア CPU とは<font color="red">異なる並列プログラミング</font>と<font color="red">特別なチューニング</font>が必要となる。そこで Cerium を用いてその差を吸収し、自動的なチューニングを可能にする。
+        </p>
+      </div>
+      
+      <div class='slide'>
+        <h2>はじめに(2/2)</h2>
+        <p>
+          GPU や Cell などメモリ空間が異なるプロセッサはデータ転送がオーバーヘッドとなるので、データ転送を効率的に行えるかどうかで処理時間が大きく変わる。
+        </p>
+        <p>
+          今回、Cerium に OpenCL, CUDA を用いた Scheduler を実装した。
+        </p>
+        <p>
+          Scheduler は<font color="red">自動でデータ転送をオーバーラップ</font>し、<font color="red">パイプライン処理</font>を行うように設計した。
+        </p>
+        <p>
+          
+        </p>
+      </div>
+
+      <div class='slide'>
+        <h2>GPU のアーキテクチャ</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/gpu_arch.png" style="height:350px"></td>
+              <td>
+                <p style="font-size:100%">
+                  CPU と GPU はメモリ空間が異なるのでメモリの共有ができない。データにアクセスするためには空間ごとコピーする必要がある。この転送がオーバーヘッドとなる。
+                </p>
+                <p style="font-size:100%">
+                  つまり、GPGPU では<font color="red">データ転送を頻繁に行う</font> Task は並列度が低くなる。
+                </p>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+      
+      <div class='slide'>
+        <h2>データ転送</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/gpu_data_parallel.png" style="height:350px"></td>
+              <td>
+                <p style="font-size:100%">
+                  タスク並列で実行する場合、タスクが担当するデータを実行する数だけデータ転送を行う。
+                </p>
+                <p style="font-size:100%">
+                  データ並列で実行する場合、すべてのデータを一度で転送する。kernel で担当する範囲を計算し、その部分に対して処理を行う。データ転送の回数が少なくなるので、OpenCL, CUDA ではデータ並列による実行が推奨されている。
+                </p>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+      
+      <div class='slide'>
+        <h2>OpenCL, CUDA による GPGPU への対応</h2>
+        <p>
+          OpenCL では CommandQueue、CUDA では Stream をそれぞれ用いて GPU に命令を転送する。
+        </p>
+        <p>
+          CommandQueue, Stream に投入された命令は発行された順序で実行される。これらを複数用いることで<font color="red">命令を並列に実行する</font>ことが可能になる。
+        </p>
+        <p>
+          OpenCL および CUDA では Task を kernel という単位で記述する。
+        </p>
+        <p>
+          Cerium において、CPU/Cell 上で実行する場合と GPU 上で実行する場合、それぞれ<font color="red">ほぼ同じ形式の記述</font>が可能である。
+        </p>
+      </div>
+
+      <div class='slide'>
+        <h2>Multi Stream による並列実行</h2>
+        <p>
+          Stream に投入された命令は投入された順序で実行されることが保証される。
+        </p>
+        <p>
+          異なる Stream の命令の依存関係が解消され実行可能な状態の場合、命令は並列に実行される。これは OpenCL で CommandQueue を用いて実行する場合も同様である。
+        </p>
+        <img src="images/parallel_exec.png" style="width:800px">
+      </div>
+
+      <div class='slide'>
+        <h2>kernel の記述</h2>
+        <p>
+          2つの input の積を取り、output に返す例題 Multiply 
+        </p>
+        <pre style="font-size:70%">
+// MultiCore CPU
+static int
+run(SchedTask *s)
+{
+    float* A = (float*)s->get_input(0);
+    float* B = (float*)s->get_input(1);
+    float* C = (float*)s->get_output(0);
+
+    long i = (long)s->x;
+
+    C[i]=A[i]*B[i];
+    return 0;
+}</pre>
+<pre class="code" style="font-size:70%">
+// OpenCL
+__kernel void
+multi(__global const long *params, __global const float* A, __global const float* B, __global float* C)
+{
+    long id = get_global_id(0);
+    C[id]=A[id]*B[id];
+}</pre>
+<pre class="code" style="font-size:70%">
+// CUDA
+extern "C" {
+    __global__ void multi(long* params, float* A, float* B, float* C) {
+        int id = blockIdx.x * blockDim.x + threadIdx.x;
+        C[id]=A[id]*B[id];
+    }
+}</pre>
+<p>
+  修飾子などが多少異なるが、ほぼ同じ形式で記述できる。
+</p>
+</div>
+
+      <div class='slide'>
+        <h2>データ並列</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/ndrange_arch.png" style="height:350px"></td>
+              <td>
+                <p style="font-size:100%">
+                  3D グラフィックのような多次元のデータを処理する場合に高い並列度を保つには、データを分割して並列に実行する機能が必要である。
+                </p>
+                <p style="font-size:100%">
+                  これを OpenCL, CUDA ではデータ並列と呼んでいる。
+                </p>
+                <p style="font-size:100%">
+                  1つの記述から ID の異なる複数の kernel を自動生成する。OpenCL では get_global_id 関数、CUDA では組み込み変数の blockDim, blockIdx, threadIdx を参照することで index を取得することができ、index から担当する範囲を決定し処理を行う。
+                </p>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>Cerium Task Manager(1/2)</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/createTask.png" style="height:350px"></td>
+              <td>
+                <p style="font-size:100%">
+                  TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。
+                </p>
+                <p style="font-size:100%">
+                  ActiveTaskList に移された Task は依存関係が存在しないのでどのような順序で実行しても問題ない。
+                </p>
+                <p style="font-size:100%">
+                  Task は Scheduler に転送しやすい TaskList に変換され、Synchronized Queue である mail を通して担当する Scheduler に転送される。
+                </p>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>Cerium Task Manager(2/2)</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/scheduler.png" style="height:300px"></td>
+              <td>
+                <p style="font-size:100%">
+                  Scheduler ではパイプラインで Task が処理される。
+                </p>
+                <p style="font-size:100%">
+                  Task が終了すると Scheduler から TaskManager に mail を通して通知される。
+                </p>
+                <p style="font-size:100%">
+                  通知に従って依存関係が処理され、再び TaskManager から Schdueler に Task が転送される。
+                </p>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>Cerium におけるデータ並列のための API(1/2)</h2>
+        <table border="0" cellpadding="0" cellspacing="0">
+          <tbody>
+            <tr>
+              <td><img src="images/iterate.png" style="height:300px"></td>
+              <td>
+                <p style="font-size:100%">
+                  Task に ID と input/output data を割り当てる「iterate」という API を実装した。
+                </p>
+                <ul>
+                  <li style="font-size:100%">iterate</li>
+                  <ul>
+                    <li style="font-size:100%">1つの記述から複数の Task を生成する。</li>
+                    <li style="font-size:100%">生成した複数の Task に ID と input/output data を割り当てる。</li>
+                    <li style="font-size:100%">Multi Core CPU でデータ並列を行う場合は SchedTask に index が設定されており、それを参照することで担当する範囲を決定し処理を行う。</li>
+                  </ul>
+                </ul>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>Cerium におけるデータ並列のための API(2/2)</h2>
+<pre class="code" style="font-size:90%">
+void
+HTask::iterate(long x, long y, long z) {
+    this->flag.dim_count = 1;
+    TaskList *tl = (TaskList*)rbuf;
+    for (;tl;tl=tl->next) {
+        tl->set_last(last);
+        tl->dim=1;
+        tl->x=x;
+        tl->y=y;
+        tl->z=z;
+    }
+    mimpl->spawn_task(this);
+}</pre>
+        <p>
+          iterate を使用するとデータ並列で実行する Task として登録される。この時点で TaskList にパラメータが設定され、TaskManager から Scheduler に転送される。
+        </p>
+      </div>
+
+      <div class='slide'>
+        <h2>ベンチマーク</h2>
+        <ul>
+          <li>測定環境</li>
+          <ul>
+            <li>OS:MacOS 10.9.2</li>
+            <li>CPU:2*2.66GHz 6-Core Intel Xeon</li>
+            <li>GPU:NVIDIA Quadro K5000 4096MB</li>
+            <li>Memory:16GB 1333MHz DDR3</li>
+            <li>Compiler:Apple LLVM version 5.1(clang-503.0.40)(based on LLVM 3.4svm)</li>
+          </ul>
+        </ul>
+        <ul>
+          <li>例題</li>
+          <ul>
+            <li>WordCount</li>
+            <li>FFT</li>
+          </ul>
+        </ul>
+      </div>
+      
+      <div class='slide'>
+        <h2>WordCount(1/2)</h2>
+        <table>
+          <tbody>
+            <tr>
+              <td> <!--  benchmark -->
+                <table  border="2" style="font-size:90%">
+                  <tbody>
+                    <tr>
+                      <td bgcolor="#8091B5"></td>
+                      <td style="text-align: center;">Time</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">1 CPU</td>
+                      <td style="text-align: right;">0.73s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">2 CPU</td>
+                      <td style="text-align: right;">0.38s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">4 CPU</td>
+                      <td style="text-align: right;">0.21s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">8 CPU</td>
+                      <td style="text-align: right;">0.12s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">OpenCL(no pipeline)</td>
+                      <td style="text-align: right; " bgcolor="#ffffcc">48.32s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">OpenCL(pipeline)</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">46.74s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">CUDA(no pipeline)</td>
+                      <td style="text-align: right; " bgcolor="#ffffcc">55.71s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">CUDA(pipeline)</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">10.26s</td>
+                    </tr>
+                  </tbody>
+                </table>
+              </td>
+              <td>
+                <p style="font-size:100%">
+                  100MB のテキストファイルに対して<font color="red">タスク並列</font>で WordCount を行なった。
+                </p>
+                <p style="font-size:100%">
+                  パイプライン処理を行うことで CUDA では<font color="red">5.4倍</font>の性能向上が見られた。一方、OpenCL では性能向上が見られなかった。
+                </p>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+      
+      <div class='slide'>
+        <h2>WordCount(2/2)</h2>
+        <table>
+          <tbody>
+            <tr>
+              <td> <!--  benchmark -->
+                <table  border="2" style="font-size:90%">
+                  <tbody>
+                    <tr>
+                      <td bgcolor="#8091B5"></td>
+                      <td style="text-align: center;">Time</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">1 CPU</td>
+                      <td style="text-align: right;">0.73s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">2 CPU</td>
+                      <td style="text-align: right;">0.38s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">4 CPU</td>
+                      <td style="text-align: right;">0.21s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">8 CPU</td>
+                      <td style="text-align: right;">0.12s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">Data Parallel by OpenCL</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">0.38s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">Data Parallel by CUDA</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">0.71s</td>
+                    </tr>
+                  </tbody>
+                </table>
+              </td>
+              <td>
+                <p style="font-size:100%">
+                  100MB のテキストファイルに対して<font color="red">データ並列</font>で WordCount を行なった。
+                </p>
+                <p style="font-size:100%">
+                  データ並列による実行は 1CPU に対して OpenCL では<font color="red">1.9倍</font>、CUDA では<font color="red">ほぼ同等</font>という結果になった。
+                </p>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>FFT</h2>
+        <table>
+          <tbody>
+            <tr>
+              <td> <!--  benchmark -->
+                <table  border="2" style="font-size:90%">
+                  <tbody>
+                    <tr>
+                      <td bgcolor="#8091B5"></td>
+                      <td style="text-align: center;">Time</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">1 CPU</td>
+                      <td style="text-align: right;">0.48s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">2 CPU</td>
+                      <td style="text-align: right;">0.26s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">4 CPU</td>
+                      <td style="text-align: right;">0.17s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;">8 CPU</td>
+                      <td style="text-align: right;">0.11s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">OpenCL</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">0.09s</td>
+                    </tr>
+                    <tr>
+                      <td style="text-align: center;" bgcolor="#ffffcc">CUDA</td>
+                      <td style="text-align: right;" bgcolor="#ffffcc">0.21s</td>
+                    </tr>
+                  </tbody>
+                </table>
+              </td>
+              <td>
+                <p style="font-size:100%">
+                  512*512 の画像ファイルに対してフーリエ変換を行い、その後、High Pass Filter をかける例題である。
+                </p>
+                <p style="font-size:100%">
+                  1CPU に対して OpenCL では<font color="red">5.3倍</font>、CUDA では<font color="red">2.2倍</font>の性能向上が見られた。
+                </p>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+
+      <div class='slide'>
+        <h2>考察</h2>
+        <p>
+          パイプライン処理を行うことで CUDA では性能向上が確認できた。しかし、OpenCL では性能向上が見られなかった。OpenCL と CUDA をそれぞれ用いた Scheduler はほぼ同等の実装である。このことから OpenCL では CUDA とは異なるチューニングが必要になると考えられる。
+        </p>
+        <p>
+          データ並列による実行はタスク並列に比べ、どちらも性能向上が確認できた。しかし、WordCount, FFT の両方で CUDA は OpenCL に劣る結果となっている。CUDA によるデータ並列実行の機構を見直す必要がある。
+        </p>
+        <p>
+          GPU のみで演算を行う場合でも1つの Task 終了時にメインメモリにデータ転送を行なっている。これは不必要なデータ転送である。GPU 上に処理されたデータがあるので、それを利用するようにデータ転送の機構を改善する必要がある。
+      </div>
+
+      <div class='slide'>
+        <h2>まとめ</h2>
+        <ul>
+          <li>Cerium を OpenCL および CUDA に対応させた。</li>
+          <li>WordCount, FFT を例題として実装した Scheduler の評価を行なった。</li>
+          <li>OpenCL と CUDA で異なるチューニングが必要なことを確認した。</li>
+        </ul>
+        <h2>今後の課題</h2>
+        <ul>
+          <li>OpenCL, CUDA を用いた Scheduler の同期機構の見直し</li>
+          <li>データ転送機構の見直し</li>
+          <li>kernel の自動変換</li>
+        </ul>
+      </div>
+
+</div> <!-- presentation -->
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery-1.7.min.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,4 @@
+/*! jQuery v1.7 jquery.com | jquery.org/license */
+(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&&
+(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/<tbody/i,bc=/<|&#?\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\s*(?:[^=]|=\s*.checked.)/i,bh=/\/(java|ecma)script/i,bi=/^\s*<!(?:\[CDATA\[|\-\-)/,bj={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"
+,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\([^)]*\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\d+(?:px)?$/i,bw=/^-?\d/,bx=/^([\-+])=([\-+.\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.microsoft.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,31 @@
+
+
+$(document).ready( function() {
+
+    // 1) remove all content 
+    $( 'body > *' ).remove();
+          
+    // 2) show banner  
+    $( "<div>" ).html(
+       "<p>"
+       + "Microsoft's Internet Explorer browser has no built-in vector graphics machinery "
+       + "required for 'loss-free' gradient background themes."
+       + "</p>"       
+       + "<p>"
+       + "Please <span style='background: yellow'>upgrade to a better browser</span> "
+       + "such as <a href='http://getfirefox.com'>Firefox</a>, <a href='http://www.opera.com/download'>Opera</a>, "
+       + "<a href='http://google.com/chrome'>Chrome</a>, <a href='http://apple.com/safari/download'>Safari</a> or others "
+       + "with built-in vector graphics machinery and much more. "
+       + "(Learn more or post questions or comments "
+       + "at the <a href='http://slideshow.rubyforge.org'>Slide Show (S9)</a> project site. Thanks!)"
+       + "</p>"      
+     )
+     .css( {   
+       border: 'red solid thick',
+       padding: '1em',
+       fontFamily: 'sans-serif',
+       fontWeight: 'bold' } )
+     .prependTo( 'body' );    
+  }
+);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.autoplay.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,91 @@
+/***********
+ *
+ *  autoplay addon:
+ *
+ *   - use key-a/p/s to toggle autoplay (in projection mode)
+ */
+
+
+Slideshow.playInit = function()
+{
+  this.debug( 'calling playInit()' );
+
+  this.playInterval = null;
+}
+
+Slideshow.playStart = function()
+{
+  this.debug( 'calling playStart()' );
+
+  if( this.settings.mode == 'autoplay' )
+    this.playToggle();
+}
+
+
+Slideshow.playKeys = function( event, key )
+{
+  this.debug( 'calling playKeys()' );
+  
+  switch( key.which ) {
+    case 65: //a
+    case 80: //p
+    case 83: //s
+      this.playToggle();
+      break;
+  }
+}
+
+
+// ------------------------------------------------
+
+
+Slideshow.playWorker = function()
+{
+  this.debug( 'calling playWorker()' );
+
+  // suspend autoplay in outline view (just slideshow view)
+  if( !this.isProjection )
+    return;
+
+  // next slide/step, please
+  var csteps = this.steps[this.snum-1]; // current slide steps array 
+  
+  if( !csteps || this.incpos >= csteps.length ) {
+    if( this.snum >= this.smax )
+      this.goTo( 1 );   // reached end of show? start with 1st slide again (for endless cycle)
+    else
+      this.go(1);
+  }
+  else {
+    this.subgo(1);
+  }
+}
+
+
+Slideshow.playToggle = function()
+{
+  this.debug( 'calling playToggle()' );
+
+  if( this.playInterval )
+  {
+    this.debug( 'stopping autoplay' );
+    clearInterval( this.playInterval );
+    this.playInterval = null;
+  }
+  else
+  {
+    this.debug( 'starting autoplay' );
+    this.playInterval = setInterval( $.proxy( Slideshow.playWorker, this), 2000 );
+  }
+}
+
+// ------------------------------------------------
+
+Slideshow.playAddEvents = function()
+{
+  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.playInit, this ));
+  $( document ).on( 'slideshow.start',     $.proxy( Slideshow.playStart, this ));
+  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.playKeys, this ));
+}
+
+Slideshow.playAddEvents();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.controls.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,219 @@
+/***********
+ *
+ *  control addon:
+ *
+ *   adds toggle, prev slide, next slide links/buttons and jump list
+ *   - use key-c to toggle controls (in projection mode)
+ *
+ *   layout structure:
+ *
+ *  .layout
+ *    > #controls  (holding navigation controls)
+ *       > #navLinks
+ *          > #toggle
+ *          > #navList
+ *            > #jumplist
+ */
+
+
+Slideshow.ctrlInit = function()
+{
+  this.debug( 'calling ctrlInit()' );
+  
+  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
+
+  // todo: make layout into an id (not class?)
+  //  do we need or allow more than one element?
+       
+  // if no div.layout exists, create one
+  if( $( '.layout' ).length == 0 )
+    $( 'body' ).append( "<div class='layout'></div>");
+
+  $( '.layout' ).append( "<div id='controls'>" );
+ 
+  var $controls = $( '#controls' )
+    
+  $controls.html(  '<div id="navLinks">'
+     + '<a accesskey="t" id="toggle" href="#">&#216;<\/a>'
+     + '<a accesskey="z" id="prev" href="#">&laquo;<\/a>'
+     + '<a accesskey="x" id="next" href="#">&raquo;<\/a>'
+     + '<div id="navList"><select id="jumplist" /><\/div>'
+     + '<\/div>' );
+      
+  $controls.hover( function() { self.ctrlShow(); }, function() { self.ctrlHide(); });
+  $('#toggle').click( function() { self.toggle(); } );
+  $('#prev').click( function() { self.go(-1); } );
+  $('#next').click( function() { self.go(1); } );
+       
+  $('#jumplist').change( function() { self.goTo( parseInt( $( '#jumplist' ).val() )); } );
+
+  this.ctrlPopulateJumpList();
+}
+
+
+Slideshow.ctrlDebugOn = function()
+{
+  this.debug( 'calling ctrlDebugOn()' );
+  $( '#controls' ).addClass( 'debug' );
+}
+
+Slideshow.ctrlDebugOff = function()
+{
+  this.debug( 'calling ctrlDebugOff()' );
+  $( '#controls' ).removeClass( 'debug' );
+}
+
+Slideshow.ctrlKeys = function( event, key )
+{
+  this.debug( 'calling ctrlKeys()' );
+  
+  switch( key.which ) {
+    case 67: // c
+      this.ctrlToggle();
+      break;
+  }
+}
+
+Slideshow.ctrlChange = function()
+{
+  this.debug( 'calling ctrlChange()' );
+  this.ctrlUpdateJumpList();
+}
+
+// -----------------------------------------------------
+
+Slideshow.ctrlPopulateJumpList = function()
+{    
+  var self = this;   // NOTE: jquery binds this in .each to element
+
+  var list = $('#jumplist').get(0);
+    
+  this.$slides.each( function(i) {
+    var text = "-";   // untitled slide
+    
+    // todo: use titleSelector if user set??
+    // $(this).find( self.settings.titleSelector ).text();
+    
+    var $h1 = $( 'h1', this );
+    if( $h1.length > 0 )
+    {
+      text = $h1.first().text();
+    }
+    else   // try h2 
+    {
+      var $h2 = $( 'h2', this );
+      if( $h2.length > 0 )
+      {
+        text = $h2.first().text();
+      }
+      else  // try h3
+      {
+        var $h3 = $( 'h3', this );
+        if( $h3.length > 0 )
+        {
+          text = $h3.first().text();
+        }
+      }
+    }  
+    
+    list.options[list.length] = new Option( (i+1)+' : '+ text, (i+1) );
+  });
+}
+
+Slideshow.ctrlUpdateJumpList = function()
+{
+  $('#jumplist').get(0).selectedIndex = (this.snum-1);
+}
+
+Slideshow.ctrlShow = function()
+{
+  $( '#navLinks' ).css( 'visibility', 'visible' );
+}
+
+Slideshow.ctrlHide = function()
+{
+  $( '#navLinks' ).css( 'visibility', 'hidden' );
+}
+
+Slideshow.ctrlToggle = function()
+{
+  // toggle control panel 
+  var $navLinks = $( '#navLinks' );
+
+  if( $navLinks.css( 'visibility' ) != 'visible' )
+    $navLinks.css( 'visibility', 'visible' );
+  else
+    $navLinks.css( 'visibility', 'hidden' );
+}
+
+
+// ------------------------------------------------
+
+Slideshow.ctrlAddEvents = function()
+{
+  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.ctrlInit, this ));
+  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.ctrlDebugOn, this ));
+  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.ctrlDebugOff, this ));
+  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.ctrlKeys, this ));
+  $( document ).on( 'slideshow.change',    $.proxy( Slideshow.ctrlChange, this ));
+}
+
+Slideshow.ctrlAddStyles = function() {
+  this.debug( 'add builtin controls css via inline style elements' );
+  
+  var styleProjection =
+"<style media='screen,projection'>               \n"+
+"                                                \n"+
+" #controls.debug { background: #BBD; }          \n"+
+"                                                \n"+
+" #controls { position: fixed;                   \n"+
+"              left: 60%; bottom: 0;             \n"+
+"              width: 40%;                       \n"+
+"              z-index: 100;                     \n"+
+"              text-align: right;                \n"+
+"              font-weight: bold;                \n"+
+"              font-size: 120%;                  \n"+
+"            }                                   \n"+
+"                                                \n"+
+" #controls :focus { outline: 1px dotted white;} \n"+
+"                                                \n"+  
+" #controls #navLinks { text-align: right; margin: 0; visibility: hidden; } \n"+
+
+"                                                \n"+
+" #controls #navLinks a { padding: 0; margin: 0 0.5em; cursor: pointer; border: none; }  \n"+
+"                                                \n"+
+" #controls #navLinks :link,                     \n"+
+" #controls #navLinks :visited {text-decoration: none; } \n"+
+"                                                \n"+
+" #controls #navList #jumplist { background: white; color: black; } \n"+
+"</style>";
+
+   var styleScreen =
+"<style media='screen'>                      \n"+
+"/*********                                      \n"+
+" * make toggle button visible and reposition to upper right corner  \n"+
+" *   note: toogle button is nested inside #controls > #navLinks > #toogle \n"+
+" */                                             \n"+
+"                                                \n"+
+" #controls,                                     \n"+
+" #navLinks,                                     \n"+
+" #toggle    { display: block;                   \n"+
+"             visibility: visible;               \n"+
+"             margin: 0; padding: 0;             \n"+
+"          }                                     \n"+
+"                                                \n"+
+" #toggle { position: fixed;                     \n"+
+"          top: 0; right: 0;                     \n"+
+"          padding: 0.5em;                       \n"+
+"          border-left: 1px solid;               \n"+
+"          border-bottom: 1px solid;             \n"+
+"          background: white;                    \n"+
+"        }                                       \n"+
+"</style>";
+
+    $( 'head' ).append( styleProjection );
+    $( 'head' ).append( styleScreen );
+}
+
+Slideshow.ctrlAddStyles();
+Slideshow.ctrlAddEvents();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.counter.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,118 @@
+/***********
+ *
+ *  counter addon:
+ *
+ *   adds slide counter (e.g. 1/7)
+ *   - use key-n to toggle slide counter (in projection mode)
+ *
+ *   layout structure:
+ *
+ *  .layout
+ *    > #counter  (e.g. 1/7)
+ */
+
+
+Slideshow.counterInit = function()
+{
+  this.debug( 'calling counterInit()' );
+
+  // if no div.layout exists, create one
+  if( $( '.layout' ).length == 0 )
+    $( 'body' ).append( "<div class='layout'></div>");
+
+  $( '.layout' ).append( "<div id='counter'>" );
+ 
+  this.counterUpdate();
+}
+
+Slideshow.counterDebugOn = function()
+{
+  this.debug( 'calling counterDebugOn()' );
+  $( '#counter' ).addClass( 'debug' );
+}
+
+Slideshow.counterDebugOff = function()
+{
+  this.debug( 'calling counterDebugOff()' );
+  $( '#counter' ).removeClass( 'debug' );
+}
+
+Slideshow.counterKeys = function( event, key )
+{
+  this.debug( 'calling counterKeys()' );
+  
+  switch( key.which ) {
+      case 78: // n
+        this.counterToggle();
+        break;
+  }
+} 
+
+Slideshow.counterChange = function()
+{
+  this.debug( 'calling counterChange()' );
+  this.counterUpdate();
+}
+
+// ------------------------------------------------
+
+Slideshow.counterUpdate = function()
+{ 
+  $( '#counter' ).html( this.snum + '/' + this.smax );
+}
+
+
+Slideshow.counterToggle = function()
+{
+  // toggle slide number/counter
+  
+  // todo/fix: note jquery sets inline css (e.g. display: block)
+  //   but css won't get scoped for media (e.g. projection, screen, etc)
+  //   thus, css changes "spill over" to all media types
+  
+  $( '#counter' ).toggle();
+}
+
+// ------------------------------------------------
+
+Slideshow.counterAddEvents = function()
+{
+  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.counterInit, this ));
+  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.counterDebugOn, this ));
+  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.counterDebugOff, this ));
+  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.counterKeys, this ));
+  $( document ).on( 'slideshow.change',    $.proxy( Slideshow.counterChange, this ));
+}
+
+Slideshow.counterAddStyles = function() {
+  this.debug( 'add builtin counter css via inline style elements' );
+
+   var styleProjection =
+"<style media='screen,projection'>                   \n"+
+"                                                    \n"+
+" #counter.debug { background: #FFC; }               \n"+
+"                                                    \n"+
+" #counter      { position: fixed;                   \n"+
+"                 left: 45%; bottom: 1em;            \n"+
+"                width: 10%;                         \n"+
+"                z-index: 10;                        \n"+
+"                text-align: center;                 \n"+
+"                font-size: 80%;                     \n"+
+"              }                                     \n"+
+"                                                    \n"+
+" #counter :link,                                    \n"+
+" #counter :visited {  text-decoration: none; }      \n"+
+"                                                    \n"+
+"</style>";
+
+   var styleScreen =
+"<style media='screen'>                    \n"+
+" #counter { display: none !important; }   \n"+
+"</style>";
+
+  $( 'head' ).append( styleProjection );
+  $( 'head' ).append( styleScreen     );
+}
+
+Slideshow.counterAddStyles();
+Slideshow.counterAddEvents();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.footer.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,82 @@
+/***********
+ *
+ *  footer/header addon:
+ *
+ *   adds footer/header
+ *   - use key-f to toggle footer/header (in projection mode)
+ *
+ *   layout structure:
+ *
+ *  .layout
+ *    > #header
+ *    > #footer
+ */
+
+
+Slideshow.footerDebugOn = function()
+{
+  this.debug( 'calling footerDebugOn()' );
+
+  $( '.layout #header,.layout header' ).addClass( 'debug' );
+  $( '.layout #footer,.layout footer' ).addClass( 'debug' );
+}
+
+Slideshow.footerDebugOff = function()
+{
+  this.debug( 'calling footerDebugOff()' );
+
+  $( '.layout #header,.layout header' ).removeClass( 'debug' );
+  $( '.layout #footer,.layout footer' ).removeClass( 'debug' );
+}
+
+Slideshow.footerKeys = function( event, key )
+{
+  this.debug( 'calling footerKeys()' );
+  
+  switch( key.which ) {
+      case 70: //f
+        this.footerToggle();
+        break;
+  }
+} 
+
+// ------------------------------------------------
+
+Slideshow.footerToggle = function()
+{
+  // todo/fix: note jquery sets inline css (e.g. display: block)
+  //   but css won't get scoped for media (e.g. projection, screen, etc)
+  //   thus, css changes "spill over" to all media types
+
+  // fix: add/remove Class hidden?? instead of toggle()
+
+  $( '.layout #footer, .layout footer').toggle(); 
+}
+
+// ------------------------------------------------
+
+Slideshow.footerAddEvents = function()
+{
+  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.footerDebugOn, this ));
+  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.footerDebugOff, this ));
+  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.footerKeys, this ));
+}
+
+Slideshow.footerAddStyles = function() {
+  this.debug( 'add builtin footer/header css via inline style elements' );
+  
+   var styleProjection =
+"<style media='screen,projection'>                   \n"+
+" .layout #footer.debug,                             \n"+
+" .layout  footer.debug  { background: #CCF; }       \n"+
+"                                                    \n"+
+" .layout #header.debug,                             \n"+
+" .layout  header.debug { background: #FCC; }        \n"+
+"</style>";
+
+  $( 'head' ).append( styleProjection );
+}
+
+
+Slideshow.footerAddStyles();
+Slideshow.footerAddEvents();
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,535 @@
+
+var Slideshow = {
+
+  settings: {
+    debug: true
+  },
+
+  isProjection: false,   // are we in projection (slideshow) mode (in contrast to screen (outline) mode)?     
+  snum:   1,             // current slide # (non-zero based index e.g. starting with 1)
+  smax:   1,             // max number of slides 
+  incpos: 0,             // current step in slide  
+  steps:   null,
+
+  $slides: null,
+  $stylesProjection: null,
+  $stylesScreen: null,
+
+  slideClasses: [ 'far-past', 'past', 'current', 'next', 'far-next' ]
+};
+
+
+/************************************
+ * lets you define your own "global" transition function
+ *   passes in a reference to from and to slide wrapped in jQuery wrapper
+ *
+ *  see jquery.slideshow.transition.js for more examples
+ */
+
+Slideshow.transition = function( $from, $to ) {
+  // do nothing here; by default lets use css3 for transition effects
+}
+
+
+Slideshow.debug = function( msg ) {
+  if( this.settings.debug && window.console && window.console.log  )
+       window.console.log( '[debug] ' + msg );
+}
+
+
+Slideshow.init = function( options ) {
+
+  this.settings = $.extend({
+    mode              : 'slideshow', // slideshow | outline | autoplay
+    titleSelector     : 'h1',      
+    slideSelector     : '.slide',   // dummy (not yet working)
+    stepSelector      : '.step',    // dummy (not yet working)
+    debug             :  false,
+    normalize         :  true       // normalize selectors (that is, allow aliases
+                                    //  e.g. build,action,etc. for step and so on)
+  }, options || {});
+
+  this.isProjection = false; // are we in projection (slideshow) mode (in contrast to screen (outline) mode)?     
+  this.snum = 1;      // current slide # (non-zero based index e.g. starting with 1)
+  this.smax = 1;      // max number of slides 
+  this.incpos = 0;    // current step in slide  
+  this.steps  = null;
+
+  if( this.settings.normalize == true )
+    this.normalize();     
+
+  this.$slides = $( '.slide' );
+      
+  this.smax = this.$slides.length;
+  
+  this.addSlideIds();
+  this.steps = this.collectSteps();
+  this.updateSlides(); // mark slides w/ far-past,past,current,next,far-next
+
+  // $stylesProjection  holds all styles (<link rel="stylesheet"> or <style> w/ media type projection)
+  // $stylesScreen      holds all styles (<link rel="stylesheet"> or <style> w/ media type screen)
+
+  // add workaround for chrome
+  //  use screen,projection instead of projection
+  //  (without projection inline style tag gets not parsed into a styleSheet accesible via JavaScript)
+
+  this.$stylesProjection = $( 'link[media*=projection], style[media*=projection]' ).not('[rel*=less]').not('[type*=less]');
+  this.$stylesScreen     = $( 'link[media*=screen], style[media*=screen]' ).not('[media*=projection]').not('[rel*=less]').not('[type*=less]') ;
+   
+  $( document ).trigger( 'slideshow.init' );  // fire init for addons
+ 
+  this.addClicker();
+  
+       
+  // opera is the only browser currently supporting css projection mode 
+  this.notOperaFix();
+
+  // store possible slidenumber from hash */
+  // todo: use regex to extract number
+  //    might be #slide1 or just #1
+ 
+  var gotoSlideNum = parseInt( window.location.hash.substring(1) );
+  this.debug( "gotoSlideNum=" + gotoSlideNum );
+
+  if( !isNaN( gotoSlideNum ))
+  {
+    this.debug( "restoring slide on (re)load #: " + gotoSlideNum );
+    this.goTo( gotoSlideNum );
+  }
+
+  if( this.settings.mode == 'outline' ) 
+    this.toggle();
+
+  $( document ).trigger( 'slideshow.start' );  // fire start for addons
+      
+  $( document ).on( 'keyup', $.proxy( Slideshow.keys, this ));
+} // end init() 
+ 
+ 
+Slideshow.normalize = function() {
+
+  // check for .presentation aliases, that is, .deck, .slides
+  $( '.deck, .slides' ).addClass( 'presentation' );
+
+  // add slide class to immediate children
+  // todo: use autoslide option that lets you turn on/off option?
+  $( '.presentation' ).children().addClass( 'slide' );
+
+  // todo: scope with .slide?? e.g  .slide .incremental
+  // todo: make removing "old" class an option??
+
+  // check for .step aliases, that is, .incremental, .delayed, .action, .build
+  $( '.incremental, .delayed, .action, .build' ).addClass( 'step' );
+
+  // check for .notes aliases, that is, .note, .handout
+  $( '.note, .handout' ).addClass( 'notes' );
+
+}
+
+Slideshow.notOperaFix = function() {
+   // 1) switch media type from projection to screen
+
+   var self = this;   // NOTE: jquery binds this in .each to element
+
+   this.$stylesProjection.each( function(i) {
+     var styleProjection = this;
+     // note: no longer used; workaround for chrome needs screen,projection to make it work (thus, no need to switch to screen)
+     // styleProjection.media = 'screen';
+     styleProjection.disabled = true;
+     
+     self.debug( "notOperaFix - stylesProjection["+i+"] switching media type from projection to screen" );
+   } );
+   
+   this.isProjection = false;
+   
+   // 2) disable screen styles and enable projection styles (thus, switch into projection mode)
+   this.toggle();
+   
+   // now we should be in project mode
+} // end notOperatFix()
+
+
+Slideshow.toggle = function() {
+  // todo: use settings.isProjection for state tracking
+  //  and change disable accordingly (plus assert that all styles are in the state as expected)
+
+  // toggle between projection (slide show) mode
+  //   and screen (outline) mode
+
+  var self = this;   // NOTE: jquery binds this in .each to element
+
+  this.$stylesProjection.each( function(i) {          
+     var styleProjection = this;
+     
+     styleProjection.disabled = !styleProjection.disabled;
+       
+     self.debug( "toggle - stylesProjection["+i+"] disabled? " + styleProjection.disabled );
+   });
+  
+  this.$stylesScreen.each( function(i) {          
+     var styleScreen = this;
+
+     styleScreen.disabled = !styleScreen.disabled;
+       
+     self.debug( "toggle - stylesScreen["+i+"] disabled? " + styleScreen.disabled );
+     
+     // update isProjection flag 
+     self.isProjection = styleScreen.disabled;
+   });
+  
+/*
+ * note: code no longer needed; using (adding/removing) css classes hide/show)
+ *
+
+  if( this.isProjection )
+  {
+    this.$slides.each( function(i) {
+      if( i == (self.snum-1) )
+        $(this).show();
+      else
+        $(this).hide();
+    });    
+  }
+  else
+  {
+    this.$slides.show();
+  }
+*/
+} // end toggle()
+
+  
+Slideshow.updatePermaLink = function()
+{
+  // todo: unify hash marks??; use #1 for div ids instead of #slide1? 
+  window.location.hash = '#'+ this.snum;
+}
+
+Slideshow.goTo = function( target )
+{
+ if( target > this.smax || target == this.snum )
+   return;
+
+ this.go( target - this.snum );
+}
+ 
+Slideshow.go = function( dir )
+{
+  this.debug( 'go: ' + dir );
+  
+  if( dir == 0 ) return;  /* same slide; nothing to do */
+
+  var cid = '#slide' + this.snum;   /* current slide (selector) id */
+  var csteps = this.steps[ this.snum-1 ];  /* current slide steps array */
+
+  /* remove all step and stepcurrent classes from current slide */
+  if( csteps.length > 0) {
+     $( csteps ).each( function() {
+       $(this).removeClass( 'step' ).removeClass( 'stepcurrent' );
+     } );
+   }
+
+  /* set snum to next slide */
+  this.snum += dir;
+  if( this.snum > this.smax ) this.snum = this.smax;
+  if( this.snum < 1 ) this.snum = 1;
+  
+  var nid = '#slide' + this.snum;  /* next slide (selector) id */
+  var nsteps = this.steps[this.snum-1]; /* next slide steps array */
+  
+	if( dir < 0 ) /* go backwards? */
+	{
+		this.incpos = nsteps.length;
+		/* mark last step as current step */
+		if( nsteps.length > 0 ) 
+			$( nsteps[this.incpos-1] ).addClass( 'stepcurrent' );		
+	}
+	else /* go forwards? */
+	{
+		this.incpos = 0;
+	  if( nsteps.length > 0 ) {
+		  $( nsteps ).each( function() {
+				$(this).addClass( 'step' ).removeClass( 'stepcurrent' );
+			} );
+		}
+	}	
+	
+  if( !(cid == nid) ) {
+    this.updateSlides();
+
+    this.debug( "transition from " + cid + " to " + nid );
+    this.transition( $( cid ), $( nid ) );
+
+    // only fire change event if slide changes
+    $( document ).trigger( 'slideshow.change', [$( cid ), $( nid )]);
+  }
+  
+  this.updatePermaLink();
+} // end go()
+
+
+Slideshow.updateSlideClass = function( $slide, className )
+{
+  if( className )
+    $slide.addClass( className );
+  
+  for( var i in this.slideClasses )
+  {
+    if( className != this.slideClasses[i] )
+      $slide.removeClass( this.slideClasses[i] );
+  }
+}
+
+Slideshow.updateSlides = function()
+{
+  var self = this;
+  this.$slides.each( function( i ) {
+    switch( i ) {
+      case (self.snum-1)-2:
+        self.updateSlideClass( $(this), 'far-past' );
+        break;
+      case (self.snum-1)-1:
+        self.updateSlideClass( $(this), 'past' );
+        break;
+      case (self.snum-1):
+        self.updateSlideClass( $(this), 'current' );
+        break;
+      case (self.snum-1)+1:
+        self.updateSlideClass( $(this), 'next' );
+        break;
+      case (self.snum-1)+2:
+        self.updateSlideClass( $(this), 'far-next' );
+        break;
+      default:
+        self.updateSlideClass( $(this) );
+        break;
+     }
+  });
+}
+
+
+
+Slideshow.subgo = function( dir )
+{
+   this.debug( 'subgo: ' + dir + ', incpos before: ' + this.incpos + ', after: ' + (this.incpos+dir) );
+	
+	var csteps = this.steps[this.snum-1]; /* current slide steps array */
+	
+	if( dir > 0)
+  {  /* go forward? */
+		if( this.incpos > 0 )
+      $( csteps[this.incpos-1] ).removeClass( 'stepcurrent' );
+		$( csteps[this.incpos] ).removeClass( 'step').addClass( 'stepcurrent' ); 
+		this.incpos++;
+	}
+  else
+  { /* go backwards? */
+		this.incpos--;
+		$( csteps[this.incpos] ).removeClass( 'stepcurrent' ).addClass( 'step' );
+		if( this.incpos > 0 )
+      $( csteps[this.incpos-1] ).addClass( 'stepcurrent' );
+	}
+} // end subgo()
+
+
+Slideshow.keys = function( key )
+{  
+  this.debug( "enter keys()" );
+  
+  if( !key ) {
+    key = event;
+    key.which = key.keyCode;
+  }
+  if( key.which == 84 ) {
+    this.toggle();  // toggle between project and screen css media mode 
+    return;
+  }
+  if( this.isProjection ) {
+    switch( key.which ) {
+      case 32: // spacebar
+      case 34: // page down
+      case 39: // rightkey
+      case 40: // downkey
+
+      var csteps = this.steps[this.snum-1]; /* current slide steps array */
+        
+      if( !csteps || this.incpos >= csteps.length ) {
+					this.go(1);
+				} else {
+					this.subgo(1);
+				}
+				break;
+			case 33: // page up
+			case 37: // leftkey
+			case 38: // upkey
+					
+					if( !this.steps[this.snum-1] || this.incpos <= 0 ) {
+					  this.go(-1);
+				  } else {
+					  this.subgo(-1);
+					}
+				  break;
+      case 36: // home
+				this.goTo(1);
+				break;
+			case 35: // end
+				this.goTo( this.smax );
+				break;   
+      case 68: // d
+        this.toggleDebug();
+        break;
+		}
+		$( document ).trigger( 'slideshow.keys', key );
+	}
+} // end keys()
+
+
+Slideshow.toggleDebug = function()
+{
+   this.settings.debug = !this.settings.debug;
+   this.doDebug();
+}
+
+Slideshow.doDebug = function()
+{
+   if( this.settings.debug == true )
+   {
+      $( document ).trigger( 'slideshow.debug.on' );
+   }
+   else
+   {
+      $( document ).trigger( 'slideshow.debug.off' );
+   }
+}
+
+Slideshow.collectStepsWorker = function(obj)
+{
+  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
+  
+  var steps = []; 
+  if( !obj ) 
+    return steps;
+	
+  $(obj).children().each( function() {
+    if( $(this).hasClass( 'step' ) ) {
+		
+      self.debug( 'step found for ' + this.tagName );
+      $(this).removeClass( 'step' );
+
+      /* don't add enclosing list; instead add step class to all list items/children */
+      if( $(this).is( 'ol,ul' ) ) {
+	self.debug( '  ol or ul found; adding auto steps' );
+	$(this).children().addClass( 'step' );
+      }
+      else
+      {
+	steps.push( this )
+      }
+    }
+    steps = steps.concat( self.collectStepsWorker( this ) );
+  });
+	
+  return steps;
+} // end collectStepWorkers
+
+Slideshow.collectSteps = function()
+{
+  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
+	
+  var steps = [];
+
+  this.$slides.each( function(i) {
+    self.debug ( 'collectSteps for ' + this.id + ':' );
+    steps[i] = self.collectStepsWorker( this );
+  });
+	
+  $( steps ).each( function(i) {
+    self.debug( 'slide ' + (i+1) + ': found ' + this.length + ' steps' );	
+  });
+       
+  return steps;
+} // end collectSteps()
+
+
+Slideshow.addClicker = function()
+{
+  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
+
+  // if you click on heading of slide -> go to next slide (or next step)
+   
+  $( this.settings.titleSelector, this.$slides ).click( function( ev ) {
+    if(ev.which != 1) return;  // only process left clicks (e.g 1; middle and rightclick use 2 and 3)
+
+    if( !self.isProjection )  // suspend clicker in outline view (just slideshow view)
+      return;
+     
+    var csteps = self.steps[self.snum-1]; // current slide steps array 
+    if ( !csteps || self.incpos >= csteps.length ) 
+      self.go(1);
+    else 
+      self.subgo(1);
+  });
+   
+   
+   $( this.settings.titleSelector, this.$slides ).on('contextmenu', function() { 
+      if( !self.isProjection )  // suspend clicker in outline view (just slideshow view)
+        return;
+
+      var csteps = self.steps[self.snum-1]; // current slide steps array 
+      if ( !csteps || self.incpos >= csteps.length ) 
+         self.go(-1);
+      else 
+         self.subgo(-1);
+
+      return false;
+   } );       
+} // end addClicker()
+
+
+Slideshow.addSlideIds = function() {
+  this.$slides.each( function(i) {
+    this.id = 'slide'+(i+1);
+  });
+}
+
+
+Slideshow.addStyles = function() {
+  this.debug( 'add builtin css via inline style elements' );
+  
+   var styleProjection =
+"<style media='screen,projection'>           \n"+
+" .slide  { display: block;  }               \n"+
+" .notes  { display: none;   }               \n"+
+" .layout { display: block;  }               \n"+
+"</style>";
+
+   var styleScreen =
+"<style media='screen'>                      \n"+
+"/****                                           \n"+
+" * hide layout stuff (header, footer, navLinks, navList etc.) \n"+
+" */                                             \n"+
+"                                                \n"+
+" .layout * { display: none; }                   \n"+
+"</style>";
+
+   var stylePrint =
+"<style media='print'>                              \n"+
+"                                                   \n"+
+" .slide { display: block !important; }             \n"+
+" .layout, .layout * { display: none !important; }  \n"+
+"                                                   \n"+
+"/******                                            \n"+
+" * Turn on print-specific stuff/classes            \n"+
+" */                                                \n"+
+"                                                   \n"+
+" .extra { display: block !important; }             \n"+
+"</style>";
+
+   // note: use prepend (not append) to make sure this
+   // styles come first (and do not overrule user supplied styles)
+
+    $( 'head' ).prepend( styleProjection );
+    $( 'head' ).prepend( styleScreen );
+    $( 'head' ).prepend( stylePrint );
+}
+
+Slideshow.addStyles();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.ready.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,15 @@
+
+$(document).ready( function() {
+  Slideshow.init();
+    
+  // Example 2: Start Off in Outline Mode
+  // Slideshow.init( { mode: 'outline' } );
+    
+  // Example 3: Use Custom Transition
+  // Slideshow.transition = transitionScrollUp;
+  // Slideshow.init();
+
+  // Example 4: Start Off in Autoplay Mode with Custom Transition
+  // Slideshow.transition = transitionScrollUp;
+  // Slideshow.init( { mode: 'autoplay' } );
+} );
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/jquery.slideshow.transition.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,38 @@
+
+function transition( $from, $to ) {
+  $from.hide();
+  $to.show();
+}
+
+function transitionSlideUpSlideDown( $from, $to ) {
+  $from.slideUp( 500, function() { $to.slideDown( 1000 ); } );
+}
+
+function transitionFadeOutFadeIn( $from, $to ) {
+  $from.fadeOut( 500 );
+  $to.fadeIn( 500 );
+}
+
+/***********************
+ * sample custom transition using scrollUp effect
+ * inspired by Karl Swedberg's Scroll Up Headline Reader jQuery Tutorial[1]
+ * [1] http://docs.jquery.com/Tutorials:Scroll_Up_Headline_Reader
+ */
+
+function transitionScrollUp( $from, $to ) {
+  var cheight = $from.outerHeight();
+
+  // hide scrollbar during animation
+  $( 'body' ).css( 'overflow-y', 'hidden' );
+
+  $to.css( 'top', cheight+'px' );
+  $to.show();
+
+  $from.animate( {top: -cheight}, 'slow' );
+  $to.animate( {top: 0}, 'slow', function() {
+    $from.hide().css( 'top', '0px');
+
+    // restore possible scrollbar 
+    $( 'body' ).css( 'overflow-y', 'auto' );
+  }); 
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/js/less-1.1.4.min.js	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,16 @@
+//
+// LESS - Leaner CSS v1.1.4
+// http://lesscss.org
+// 
+// Copyright (c) 2009-2011, Alexis Sellier
+// Licensed under the Apache 2.0 License.
+//
+//
+// LESS - Leaner CSS v1.1.4
+// http://lesscss.org
+// 
+// Copyright (c) 2009-2011, Alexis Sellier
+// Licensed under the Apache 2.0 License.
+//
+(function(a,b){function u(a,b){var c="less-error-message:"+o(b),e=["<ul>",'<li><label>[-1]</label><pre class="ctx">{0}</pre></li>',"<li><label>[0]</label><pre>{current}</pre></li>",'<li><label>[1]</label><pre class="ctx">{2}</pre></li>',"</ul>"].join("\n"),f=document.createElement("div"),g,h;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p><a href="'+b+'">'+b+"</a> ",a.extract&&(h+="on line "+a.line+", column "+(a.column+1)+":</p>"+e.replace(/\[(-?\d)\]/g,function(b,c){return parseInt(a.line)+parseInt(c)||""}).replace(/\{(\d)\}/g,function(b,c){return a.extract[parseInt(c)]||""}).replace(/\{current\}/,a.extract[1].slice(0,a.column)+'<span class="error">'+a.extract[1].slice(a.column)+"</span>")),f.innerHTML=h,p([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #ee4444;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.ctx {","color: #dd4444;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}function t(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function s(a){return a&&a.parentNode.removeChild(a)}function r(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){t("browser doesn't support AJAX.");return null}}function q(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var g=r(),h=f?!1:d.async;typeof g.overrideMimeType=="function"&&g.overrideMimeType("text/css"),g.open("GET",a,h),g.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),g.send(null),f?g.status===0?c(g.responseText):e(g.status,a):h?g.onreadystatechange=function(){g.readyState==4&&i(g,c,e)}:i(g,c,e)}function p(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||o(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(h){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&g&&(t("saving "+e+" to cache."),g.setItem(e,a),g.setItem(e+":timestamp",c))}function o(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function n(b,c,e,f){var h=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=g&&g.getItem(i),k=g&&g.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=h.slice(0,h.lastIndexOf("/")+1)+i),q(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())p(l.css,b),c(null,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type})).parse(a,function(a,d){if(a)return u(a,i);try{c(d,b,{local:!1,lastModified:g,remaining:f}),s(document.getElementById("less-error-message:"+o(i)))}catch(a){u(a,i)}})}catch(h){u(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function m(a,b){for(var c=0;c<d.sheets.length;c++)n(d.sheets[c],a,b,d.sheets.length-(c+1))}function l(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(j)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){a[b].type="text/css",a[b].innerHTML=d.toCSS()})}function c(b){return a.less[b.split("/")[1]]}Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,e;typeof a=="undefined"?(d=exports,e=c("less/tree")):(typeof a.less=="undefined"&&(a.less={}),d=a.less,e=a.less.tree={}),d.Parser=function(a){function t(a){return typeof a=="string"?b.charAt(c)===a:a.test(j[f])?!0:!1}function s(a){var d,e,g,h,i,m,n,o;if(a instanceof Function)return a.call(l.parsers);if(typeof a=="string")d=b.charAt(c)===a?a:null,g=1,r();else{r();if(d=a.exec(j[f]))g=d[0].length;else return null}if(d){o=c+=g,m=c+j[f].length-g;while(c<m){h=b.charCodeAt(c);if(h!==32&&h!==10&&h!==9)break;c++}j[f]=j[f].slice(g+(c-o)),k=c,j[f].length===0&&f<j.length-1&&f++;return typeof d=="string"?d:d.length===1?d[0]:d}}function r(){c>k&&(j[f]=j[f].slice(c-k),k=c)}function q(){j[f]=g,c=h,k=c}function p(){g=j[f],h=c,k=c}var b,c,f,g,h,i,j,k,l,m=this,n=function(){},o=this.imports={paths:a&&a.paths||[],queue:[],files:{},mime:a&&a.mime,push:function(b,c){var e=this;this.queue.push(b),d.Parser.importer(b,this.paths,function(a){e.queue.splice(e.queue.indexOf(b),1),e.files[b]=a,c(a),e.queue.length===0&&n()},a)}};this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null;return l={imports:o,parse:function(d,g){var h,l,m,o,p,q,r=[],t,u=null;c=f=k=i=0,j=[],b=d.replace(/\r\n/g,"\n"),j=function(c){var d=0,e=/[^"'`\{\}\/\(\)]+/g,f=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,g=0,h,i=c[0],j,k;for(var l=0,m,n;l<b.length;l++){e.lastIndex=l,(h=e.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0])),m=b.charAt(l),f.lastIndex=l,!k&&!j&&m==="/"&&(n=b.charAt(l+1),(n==="/"||n==="*")&&(h=f.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0]),m=b.charAt(l)));if(m==="{"&&!k&&!j)g++,i.push(m);else if(m==="}"&&!k&&!j)g--,i.push(m),c[++d]=i=[];else if(m==="("&&!k&&!j)i.push(m),j=!0;else if(m===")"&&!k&&j)i.push(m),j=!1;else{if(m==='"'||m==="'"||m==="`")k?k=k===m?!1:k:k=m;i.push(m)}}if(g>0)throw{type:"Syntax",message:"Missing closing `}`",filename:a.filename};return c.map(function(a){return a.join("")})}([[]]),h=new e.Ruleset([],s(this.parsers.primary)),h.root=!0,h.toCSS=function(c){var d,f,g;return function(g,h){function n(a){return a?(b.slice(0,a).match(/\n/g)||"").length:null}var i=[];g=g||{},typeof h=="object"&&!Array.isArray(h)&&(h=Object.keys(h).map(function(a){var b=h[a];b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b]));return new e.Rule("@"+a,b,!1,0)}),i=[new e.Ruleset(null,h)]);try{var j=c.call(this,{frames:i}).toCSS([],{compress:g.compress||!1})}catch(k){f=b.split("\n"),d=n(k.index);for(var l=k.index,m=-1;l>=0&&b.charAt(l)!=="\n";l--)m++;throw{type:k.type,message:k.message,filename:a.filename,index:k.index,line:typeof d=="number"?d+1:null,callLine:k.call&&n(k.call)+1,callExtract:f[n(k.call)],stack:k.stack,column:m,extract:[f[d-1],f[d],f[d+1]]}}return g.compress?j.replace(/(\s)+/g,"$1"):j}}(h.eval);if(c<b.length-1){c=i,q=b.split("\n"),p=(b.slice(0,c).match(/\n/g)||"").length+1;for(var v=c,w=-1;v>=0&&b.charAt(v)!=="\n";v--)w++;u={name:"ParseError",message:"Syntax Error on line "+p,index:c,filename:a.filename,line:p,column:w,extract:[q[p-2],q[p-1],q[p]]}}this.imports.queue.length>0?n=function(){g(u,h)}:g(u,h)},parsers:{primary:function(){var a,b=[];while((a=s(this.mixin.definition)||s(this.rule)||s(this.ruleset)||s(this.mixin.call)||s(this.comment)||s(this.directive))||s(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(b.charAt(c)==="/"){if(b.charAt(c+1)==="/")return new e.Comment(s(/^\/\/.*/),!0);if(a=s(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new e.Comment(a)}},entities:{quoted:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==='"'||b.charAt(d)==="'"){f&&s("~");if(a=s(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new e.Quoted(a[0],a[1]||a[2],f)}},keyword:function(){var a;if(a=s(/^[A-Za-z-]+/))return new e.Keyword(a)},call:function(){var a,b,d=c;if(!!(a=/^([\w-]+|%)\(/.exec(j[f]))){a=a[1].toLowerCase();if(a==="url")return null;c+=a.length;if(a==="alpha")return s(this.alpha);s("("),b=s(this.entities.arguments);if(!s(")"))return;if(a)return new e.Call(a,b,d)}},arguments:function(){var a=[],b;while(b=s(this.expression)){a.push(b);if(!s(","))break}return a},literal:function(){return s(this.entities.dimension)||s(this.entities.color)||s(this.entities.quoted)},url:function(){var a;if(b.charAt(c)==="u"&&!!s(/^url\(/)){a=s(this.entities.quoted)||s(this.entities.variable)||s(this.entities.dataURI)||s(/^[-\w%@$\/.&=:;#+?~]+/)||"";if(!s(")"))throw new Error("missing closing ) for url()");return new e.URL(a.value||a.data||a instanceof e.Variable?a:new e.Anonymous(a),o.paths)}},dataURI:function(){var a;if(s(/^data:/)){a={},a.mime=s(/^[^\/]+\/[^,;)]+/)||"",a.charset=s(/^;\s*charset=[^,;)]+/)||"",a.base64=s(/^;\s*base64/)||"",a.data=s(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var a,d=c;if(b.charAt(c)==="@"&&(a=s(/^@@?[\w-]+/)))return new e.Variable(a,d)},color:function(){var a;if(b.charAt(c)==="#"&&(a=s(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new e.Color(a[1])},dimension:function(){var a,d=b.charCodeAt(c);if(!(d>57||d<45||d===47))if(a=s(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new e.Dimension(a[1],a[2])},javascript:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==="`"){f&&s("~");if(a=s(/^`([^`]*)`/))return new e.JavaScript(a[1],c,f)}}},variable:function(){var a;if(b.charAt(c)==="@"&&(a=s(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!!t(/^[@\w.%-]+\/[@\w.-]+/)&&(a=s(this.entity))&&s("/")&&(b=s(this.entity)))return new e.Shorthand(a,b)},mixin:{call:function(){var a=[],d,f,g,h=c,i=b.charAt(c);if(i==="."||i==="#"){while(d=s(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))a.push(new e.Element(f,d)),f=s(">");s("(")&&(g=s(this.entities.arguments))&&s(")");if(a.length>0&&(s(";")||t("}")))return new e.mixin.Call(a,g,h)}},definition:function(){var a,d=[],f,g,h,i;if(!(b.charAt(c)!=="."&&b.charAt(c)!=="#"||t(/^[^{]*(;|})/)))if(f=s(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=f[1];while(h=s(this.entities.variable)||s(this.entities.literal)||s(this.entities.keyword)){if(h instanceof e.Variable)if(s(":"))if(i=s(this.expression))d.push({name:h.name,value:i});else throw new Error("Expected value");else d.push({name:h.name});else d.push({value:h});if(!s(","))break}if(!s(")"))throw new Error("Expected )");g=s(this.block);if(g)return new e.mixin.Definition(a,d,g)}}},entity:function(){return s(this.entities.literal)||s(this.entities.variable)||s(this.entities.url)||s(this.entities.call)||s(this.entities.keyword)||s(this.entities.javascript)||s(this.comment)},end:function(){return s(";")||t("}")},alpha:function(){var a;if(!!s(/^\(opacity=/i))if(a=s(/^\d+/)||s(this.entities.variable)){if(!s(")"))throw new Error("missing closing ) for alpha()");return new e.Alpha(a)}},element:function(){var a,b,c;c=s(this.combinator),a=s(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||s("*")||s(this.attribute)||s(/^\([^)@]+\)/)||s(/^(?:\d*\.)?\d+%/);if(a)return new e.Element(c,a);if(c.value&&c.value[0]==="&")return new e.Element(c,null)},combinator:function(){var a,d=b.charAt(c);if(d===">"||d==="+"||d==="~"){c++;while(b.charAt(c)===" ")c++;return new e.Combinator(d)}if(d==="&"){a="&",c++,b.charAt(c)===" "&&(a="& ");while(b.charAt(c)===" ")c++;return new e.Combinator(a)}if(d===":"&&b.charAt(c+1)===":"){c+=2;while(b.charAt(c)===" ")c++;return new e.Combinator("::")}return b.charAt(c-1)===" "?new e.Combinator(" "):new e.Combinator(null)},selector:function(){var a,d,f=[],g,h;while(d=s(this.element)){g=b.charAt(c),f.push(d);if(g==="{"||g==="}"||g===";"||g===",")break}if(f.length>0)return new e.Selector(f)},tag:function(){return s(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||s("*")},attribute:function(){var a="",b,c,d;if(!!s("[")){if(b=s(/^[a-zA-Z-]+/)||s(this.entities.quoted))(d=s(/^[|~*$^]?=/))&&(c=s(this.entities.quoted)||s(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!s("]"))return;if(a)return"["+a+"]"}},block:function(){var a;if(s("{")&&(a=s(this.primary))&&s("}"))return a},ruleset:function(){var a=[],b,d,g;p();if(g=/^([.#:% \w-]+)[\s\n]*\{/.exec(j[f]))c+=g[0].length-1,a=[new e.Selector([new e.Element(null,g[1])])];else while(b=s(this.selector)){a.push(b),s(this.comment);if(!s(","))break;s(this.comment)}if(a.length>0&&(d=s(this.block)))return new e.Ruleset(a,d);i=c,q()},rule:function(){var a,d,g=b.charAt(c),k,l;p();if(g!=="."&&g!=="#"&&g!=="&")if(a=s(this.variable)||s(this.property)){a.charAt(0)!="@"&&(l=/^([^@+\/'"*`(;{}-]*);/.exec(j[f]))?(c+=l[0].length-1,d=new e.Anonymous(l[1])):a==="font"?d=s(this.font):d=s(this.value),k=s(this.important);if(d&&s(this.end))return new e.Rule(a,d,k,h);i=c,q()}},"import":function(){var a;if(s(/^@import\s+/)&&(a=s(this.entities.quoted)||s(this.entities.url))&&s(";"))return new e.Import(a,o)},directive:function(){var a,d,f,g;if(b.charAt(c)==="@"){if(d=s(this["import"]))return d;if(a=s(/^@media|@page/)||s(/^@(?:-webkit-)?keyframes/)){g=(s(/^[^{]+/)||"").trim();if(f=s(this.block))return new e.Directive(a+" "+g,f)}else if(a=s(/^@[-a-z]+/))if(a==="@font-face"){if(f=s(this.block))return new e.Directive(a,f)}else if((d=s(this.entity))&&s(";"))return new e.Directive(a,d)}},font:function(){var a=[],b=[],c,d,f,g;while(g=s(this.shorthand)||s(this.entity))b.push(g);a.push(new e.Expression(b));if(s(","))while(g=s(this.expression)){a.push(g);if(!s(","))break}return new e.Value(a)},value:function(){var a,b=[],c;while(a=s(this.expression)){b.push(a);if(!s(","))break}if(b.length>0)return new e.Value(b)},important:function(){if(b.charAt(c)==="!")return s(/^! *important/)},sub:function(){var a;if(s("(")&&(a=s(this.expression))&&s(")"))return a},multiplication:function(){var a,b,c,d;if(a=s(this.operand)){while((c=s("/")||s("*"))&&(b=s(this.operand)))d=new e.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,d,f,g;if(a=s(this.multiplication)){while((f=s(/^[-+]\s+/)||b.charAt(c-1)!=" "&&(s("+")||s("-")))&&(d=s(this.multiplication)))g=new e.Operation(f,[g||a,d]);return g||a}},operand:function(){var a,d=b.charAt(c+1);b.charAt(c)==="-"&&(d==="@"||d==="(")&&(a=s("-"));var f=s(this.sub)||s(this.entities.dimension)||s(this.entities.color)||s(this.entities.variable)||s(this.entities.call);return a?new e.Operation("*",[new e.Dimension(-1),f]):f},expression:function(){var a,b,c=[],d;while(a=s(this.addition)||s(this.entity))c.push(a);if(c.length>0)return new e.Expression(c)},property:function(){var a;if(a=s(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}},typeof a!="undefined"&&(d.Parser.importer=function(a,b,c,d){a.charAt(0)!=="/"&&b.length>0&&(a=b[0]+a),n({href:a,title:a,type:d.mime},c,!0)}),function(a){function d(a){return Math.min(1,Math.max(0,a))}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){a=a<0?a+1:a>1?a-1:a;return a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();e.s+=c.value/100,e.s=d(e.s);return b(e)},desaturate:function(a,c){var e=a.toHSL();e.s-=c.value/100,e.s=d(e.s);return b(e)},lighten:function(a,c){var e=a.toHSL();e.l+=c.value/100,e.l=d(e.l);return b(e)},darken:function(a,c){var e=a.toHSL();e.l-=c.value/100,e.l=d(e.l);return b(e)},fadein:function(a,c){var e=a.toHSL();e.a+=c.value/100,e.a=d(e.a);return b(e)},fadeout:function(a,c){var e=a.toHSL();e.a-=c.value/100,e.a=d(e.a);return b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;d.h=e<0?360+e:e;return b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});d=d.replace(/%%/g,"%");return new a.Quoted('"'+d+'"',d)},round:function(b){if(b instanceof a.Dimension)return new a.Dimension(Math.round(c(b)),b.unit);if(typeof b=="number")return Math.round(b);throw{error:"RuntimeError",message:"math functions take numbers as parameters"}}}}(c("less/tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){this.value.eval&&(this.value=this.value.eval(a));return this}}}(c("less/tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Call=function(a,b,c){this.name=a,this.args=b,this.index=c},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{message:"error evaluating function `"+this.name+"`",index:this.index}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("less/tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):a.length==8?(this.alpha=parseInt(a.substring(0,2),16)/255,this.rgb=a.substr(2).match(/.{2}/g).map(function(a){return parseInt(a,16)})):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16);return a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}}}}(c("less/tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)}}}(c("less/tree")),function(a){a.Directive=function(b,c){this.name=b,Array.isArray(c)?this.ruleset=new a.Ruleset([],c):this.value=c},a.Directive.prototype={toCSS:function(a,b){if(this.ruleset){this.ruleset.root=!0;return this.name+(b.compress?"{":" {\n  ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n  ")+(b.compress?"}":"\n}\n")}return this.name+" "+this.value.toCSS()+";\n"},eval:function(a){a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift();return this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("less/tree")),function(a){a.Element=function(b,c){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),this.value=c?c.trim():""},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+this.value},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","::":"::","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("less/tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(" ")}}}(c("less/tree")),function(a){a.Import=function(b,c){var d=this;this._path=b,b instanceof a.Quoted?this.path=/\.(le?|c)ss$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css$/.test(this.path),this.css||c.push(this.path,function(a){if(!a)throw new Error("Error parsing "+d.path);d.root=a})},a.Import.prototype={toCSS:function(){return this.css?"@import "+this._path.toCSS()+";\n":""},eval:function(b){var c;if(this.css)return this;c=new a.Ruleset(null,this.root.rules.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));return c.rules}}}(c("less/tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("less/tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value}}}(c("less/tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d){this.selector=new a.Selector(b),this.arguments=c,this.index=d},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments).rules),e=!0}catch(h){throw{message:h.message,index:h.index,stack:h.stack,call:this.index}}if(e)return d;throw{message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index}}throw{message:this.selector.toCSS().trim()+" is undefined",index:this.index}}},a.mixin.Definition=function(b,c,d){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},eval:function(b,c){var d=new a.Ruleset(null,[]),e,f=[];for(var g=0,h;g<this.params.length;g++)if(this.params[g].name)if(h=c&&c[g]||this.params[g].value)d.rules.unshift(new a.Rule(this.params[g].name,h.eval(b)));else throw{message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};for(var g=0;g<Math.max(this.params.length,c&&c.length);g++)f.push(c[g]||this.params[g].value);d.rules.unshift(new a.Rule("@arguments",(new a.Expression(f)).eval(b)));return(new a.Ruleset(null,this.rules.slice(0))).eval({frames:[this,d].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d;if(c<this.required)return!1;if(this.required>0&&c>this.params.length)return!1;d=Math.min(c,this.arity);for(var e=0;e<d;e++)if(!this.params[e].name&&a[e].eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0}}}(c("less/tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color)if(this.op==="*"||this.op==="+")e=d,d=c,c=e;else throw{name:"OperationError",message:"Can't substract or divide a color from a number"};return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("less/tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return f.value||f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("less/tree")),function(a){a.Rule=function(b,c,d,e){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+";"},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("less/tree")),function(a){a.Ruleset=function(a,b){this.selectors=a,this.rules=b,this._lookups={}},a.Ruleset.prototype={eval:function(b){var c=new a.Ruleset(this.selectors,this.rules.slice(0));c.root=this.root,b.frames.unshift(c);if(c.root)for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Definition&&(c.rules[d].frames=b.frames.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Call&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0,e;d<c.rules.length;d++)e=c.rules[d],e instanceof a.mixin.Definition||(c.rules[d]=e.eval?e.eval(b):e);b.frames.shift();return c},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c);return b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();if(g in this._lookups)return this._lookups[g];this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>1?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}});return this._lookups[g]=d},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":g.length>3?",\n":", "),d.push(h,(c.compress?"{":" {\n  ")+e.join(c.compress?"":"\n  ")+(c.compress?"}":"\n}\n"))),d.push(f);return d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value[0]==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("less/tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){return this.elements[0].value===a.elements[0].value?!0:!1},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("less/tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(!/^(?:https?:\/|file:\/|data:\/)?\//.test(b.value)&&c.length>0&&typeof a!="undefined"&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs
+.mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("less/tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("less/tree")),function(a){a.Variable=function(a,b){this.name=a,this.index=b},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{message:"variable "+e+" is undefined",index:this.index}}}}(c("less/tree")),c("less/tree").find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},c("less/tree").jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)};var f=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||f?"development":"production"),d.async=!1,d.poll=d.poll||(f?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&m(function(a,b,c){a&&p(a.toCSS(),b,c.lastModified)})},d.poll)):d.optimization=3;var g;try{g=typeof a.localStorage=="undefined"?null:a.localStorage}catch(h){g=null}var i=document.getElementsByTagName("link"),j=/^text\/(x-)?less$/;d.sheets=[];for(var k=0;k<i.length;k++)(i[k].rel==="stylesheet/less"||i[k].rel.match(/stylesheet/)&&i[k].type.match(j))&&d.sheets.push(i[k]);d.refresh=function(a){var b,c;b=c=new Date,m(function(a,d,e){e.local?t("loading "+d.href+" from cache."):(t("parsed "+d.href+" successfully."),p(a.toCSS(),d,e.lastModified)),t("css for "+d.href+" generated in "+(new Date-c)+"ms"),e.remaining===0&&t("css generated in "+(new Date-b)+"ms"),c=new Date},a),l()},d.refreshStyles=l,d.refresh(d.env==="development")})(window)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/blank.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,133 @@
+////////
+// variables for easy configuration
+//
+// (note: this is a less extendend css script, to learn more about less; see lesscss.org)
+
+@color:                  black;
+@color-step-hidden:      silver;
+
+@background-color-code:  #ffffa9;
+
+// -- gradient colors used for slides classified with cover | title
+
+@background-gradient-color1-cover: white;
+@background-gradient-color2-cover: white;
+
+// -- gradient colors for all other slides
+
+@background-gradient-color1: white;
+@background-gradient-color2: white;
+
+// --- font size
+
+@font-size-h1:     190%;    // 30pt / 40px    (assuming 100% => 12pt / 16px)
+@font-size-h2:     200%;    // 28pt / 37px
+@font-size-h3:     150%;    // 24pt / 32px
+@font-size-text:   130%;    // 18pt / 24px
+@font-size-code:   150%;    // 16pt / 22px
+@font-small-size:   100%;
+
+/////////////////////////////
+
+body { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;  }
+
+a:link,
+a:visited { color: @color; }
+
+
+.slide {
+
+  color: @color;
+  
+  h1 {   font-size: @font-size-h1;
+         color: white;
+         text-align: center;
+
+       &.fullscreen { position: absolute;
+                      top: 40%;
+                      width: 100%; }
+
+       // lets you create slides with no heading (that is, heading gets hidden but included in toc) 
+       &.hidden     { display: none; }
+      }
+  
+  h2 { font-size: @font-size-h2; background-color: #808db5; color:white; padding: 5px;}
+
+  h3 { font-size: @font-size-h3; }
+  name {
+     font-size: @font-size-h3;
+      background-color: #ffcc00;
+       &.fullscreen { position: absolute;
+                      top: 40%;
+                      width: 100%; }
+   }
+
+  .stepcurrent { color: @color; }
+  .step        { color: @color-step-hidden; }  // or hide next steps e.g. .step { visibility: hidden; } 
+}
+
+
+ul { list-style-type: square; }
+
+
+p, li, dt, dd, td{ font-size: @font-size-text; }
+th { font-size: @font-small-size;}
+
+
+pre {
+  font-family: 'Droid Sans Mono', 'Courier New', monospace;
+
+  font-size: 20px;
+
+  letter-spacing: -1px;
+
+  color: black;
+  background: rgb(240, 240, 240);
+  border: 1px solid rgb(224, 224, 224);
+  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
+  overflow: hidden;
+}
+
+code {
+  font-size: 95%;
+  font-family: 'Droid Sans Mono', 'Courier New', monospace;
+
+  color: black;
+}
+
+.footnote a:first-of-type  { text-decoration: none; }
+
+p.footnote { font-size: 88%; }
+
+.help {
+  p, td  { font-size: 88%; }
+}
+ 
+/******** 
+ * example gradient background using css3
+ */
+
+.slide {
+  background-image: -webkit-linear-gradient(top, @background-gradient-color1,
+                                                 @background-gradient-color2,
+                                                 @background-gradient-color1,
+                                                 @background-gradient-color2);
+  
+  background-image: -moz-linear-gradient(top, @background-gradient-color1,
+                                              @background-gradient-color2,
+                                              @background-gradient-color1,
+                                              @background-gradient-color2);
+                                              
+  &.cover, &.title {
+   background-image: -webkit-linear-gradient(top, @background-gradient-color1-cover,
+                                                 @background-gradient-color2-cover,
+                                                 @background-gradient-color1-cover,
+                                                 @background-gradient-color2-cover);
+  
+   background-image: -moz-linear-gradient(top, @background-gradient-color1-cover,
+                                              @background-gradient-color2-cover,
+                                              @background-gradient-color1-cover,
+                                              @background-gradient-color2-cover);
+
+  }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/o/print.css	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,33 @@
+/*********************************
 * CSS @media print rules (not projection or screen)
 *
 * (note: this is a less extendend css script, to learn more about less; see lesscss.org) 
 */body {
+  font-size: 12pt;
+}
+.slide {
+  page-break-inside: avoid;
+  /********************
   * Extra styling for first slide (title/cover slide)
   */
+}
+.slide h1 {
+  page-break-after: avoid;
+}
+.slide ul {
+  page-break-inside: avoid;
+}
+.slide h1 {
+  border-top: 2pt solid gray;
+  border-bottom: 1px dotted silver;
+}
+.slide:first-child {
+  margin-bottom: 3em;
+}
+.slide:first-child h1 {
+  font-size: 200%;
+  border: none;
+  margin: 0.5em 0 0.25em;
+}
+.slide:first-child h3 {
+  margin: 0;
+  padding: 0;
+}
+.slide:first-child h4 {
+  margin: 0 0 0.5em;
+  padding: 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/o/projection.css	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,120 @@
+/*********************************
+ * CSS @media projection rules (not print or screen)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ *
+ * (note: this is a less extendend css script, to learn more about less; see lesscss.org)
+ */
+html, body, .presentation {
+  margin: 0;
+  padding: 0;
+}
+.slide {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: 0;
+  padding: 2% 4% 0% 4%;
+  /* css note: order is => top right bottom left  */
+
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 100%;
+  height: 100%;
+  /* css note: lets use border-box; no need to add padding+border to get to 100% */
+
+  overflow-x: hidden;
+  overflow-y: auto;
+  z-index: 2;
+}
+/*****
+ *  layout block structure:
+ *
+ *  .layout
+ *    > #header
+ *    > #footer
+ */
+.layout #header, .layout header {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 0.5em;
+  z-index: 1;
+}
+.layout #footer, .layout footer {
+  position: fixed;
+  top: auto;
+  bottom: 0;
+  padding: 1em 0;
+  /* css note: order is => 1st top,bottom; 2nd right,left */
+
+  width: 100%;
+  height: 1em;
+  z-index: 5;
+  /* todo: move font-size and font-style to blank.css */
+  font-size: 100%;
+  font-weight: bold;
+  /* todo: move font-size and font-style to blank.css */
+
+}
+.layout #footer h1, .layout footer h1 {
+  display: block;
+  margin: 0;
+  padding: 0 1em;
+  font-size: 50%;
+}
+.layout #footer h2, .layout footer h2 {
+  display: block;
+  margin: 0;
+  padding: 0 1em;
+  font-size: 50%;
+  font-style: italic;
+}
+/*********************************
+ * general text-alignment classes
+ */
+.left {
+  text-align: left;
+}
+.center {
+  text-align: center;
+}
+.right {
+  text-align: right;
+}
+/*********************************
+ * general _absolute_ font-size classes
+ */
+.small {
+  font-size: 97%;
+}
+.x-small {
+  font-size: 88%;
+}
+.xx-small {
+  font-size: 82%;
+}
+.large {
+  font-size: 103%;
+}
+.x-large {
+  font-size: 112%;
+}
+.xx-large {
+  font-size: 118%;
+}
+/*********************************
+ * general _relative_ font-size classes
+ */
+.smaller {
+  font-size: 82%;
+}
+.larger {
+  font-size: 118%;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/o/screen.css	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,26 @@
+/*********************************
+ * CSS @media screen (not projection or print)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ *
+ * (note: this is a less extendend css script, to learn more about less; see lesscss.org)
+ */
+.slide {
+  margin: 1.5em 0 0;
+  border-top: 1px solid #888;
+}
+.slide h1 {
+  border-bottom: 1px solid #AAA;
+}
+.slide:first-child {
+  margin: 0;
+  border: none;
+}
+.slide:first-child h1 {
+  border: none;
+  padding-top: 1.5em;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/print.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,1 @@
+/*********************************
 * CSS @media print rules (not projection or screen)
 */
 
//////////////////////////////////////
// note: this is a less extendend css script, to learn more about less; see lesscss.org) 

body { font-size: 12pt; }


.slide {
   display: block !important;
   page-break-inside: avoid;
         
   h1   { page-break-after: avoid; }
   ul   { page-break-inside: avoid; }

   h1 { border-top: 2pt solid gray;
        border-bottom: 1px dotted silver;
      }
   
  /********************
   * Extra styling for first slide (title/cover slide)
   */

   &:first-child {
     margin-bottom: 3em; 

     h1 { font-size: 200%;
          border: none;
          margin: 0.5em 0 0.25em; }
     h3 { margin: 0; padding: 0;}
     h4 { margin: 0 0 0.5em; padding: 0;}
   }
}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/projection.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,97 @@
+/*********************************
+ * CSS @media projection rules (not print or screen)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+
+html,
+body,
+.presentation { margin: 0; padding: 0; }
+
+
+.slide { display: none;   /* note: only display current slide in projection mode */
+         position: absolute;
+         top: 0; left: 0; 
+         margin: 0;
+         padding: 2% 4% 0% 4%;         /* css note: order is => top right bottom left  */
+         -moz-box-sizing: border-box;
+         -webkit-box-sizing: border-box;
+         box-sizing: border-box;
+         width: 100%; height: 100%;    /* css note: lets use border-box; no need to add padding+border to get to 100% */
+         overflow-x: hidden; overflow-y: auto;
+         z-index: 2;
+       }
+
+.slide.current { display: block; }  /* note: only display current slide in projection mode */
+
+
+/*****
+ *  layout block structure:
+ *
+ *  .layout
+ *    > #header
+ *    > #footer
+ */
+
+.layout {
+  
+  #header, header {  position: fixed;
+                     top: 0; left: 0;
+                     width: 100%; height: 0.5em;
+                     z-index: 1;
+                   }
+   
+  #footer, footer {  position: fixed;
+           top: auto; bottom: 0;
+           padding: 1em 0;   /* css note: order is => 1st top,bottom; 2nd right,left */
+           width: 100%; height: 4em;
+           z-index: 5;
+    
+           /* todo: move font-size and font-style to blank.css */    
+           font-size: 100%; font-weight: bold; 
+ 
+           /* todo: move font-size and font-style to blank.css */
+
+           h1 { display: block; margin: 0; padding: 0 1em; font-size: 50%; }
+           h2 { display: block; margin: 0; padding: 0 1em; font-size: 50%; font-style: italic; }
+   }
+}
+
+
+
+/*********************************
+ * general text-alignment classes
+ */
+
+.left   { text-align: left;   }
+.center { text-align: center; }
+.right  { text-align: right;  }
+
+
+/*********************************
+ * general _absolute_ font-size classes
+ */
+
+.small    { font-size: 97%; }
+.x-small  { font-size: 88%; }
+.xx-small { font-size: 82%; }
+
+.large    { font-size: 103%; }
+.x-large  { font-size: 112%; }
+.xx-large { font-size: 118%; }
+
+/*********************************
+ * general _relative_ font-size classes
+ */
+ 
+.smaller  { font-size: 82%; }
+.larger   { font-size: 118%; }
+ 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank/screen.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,31 @@
+/*********************************
+ * CSS @media screen (not projection or print)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+.slide
+{
+  display: block !important;
+  margin: 1.5em 0 0;
+  border-top: 1px solid #888;
+
+  h1 { border-bottom: 1px solid #AAA; }
+  
+  
+  &:first-child {
+    margin: 0;
+    border: none;
+    
+    h1 {
+      border: none;
+      padding-top: 1.5em; }
+  }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank5/print.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,35 @@
+/*********************************
+ * CSS @media print rules (not projection or screen)
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org)
+
+body { font-size: 12pt; }
+
+
+.slide {
+   display: block !important;
+   page-break-inside: avoid;
+         
+   h1   { page-break-after: avoid; }
+   ul   { page-break-inside: avoid; }
+
+   h1 { border-top: 2pt solid gray;
+        border-bottom: 1px dotted silver;
+      }
+   
+  /********************
+   * Extra styling for first slide (title/cover slide)
+   */
+
+   &:first-child {
+     margin-bottom: 3em; 
+
+     h1 { font-size: 200%;
+          border: none;
+          margin: 0.5em 0 0.25em; }
+     h3 { margin: 0; padding: 0;}
+     h4 { margin: 0 0 0.5em; padding: 0;}
+   }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank5/projection.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,331 @@
+/*********************************
+ * CSS @media projection rules (not print or screen)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+
+html {
+  height: 100%;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+
+  height: 100%;
+  min-height: 740px;
+  
+  overflow-x: hidden;
+  overflow-y: auto;
+
+  background: rgb(215, 215, 215);
+  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+}
+
+.presentation {
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  
+  position: absolute;
+  -webkit-transform: translate3d(0, 0, 0);
+}
+
+.slide {
+  display: block;
+
+  position: absolute;
+  overflow: hidden;
+
+  width: 900px;
+  height: 700px;
+
+  left: 50%;
+  top: 50%;
+
+  margin-left: -450px;
+  margin-top: -350px;
+  
+  padding: 40px 60px;
+
+  box-sizing: border-box;       /* css note: lets use border-box; no need to add padding+border to get to 100% */
+  -o-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  background-color: white;
+
+  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
+  border: 1px solid rgba(0, 0, 0, .3);
+
+  transition: transform .3s ease-out;
+  -o-transition: -o-transform .3s ease-out;
+  -moz-transition: -moz-transform .3s ease-out;
+  -webkit-transition: -webkit-transform .3s ease-out;
+}
+
+
+.slide {
+  display: none;
+}
+
+.slide.far-past {
+  display: block;
+  transform: translate(-2040px);
+  -o-transform: translate(-2040px);
+  -moz-transform: translate(-2040px);
+  -webkit-transform: translate3d(-2040px, 0, 0);
+}
+.slide.past {
+  display: block;
+  transform: translate(-1020px);
+  -o-transform: translate(-1020px);
+  -moz-transform: translate(-1020px);
+  -webkit-transform: translate3d(-1020px, 0, 0);
+}
+
+.slide.current {
+  display: block;
+  transform: translate(0);
+  -o-transform: translate(0);
+  -moz-transform: translate(0);
+  -webkit-transform: translate3d(0, 0, 0);
+}
+
+.slide.next {
+  display: block;
+  transform: translate(1020px);
+  -o-transform: translate(1020px);
+  -moz-transform: translate(1020px);
+  -webkit-transform: translate3d(1020px, 0, 0);
+}
+
+.slide.far-next {
+  display: block;
+  transform: translate(2040px);
+  -o-transform: translate(2040px);
+  -moz-transform: translate(2040px);
+  -webkit-transform: translate3d(2040px, 0, 0);
+}
+
+
+/***********
+ * styles
+ */ 
+
+.slide h1 {          // use h1 for title 
+  margin-top: 200px;
+}
+
+
+.slide h2 {          // use h2 for section title/segue 
+  background: rgba(128, 141, 181, .75);
+  position: absolute;
+  bottom: 150px;
+}
+
+.slide h3 {          // use h3 for section title/segue. original 
+  background: rgba(128, 141, 181, .75);
+  padding-top: .2em;
+  padding-bottom: .3em;
+  margin-top: -.2em;
+  margin-left: -60px;
+  padding-left: 60px;
+  margin-right: -60px;
+  padding-right: 60px;
+}
+
+.slide h3-yellow {          // use h3 for section title/segue. original 
+  background: rgba(255, 204, 0, .75);
+  padding-top: .2em;
+  padding-bottom: .3em;
+  margin-top: -.2em;
+  margin-left: -60px;
+  padding-left: 60px;
+  margin-right: -60px;
+  padding-right: 60px;
+}
+
+.slide.fill h3 {
+  background: rgba(128, 141, 181, .75);
+  padding-top: .2em;
+  padding-bottom: .3em;
+  margin-top: -.2em;
+  margin-left: -60px;
+  padding-left: 60px;
+  margin-right: -60px;
+  padding-right: 60px;
+}
+
+.slide iframe {
+  width: 100%;
+
+  height: 620px;
+
+  background: white;
+  border: 1px solid rgb(192, 192, 192);
+  margin: -1px;
+  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
+  
+  overflow: hidden;
+}
+
+.slide h3 + iframe {
+  background: rgba(128, 141, 181, .75);
+  margin-top: 40px;
+  height: 540px;
+}
+
+.slide.fill iframe {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+
+  border: 0;
+  margin: 0;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  z-index: -1;
+}
+
+.slide.fill img {
+  position: absolute;
+  left: 0;
+  top: 0;
+  min-width: 100%;
+  min-height: 100%;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  z-index: -1;
+}
+
+
+.slide img.centered {
+  margin: 0 auto;
+  display: block;
+}
+
+
+table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+th {
+  text-align: left; 
+}
+
+td,
+th {
+  border: 1px solid rgb(224, 224, 224);
+  padding: 5px 10px;
+  vertical-align: top;
+}
+
+ul {
+  list-style-type: square;
+}
+
+.source {
+  position: absolute;
+  left: 60px;
+  top: 644px;
+  padding-right: 175px;
+  
+  font-size: 15px;
+  letter-spacing: 0;
+  line-height: 18px;
+}
+
+q {
+  font-size: 300%;  // 60px
+  display: block;
+  margin-left: 1em;
+}
+
+q::before {
+  content: '“';
+  color: rgb(192, 192, 192);
+  position: absolute;
+  display: inline-block;
+  margin-left: -1.1em;
+  width: 1em;
+  text-align: right;
+}
+
+q::after {
+  content: '”';
+  color: rgb(192, 192, 192);
+}
+
+
+div.author {
+  text-align: right;
+  
+  margin-top: 20px;
+  margin-right: 150px;
+  
+  font-size: 200%; // 40px; 
+}
+
+div.author::before {
+  content: '—';
+}
+
+
+/***********
+ * smaller
+ */
+ 
+.slide.smaller {
+
+  p, ul, table {  font-size: 80%; }    // 20px 
+
+  pre          {font-size: 60%;}    // 15px
+
+  q            {  font-size: 200%; }   // 40px 
+}
+
+
+
+
+/*********************************
+ * general text-alignment classes
+ */
+
+.left   { text-align: left;   }
+.center { text-align: center; }
+.right  { text-align: right;  }
+
+
+/*********************************
+ * general color classes
+ */
+
+.white {  color: white; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/blank5/screen.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,31 @@
+/*********************************
+ * CSS @media screen (not projection or print)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+.slide
+{
+  display: block !important;
+  margin: 1.5em 0 0;
+  border-top: 1px solid #888;
+
+  h1 { border-bottom: 1px solid #AAA; }
+  
+  
+  &:first-child {
+    margin: 0;
+    border: none;
+    
+    h1 {
+      border: none;
+      padding-top: 1.5em; }
+  }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/g5/print.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,35 @@
+/*********************************
+ * CSS @media print rules (not projection or screen)
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org)
+
+body { font-size: 12pt; }
+
+
+.slide {
+   display: block !important;
+   page-break-inside: avoid;
+         
+   h1   { page-break-after: avoid; }
+   ul   { page-break-inside: avoid; }
+
+   h1 { border-top: 2pt solid gray;
+        border-bottom: 1px dotted silver;
+      }
+   
+  /********************
+   * Extra styling for first slide (title/cover slide)
+   */
+
+   &:first-child {
+     margin-bottom: 3em; 
+
+     h1 { font-size: 200%;
+          border: none;
+          margin: 0.5em 0 0.25em; }
+     h3 { margin: 0; padding: 0;}
+     h4 { margin: 0 0 0.5em; padding: 0;}
+   }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/g5/projection.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,307 @@
+/*********************************
+ * CSS @media projection rules (not print or screen)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+
+html {
+  height: 100%;
+}
+
+body {
+  margin: 0;
+  padding: 0;
+
+  height: 100%;
+  min-height: 740px;
+  
+  overflow-x: hidden;
+  overflow-y: auto;
+
+  background: rgb(215, 215, 215);
+  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+}
+
+.presentation {
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  
+  position: absolute;
+  -webkit-transform: translate3d(0, 0, 0);
+}
+
+.slide {
+  display: block;
+
+  position: absolute;
+  overflow: hidden;
+
+  width: 900px;
+  height: 700px;
+
+  left: 50%;
+  top: 50%;
+
+  margin-left: -450px;
+  margin-top: -350px;
+  
+  padding: 40px 60px;
+
+  box-sizing: border-box;       /* css note: lets use border-box; no need to add padding+border to get to 100% */
+  -o-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  background-color: white;
+
+  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
+  border: 1px solid rgba(0, 0, 0, .3);
+
+  transition: transform .3s ease-out;
+  -o-transition: -o-transform .3s ease-out;
+  -moz-transition: -moz-transform .3s ease-out;
+  -webkit-transition: -webkit-transform .3s ease-out;
+}
+
+
+.slide {
+  display: none;
+}
+
+.slide.far-past {
+  display: block;
+  transform: translate(-2040px);
+  -o-transform: translate(-2040px);
+  -moz-transform: translate(-2040px);
+  -webkit-transform: translate3d(-2040px, 0, 0);
+}
+.slide.past {
+  display: block;
+  transform: translate(-1020px);
+  -o-transform: translate(-1020px);
+  -moz-transform: translate(-1020px);
+  -webkit-transform: translate3d(-1020px, 0, 0);
+}
+
+.slide.current {
+  display: block;
+  transform: translate(0);
+  -o-transform: translate(0);
+  -moz-transform: translate(0);
+  -webkit-transform: translate3d(0, 0, 0);
+}
+
+.slide.next {
+  display: block;
+  transform: translate(1020px);
+  -o-transform: translate(1020px);
+  -moz-transform: translate(1020px);
+  -webkit-transform: translate3d(1020px, 0, 0);
+}
+
+.slide.far-next {
+  display: block;
+  transform: translate(2040px);
+  -o-transform: translate(2040px);
+  -moz-transform: translate(2040px);
+  -webkit-transform: translate3d(2040px, 0, 0);
+}
+
+
+/***********
+ * styles
+ */ 
+
+.slide h1 {          // use h1 for title 
+  margin-top: 200px;
+}
+
+
+.slide h2 {          // use h2 for section title/segue 
+  position: absolute;
+  bottom: 150px;
+}
+
+.slide.fill h3 {
+  background: rgba(255, 255, 255, .75);
+  padding-top: .2em;
+  padding-bottom: .3em;
+  margin-top: -.2em;
+  margin-left: -60px;
+  padding-left: 60px;
+  margin-right: -60px;
+  padding-right: 60px;
+}
+
+.slide iframe {
+  width: 100%;
+
+  height: 620px;
+
+  background: white;
+  border: 1px solid rgb(192, 192, 192);
+  margin: -1px;
+  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
+  
+  overflow: hidden;
+}
+
+.slide h3 + iframe {
+  margin-top: 40px;
+  height: 540px;
+}
+
+.slide.fill iframe {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+
+  border: 0;
+  margin: 0;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  z-index: -1;
+}
+
+.slide.fill img {
+  position: absolute;
+  left: 0;
+  top: 0;
+  min-width: 100%;
+  min-height: 100%;
+
+  border-radius: 10px;
+  -o-border-radius: 10px;
+  -moz-border-radius: 10px;
+  -webkit-border-radius: 10px;
+
+  z-index: -1;
+}
+
+
+.slide img.centered {
+  margin: 0 auto;
+  display: block;
+}
+
+
+table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+th {
+  text-align: left; 
+}
+
+td,
+th {
+  border: 1px solid rgb(224, 224, 224);
+  padding: 5px 10px;
+  vertical-align: top;
+}
+
+ul {
+  list-style-type: square;
+}
+
+.source {
+  position: absolute;
+  left: 60px;
+  top: 644px;
+  padding-right: 175px;
+  
+  font-size: 15px;
+  letter-spacing: 0;
+  line-height: 18px;
+}
+
+q {
+  font-size: 300%;  // 60px
+  display: block;
+  margin-left: 1em;
+}
+
+q::before {
+  content: '“';
+  color: rgb(192, 192, 192);
+  position: absolute;
+  display: inline-block;
+  margin-left: -1.1em;
+  width: 1em;
+  text-align: right;
+}
+
+q::after {
+  content: '”';
+  color: rgb(192, 192, 192);
+}
+
+
+div.author {
+  text-align: right;
+  
+  margin-top: 20px;
+  margin-right: 150px;
+  
+  font-size: 200%; // 40px; 
+}
+
+div.author::before {
+  content: '—';
+}
+
+
+/***********
+ * smaller
+ */
+ 
+.slide.smaller {
+
+  p, ul, table {  font-size: 80%; }    // 20px 
+
+  pre          {  font-size: 60%; }    // 15px
+
+  q            {  font-size: 200%; }   // 40px 
+}
+
+
+
+
+/*********************************
+ * general text-alignment classes
+ */
+
+.left   { text-align: left;   }
+.center { text-align: center; }
+.right  { text-align: right;  }
+
+
+/*********************************
+ * general color classes
+ */
+
+.white {  color: white; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/presen/s6/themes/g5/screen.css.less	Mon May 12 03:37:44 2014 +0900
@@ -0,0 +1,31 @@
+/*********************************
+ * CSS @media screen (not projection or print)
+ *
+ * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
+ * 2) screen     -> outline mode (display all slides-at-once on screen) 
+ * 3) print      -> print (and print preview)
+ *
+ * toggle between projection/screen (that is, slideshow/outline) mode using t-key
+ */
+
+//////////////////////////////////////
+// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
+
+.slide
+{
+  display: block !important;
+  margin: 1.5em 0 0;
+  border-top: 1px solid #888;
+
+  h1 { border-bottom: 1px solid #AAA; }
+  
+  
+  &:first-child {
+    margin: 0;
+    border: none;
+    
+    h1 {
+      border: none;
+      padding-top: 1.5em; }
+  }
+}
\ No newline at end of file
--- a/sigos.aux	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-\relax 
-\citation{FFTonGPU}
-\citation{cell}
-\citation{cerium}
-\citation{AugThiNamWac11CCPE}
-\citation{gongo:2008a}
-\newlabel{fig:calculate_index}{{1}{3}}
-\newlabel{fig:createTask}{{2}{3}}
-\newlabel{fig:task_scheduler}{{3}{3}}
-\newlabel{test}{{1}{3}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}multiply}{3}}
-\newlabel{table:TaskManager_api}{{1}{4}}
-\newlabel{test}{{2}{4}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}task}{4}}
-\newlabel{table:taskAPI}{{2}{4}}
-\newlabel{table:dpi}{{3}{4}}
-\newlabel{test}{{3}{4}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}example}{4}}
-\newlabel{fig:gpuarch}{{4}{5}}
-\newlabel{fig:cpuarch}{{5}{5}}
-\newlabel{test}{{4}{5}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {4}multiply(OpenCL)}{5}}
-\newlabel{test}{{5}{5}}
-\@writefile{lol}{\contentsline {lstlisting}{\numberline {5}multiply(CUDA)}{5}}
-\citation{*}
-\bibstyle{ipsjunsrt}
-\bibdata{sigos}
-\bibcite{FFTonGPU}{1}
-\bibcite{cell}{2}
-\bibcite{cerium}{3}
-\bibcite{AugThiNamWac11CCPE}{4}
-\bibcite{gongo:2008a}{5}
-\newlabel{table:wordcount}{{4}{6}}
-\newlabel{table:fft}{{6.1}{6}}
-\bibcite{chiaki}{6}
-\bibcite{yutaka:os}{7}
-\bibcite{toma:2012a}{8}
-\bibcite{opencl}{9}
-\bibcite{opencl:ref}{10}
-\bibcite{cuda}{11}
-\gdef\ipsj@lastpage{7}
--- a/sigos.bbl	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-\begin{thebibliography}{10}
-
-\bibitem{FFTonGPU}
-{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}:
-  性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ,情報処理学会論文誌
-  コンピューティングシステム (2008).
-
-\bibitem{cell}
-{Sony Corporation}: {Cell broadband engine architecture} (2005).
-
-\bibitem{cerium}
-: {SourceForge.JP: Cerium Rendering Engine},
-  {https//sourceforge.jp/projects/cerium/}.
-
-\bibitem{AugThiNamWac11CCPE}
-{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e}
-  Wacrenier}: {StarPU: A Unified Platform for Task Scheduling on Heterogeneous
-  Multicore Architectures}, {\em Concurrency and Computation: Practice and
-  Experience, Special Issue: Euro-Par 2009},  Vol.~23, pp.\ 187--198 (2011).
-
-\bibitem{gongo:2008a}
-宮國 渡,河野真治,神里 晃,杉山千秋\:Cell 用の Fine-grain Task Manager
-  の実装,情報処理学会 システムソフトウェアとオペレーティング・システム研究会
-  (2008).
-
-\bibitem{chiaki}
-{Chiaki SUGIYAMA}: {SceneGraph と StatePattern
-  を用いたゲームフレームワークの設計と実装} (2008).
-
-\bibitem{yutaka:os}
- 金城裕,河野真治,多賀野海人,小林佑亮(琉球大学)\:ゲームフレームワークCerium
-  TaskManagerの改良,情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)
-  (2011).
-
-\bibitem{toma:2012a}
-當眞大千,河野真治\:Cerium Task Manager
-  におけるマルチコア上での並列実行機構の実装,第53回プログラミング・シンポジウム
-  (2012).
-
-\bibitem{opencl}
-{Aaftab Munshi, Khronos OpenCL Working Group}: {\em {The OpenCL Specification
-  Version 1.0}} (2007).
-
-\bibitem{opencl:ref}
-{Khronos OpenCL Working Group}: {\em {OpenCL 1.2 Reference Pages}} (2012).
-
-\bibitem{cuda}
-: {CUDA}, {https://developer.nvidia.com/category/zone/cuda-zone/}.
-
-\end{thebibliography}
--- a/sigos.bib	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-@article{FFTonGPU,
-         author = "{Yasuhiko OGATA, Toshio Endo, Naoya MARUYAMA, Satoshi MATSUOKA}",
-         title = "性能モデルに基づくCPU及びGPUを併用する効率的なFFTライブラリ",
-         journal = "情報処理学会論文誌 コンピューティングシステム",
-         month = "June",
-         year = 2008
-}
-                  
-@misc{cell,
-author = "{Sony Corporation}",
-title = "{Cell broadband engine architecture}",
-year = 2005
-}
-
-@misc{cerium,
-author = "",
-title = "{SourceForge.JP: Cerium Rendering Engine}",
-howpublished = "{https//sourceforge.jp/projects/cerium/}"
-}
-
-@Article{ AugThiNamWac11CCPE,
-author = "{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e} Wacrenier}",
-title = {{StarPU: A Unified Platform for Task Scheduling on Heterogeneous Multicore Architectures}},
-journal = {Concurrency and Computation: Practice and Experience, Special Issue: Euro-Par 2009},
-volume = 23,
-issue = 2,
-pages = {187--198},
-year = 2011,
-month = FEB,
-publisher = {John Wiley & Sons, Ltd.},
-doi = {10.1002/cpe.1631},
-url = {http://hal.inria.fr/inria-00550877},
-keywords = {StarPU}
-}
-
-@article{gongo:2008a,
-        author = "宮國 渡 and 河野 真治 and 神里 晃 and 杉山 千秋",
-        title = "Cell 用の Fine-grain Task Manager の実装",
-        journal = "情報処理学会 システムソフトウェアとオペレーティング・システム研究会",
-        month = "April",
-        year = 2008
-}
-
-@journal{chiaki,
-author = "{Chiaki SUGIYAMA}",
-title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}",
-journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}",
-year = 2008
-}
-                  
-@article{yutaka:os,
-        author = "金城裕 and 河野真治 and 多賀野海人 and 小林佑亮(琉球大学)",
-        title = "ゲームフレームワークCerium TaskManagerの改良",
-        journal = "情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS)",
-        month = "April",
-        year = 2011
-}
-@article{toma:2012a,
-        author = "當眞 大千 and 河野 真治",
-        title = "Cerium Task Manager におけるマルチコア上での並列実行機構の実装",
-        journal = " 第53回プログラミング・シンポジウム",
-        month = "Jan",
-        year = 2012
-}
-
-@manual{opencl,
-author = "{Aaftab Munshi, Khronos OpenCL Working Group}",
-title ="{The OpenCL Specification Version 1.0}",
-year = 2007
-}
-
-@manual{opencl:ref,
-author = "{Khronos OpenCL Working Group}",
-title ="{OpenCL 1.2 Reference Pages}",
-year = 2012
-}
-
-@misc{cuda,
-title = "{CUDA}",
-howpublished = "{https://developer.nvidia.com/category/zone/cuda-zone/}"
-}
-
--- a/sigos.blg	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-This is pBibTeX, Version 0.99d-j0.33 (utf8.euc) (TeX Live 2012)
-Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
-The top-level auxiliary file: sigos.aux
-The style file: ipsjunsrt.bst
-Database file #1: sigos.bib
-Warning--entry type for "chiaki" isn't style-file defined
---line 44 of file sigos.bib
-Warning--there's no number and/or volumeFFTonGPU
-Warning--Missing required argument pages in FFTonGPU
-Warning--Missing required argument author in cerium
-Warning--there's no number and/or volumegongo:2008a
-Warning--Missing required argument pages in gongo:2008a
-Warning--there's no number and/or volumeyutaka:os
-Warning--Missing required argument pages in yutaka:os
-Warning--there's no number and/or volumetoma:2012a
-Warning--Missing required argument pages in toma:2012a
-Warning--Missing required argument author in cuda
-You've used 11 entries,
-            2207 wiz_defined-function locations,
-            581 strings with 5608 characters,
-and the built_in function-call counts, 1822 in all, are:
-= -- 114
-> -- 69
-< -- 1
-+ -- 27
-- -- 16
-* -- 115
-:= -- 263
-add.period$ -- 11
-call.type$ -- 11
-change.case$ -- 0
-chr.to.int$ -- 0
-cite$ -- 21
-duplicate$ -- 122
-empty$ -- 198
-format.name$ -- 25
-if$ -- 424
-int.to.chr$ -- 0
-int.to.str$ -- 11
-missing$ -- 5
-newline$ -- 36
-num.names$ -- 9
-pop$ -- 50
-preamble$ -- 1
-purify$ -- 0
-quote$ -- 0
-skip$ -- 80
-stack$ -- 0
-substring$ -- 32
-swap$ -- 12
-text.length$ -- 11
-text.prefix$ -- 0
-top$ -- 0
-type$ -- 0
-warning$ -- 10
-while$ -- 12
-width$ -- 13
-write$ -- 74
-is.kanji.str$ -- 49
-(There were 11 warnings)
Binary file sigos.dvi has changed
--- a/sigos.log	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex 2011.8.15)  22 APR 2014 21:38
-**sigos.tex
-(./sigos.tex
-pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2003/12/01> patch level 0)
-(./ipsjpapers.cls
-Document Class: ipsjpapers 2007/06/15 ver 2.12
-(./ipsjpapers.sty
-\old@latex@skip=\skip41
-\@Q=\dimen118
-\jfsize=\count81
-\jspaceskip=\dimen119
-\@mojihaba=\dimen120
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <9> on input line 546.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <6> on input line 546.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <5> on input line 546.
-\@abstractbox=\box41
-\@titlewidth=\dimen121
-\@eabstractbox=\box42
-\mkt@prevdepth=\dimen122
-\mkt@titlebox=\box43
-\mkt@cnta=\count82
-\mkt@cntb=\count83
-\mkt@sname=\count84
-\mkt@gname=\count85
-\mkt@boxa=\box44
-\mkt@namewidth=\dimen123
-\c@affi@footnote=\count86
-\c@affi@pfootnote=\count87
-\c@volpageoffset=\count88
-\c@volume=\count89
-\c@number=\count90
-\c@year=\count91
-\@leftcolumnfootnote=\box45
-\@rightcolumnfootnote=\box46
-\opt@baselineskip=\skip42
-\bio@picbox=\box47
-\bio@colht=\dimen124
-\bio@splitheight=\dimen125
-\bio@maxgap=\dimen126
-\bio@lastgap=\dimen127
-\bio@th=\dimen128
-\bio@lhA=\dimen129
-\bio@hA=\dimen130
-\bio@hB=\dimen131
-\bio@lh=\dimen132
-\bio@rh=\dimen133
-\bio@tempdim=\dimen134
-\bio@pbox=\insert233
- (./ipsjcommon.sty
-\c@section=\count92
-\c@subsection=\count93
-\c@subsubsection=\count94
-\c@paragraph=\count95
-\c@subparagraph=\count96
-\bib@adjustheight=\dimen135
-\c@figure=\count97
-\c@table=\count98
-\cap@linewidth=\dimen136
-\cap@hsize=\dimen137
-\cap@prevgraf=\count99
-\cap@box=\box48
-\PF@fnotectr=\count100
-\PF@page=\count101
-\adj@boxa=\box49
-\adj@boxb=\box50
-\adj@height=\dimen138
-\adj@deadcycle=\count102
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <10> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 880.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <10> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 880.
-)))
-(/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty
-Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
-
-(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
-\KV@toks@=\toks15
-)
-(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty
-Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR)
-
-(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty
-Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
-)
-(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg
-File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive
-)
-Package graphics Info: Driver file: dvipdfm.def on input line 81.
-
-(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def
-File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file
-))
-\Gin@req@height=\dimen139
-\Gin@req@width=\dimen140
-)
-(/usr/local/share/texmf/ptex/latex/url/url.sty
-\Urlmuskip=\muskip10
-Package: url 2004/03/15  ver 3.1  Verb mode for urls, etc.
-)
-(/usr/local/share/texmf-dist/tex/latex/listings/listings.sty
-\lst@mode=\count103
-\lst@gtempboxa=\box51
-\lst@token=\toks16
-\lst@length=\count104
-\lst@currlwidth=\dimen141
-\lst@column=\count105
-\lst@pos=\count106
-\lst@lostspace=\dimen142
-\lst@width=\dimen143
-\lst@newlines=\count107
-\lst@lineno=\count108
-\c@lstlisting=\count109
-\abovecaptionskip=\skip43
-\belowcaptionskip=\skip44
-\lst@maxwidth=\dimen144
-
-(/usr/local/share/texmf-dist/tex/latex/listings/lstpatch.sty
-File: lstpatch.sty 2004/10/17 1.3b (Carsten Heinz)
-)
-(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty
-File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz)
-\c@lstnumber=\count110
-\lst@skipnumbers=\count111
-\lst@framebox=\box52
-)
-(/usr/local/share/texmf-dist/tex/latex/listings/listings.cfg
-File: listings.cfg 2004/09/05 1.3 listings configuration
-))
-Package: listings 2004/10/17 1.3b (Carsten Heinz)
-
-(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty
-File: lstlang1.sty 2004/09/05 1.3 listings language file
-)
-(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty
-File: lstlang1.sty 2004/09/05 1.3 listings language file
-)
-(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty
-File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz)
-) (./dummy.tex)
-(./sigos.aux
-
-LaTeX Warning: Label `test' multiply defined.
-
-
-LaTeX Warning: Label `test' multiply defined.
-
-
-LaTeX Warning: Label `test' multiply defined.
-
-
-LaTeX Warning: Label `test' multiply defined.
-
-)
-\openout1 = `sigos.aux'.
-
-LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for JY1/mc/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Checking defaults for JT1/mc/m/n on input line 31.
-LaTeX Font Info:    ... okay on input line 31.
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <14.4> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 85.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <14.4> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 85.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <10.95> on input line 85.
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <8> on input line 85.
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <12> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 85.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <12> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 85.
-
-
-Class ipsjpapers Warning: \etitle is too wide. Break line(s) by \\ on input lin
-e 85.
-
-LaTeX Font Info:    External font `cmex10' loaded for size
-(Font)              <7> on input line 85.
-(./introduction.tex) (./opencl.tex
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <9> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 2.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <9> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 2.
- [1
-
-
-] [2]
-File: ./images/culculate_index.pdf Graphic file (type eps)
- <./images/culculate_index.pdf>
-Overfull \hbox (20.78407pt too wide) in paragraph at lines 80--81
- [] 
- []
-
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <7> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 82.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <7> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 82.
-) (./cerium.tex
-File: ./images/createTask.pdf Graphic file (type eps)
- <./images/createTask.pdf>
-Overfull \hbox (0.70938pt too wide) in paragraph at lines 26--27
- [] 
- []
-
-
-LaTeX Warning: `!h' float specifier changed to `!ht'.
-
-File: ./images/scheduler.pdf Graphic file (type eps)
-<./images/scheduler.pdf> (./source/multiply.cc
-LaTeX Font Info:    Font shape `JT1/mc/bx/n' in size <8> not available
-(Font)              Font shape `JT1/gt/m/n' tried instead on input line 1.
-LaTeX Font Info:    Font shape `JY1/mc/bx/n' in size <8> not available
-(Font)              Font shape `JY1/gt/m/n' tried instead on input line 1.
-LaTeX Font Info:    Try loading font information for OMS+cmr on input line 2.
-
-(/usr/local/share/texmf-dist/tex/latex/base/omscmr.fd
-File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
-)
-LaTeX Font Info:    Font shape `OMS/cmr/m/n' in size <8> not available
-(Font)              Font shape `OMS/cmsy/m/n' tried instead on input line 2.
-LaTeX Font Info:    Try loading font information for OML+cmr on input line 7.
-
-(/usr/local/share/texmf-dist/tex/latex/base/omlcmr.fd
-File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions
-)
-LaTeX Font Info:    Font shape `OML/cmr/m/n' in size <8> not available
-(Font)              Font shape `OML/cmm/m/it' tried instead on input line 7.
- [3])
-Overfull \hbox (71.1005pt too wide) in paragraph at lines 52--52
-[]\OT1/cmr/m/n/9 multiply 
- []
-
-
-Overfull \hbox (17.26125pt too wide) in paragraph at lines 57--67
- [] 
- []
-
-(./source/multiply_task.cc)
-Overfull \hbox (53.93672pt too wide) in paragraph at lines 75--75
-[]\OT1/cmr/m/n/9 task 
- []
-
-(./source/multiply_task_dp.cc)
-Overfull \hbox (70.3366pt too wide) in paragraph at lines 113--113
-[]\OT1/cmr/m/n/9 example 
- []
-
-) (./cerium_gpu.tex [4]
-File: ./images/gpu_arch.pdf Graphic file (type eps)
- <./images/gpu_arch.pdf>
-File: ./images/cpu_arch.pdf Graphic file (type eps)
- <./images/cpu_arch.pdf>
-(./source/Multi.cl)
-Overfull \hbox (112.5995pt too wide) in paragraph at lines 51--51
-[]\OT1/cmr/m/n/9 multiply(OpenCL) 
- []
-
-(./source/Multiply.cu)
-Overfull \hbox (105.65578pt too wide) in paragraph at lines 52--52
-[]\OT1/cmr/m/n/9 multiply(CUDA) 
- []
-
-) (./benchmark.tex [5]) (./conclusion.tex) (./sigos.bbl [6]
-Overfull \hbox (58.50209pt too wide) in paragraph at lines 48--49
-[]\OT1/cmr/m/n/9 : CUDA, https://developer.nvidia.com/category/zone/cuda-
- []
-
-) [7
-
-] (./sigos.aux)
-
-LaTeX Warning: There were multiply-defined labels.
-
- ) 
-Here is how much of TeX's memory you used:
- 2805 strings out of 94681
- 37350 string characters out of 1169859
- 170801 words of memory out of 1500000
- 6044 multiletter control sequences out of 10000+50000
- 18772 words of font info for 72 fonts, out of 1200000 for 2000
- 566 hyphenation exceptions out of 8191
- 33i,10n,68p,250b,1813s stack positions out of 5000i,500n,6000p,200000b,5000s
-
-Output written on sigos.dvi (7 pages, 53808 bytes).
Binary file sigos.pdf has changed
--- a/sigos.tex	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-\documentclass[techrep]{ipsjpapers}
-\usepackage[dvipdfm]{graphicx}
-\usepackage{url}
-\usepackage{listings}
-\lstset{%
-  language={C++},%使用言語
-  basicstyle={\small},%書体
-  commentstyle={\small\itshape},%コメントの書体
-  keywordstyle={\small\bfseries},%キーワードの書体
-  %identifierstyle={\small},%
-  %ndkeywordstyle={\small},%
-  stringstyle={\small},%文字列の書体
-  frame={trlb},%外枠
-  breaklines=true,%改行
-  columns=[l]{fullflexible},%
-  xrightmargin=0zw,%
-  xleftmargin=3zw,%
-  %numbers=none,%行番号の表示
-  %numberstyle={\scriptsize},%行番号の書体
-  %numbersep=1zw,%
-  %stepnumber=1,
-  lineskip=-0.5ex,%
-  captionpos=b,%キャプションの位置
-}
-\renewcommand{\lstlistingname}{Code}
-\input{dummy.tex} %% Font 
-
-% ユーザが定義したマクロなど.
-\makeatletter
-
-\begin{document}
-
-% 和文表題
-\title{並列プログラミングフレームワーク Cerium の\\ OpenCL, CUDA 対応}
-% 英文表題
-\etitle{Supporting OpenCL, CUDA in  Parallel programming framework Cerium}
-
-% 所属ラベルの定義
-\affilabel{1}{琉球大学大学院理工学研究科情報工学専攻 \\Interdisciplinary Information Engineering, Graduate School of Engineering and Science, University of the Ryukyus.}
-\affilabel{2}{琉球大学工学部情報工学科\\Information Engineering, University of the Ryukyus.}
-
-% 和文著者名
-\author{
-  小久保 翔平\affiref{1}\and
-  河野 真治\affiref{2}
-}
-
-% 英文著者名
-\eauthor{
-  Shohei KOKUBO\affiref{1}\and
-  Shinji KONO\affiref{2}
-}
-
-% 連絡先(投稿時に必要.製版用では無視される.)
-\contact{小久保 翔平\\
-        〒903-0213 沖縄県西原町千原1番地\\
-	琉球大学工学部情報工学科\\
-        TEL: (098)895-2221\qquad FAX: (098)895-8727\\
-        email: kokubo@cr.ie.u-ryukyu.ac.jp}
-
-% 和文概要
-\begin{abstract}
-  当研究室では、PS3, Linux 及び MacOS X 上で動作する並列プログラミングフレームワーク Cerium を提案している。
-  MacOS X 上で GPGPU を行うには、OpenCL または CUDA を用いる方法が考えられる。
-  OpenCL, CUDA の API に対応した API を Cerium に用意することでデータ並列に対応した。
-  タスク並列で実行する場合、データ転送がオーバーヘッドになる。
-  このオーバヘッドを解決するためには、kernel の実行中にデータ転送を行うことでデータ転送をオーバーラップする必要がある。
-  OpenCL では CommandQueue、CUDA では Stream を複数用いることでデータ転送や kernel の実行を並列に行うことができる。
-  複数の CommandQueue, Stream を用いて、自動で並列実行を行うスケジューラーを実装した。
-  実装したスケジューラーを WordCount、FFT を例題に測定し、考察を行う。
-\end{abstract}
-
-% 英文概要
-\begin{eabstract}
-  We are developing parallel programming framework Cerium, that is running on the PS3, Linux, Mac OS X and GPGPU.
-  As GPGPU support on Mac OS X, OpenCL or CUDA can be used in an API set.
-  Data Parallel on GPUGPU is also working on CPUs.
-  In Task Parallel, data transfer causes overhead.
-  To resolve this, pipeline data transfer is used both on GPGPU and Many Cores.
-  OpenCL and CUDA have  slightly different behavior on Data Parallel and out of order task execution.
-  In WordCount and FFT examples, we  show the different and its analysis.
-\end{eabstract}
-
-% 表題などの出力
-\maketitle
-
-% 本文はここから始まる
-
-\input{introduction}
-\input{opencl}
-\input{cerium}
-\input{cerium_gpu}
-\input{benchmark}
-\input{conclusion}
-
-\nocite{*}
-%\nocite{opencl}
-%\nocite{opencl:ref}
-%\nocite{opencl:applied}
-%\nocite{yutaka:os}
-\bibliographystyle{ipsjunsrt}
-\bibliography{sigos}
-%\bibliography{cerium,book}
-
-
-\end{document}
--- a/source/Multi.cl	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-__kernel void
-multi(__global const long *params, __global const float* A, __global const float* B, __global float* C)
-{
-    // get index
-    long id = get_global_id(0);
-    C[id]=A[id]*B[id];
-}
--- a/source/multiply.cc	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-void
-multi_init(TaskManager *manager)
-{
-    A = new float[length];
-    B = new float[length];
-    C = new float[length];
-    for(int i=0; i<length; i++) {
-        A[i]=(float)(i+1000);
-        B[i]=(float)(i+1)/10.f;
-    }
-
-    // create task
-    HTask* multiply = manager->create_task(MULTIPLY_TASK);
-    // set cputype
-    multiply->set_cpu(spe_cpu);
-    // set indata
-    multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
-    multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
-    // set outdata
-    multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
-    multiply->set_param(0,(long)length);
-    // spawn task
-    multiply->iterate(length); 
-}
--- a/source/multiply.cu	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-extern "C" {
-    __global__ void multi(long* params, float* A, float* B, float* C) {
-        // calculate index
-        int id = blockIdx.x * blockDim.x + threadIdx.x;
-        C[id]=A[id]*B[id];
-    }
-}
--- a/source/multiply_task.cc	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-static int
-run(SchedTask *s)
-{
-    // get input
-    float* A = (float*)s->get_input(0);
-    float* B = (float*)s->get_input(1);
-    // get output
-    float* C = (float*)s->get_output(0);
-    // get parameter
-    long length = (long)s->get_param(0);
-
-    for(int i=0;i<length;i++)
-        C[i]=A[i]*B[i];
-
-    return 0;
-}
--- a/source/multiply_task_dp.cc	Tue Apr 22 21:51:04 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-static int
-run(SchedTask *s)
-{
-    // get input
-    float* A = (float*)s->get_input(0);
-    float* B = (float*)s->get_input(1);
-    // get output
-    float* C = (float*)s->get_output(0);
-    // get index
-    long i = (long)s->x;
-
-    C[i]=A[i]*B[i];
-
-    return 0;
-}